외로운 Nova의 작업실

CVE-2014-6271 - ShellShock 본문

Server Penetesting/CVE-XXXX

CVE-2014-6271 - ShellShock

Nova_ 2023. 4. 11. 11:40

- 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가 들어가야합니다.
Comments