Wins blog

글로벌 정보보안 파트너! Global Security  No.1 윈스는 국가대표 정보보안 기업에서 글로벌 강소기업으로 도약합니다.

보안 정보

앞 내용 보기 다음 내용 보기
취약점 정보[CVE-2018-12794] Adobe Reader 유형 혼란으로 인한 코드 실행 취약점
작성일 2018-10-05 조회 1774

 

 

 

 

 

9월 18일 ZDI 연구팀에 의해 Adobe 제품에 영향을 주는 PDF 취약점이 발표되었습니다.

 

XML 데이터 패키지(XDP) 템플릿을 구성하고 XForm 객제에 대한 Javascript 작업 수행 중 조작된 구성으로 인헤 Out of Bounds 오류가 발생합니다.

 

 

[그림. 1] 악성 PDF 파일 다운로드 패킷

 

 

 


[ 취약점 설명 ] 

공격자는 XML 데이터 페키지(XDP) 템플릿과 Javascript를 이용한 XML Forms 구조 객체(XFA)를 조작해 Adobe 어플리케이션이 Template 객체의 경계 밖으로 데이트를 참조하도록 유도합니다.

 

template의 폼 추가를 통해 하위 폼 추가를 실시하고 .presence = “inactive"를 이용 crash를 발생 시킵니다.

 

 

[그림. 2] XFA 하위 모듈과 presence inactive property를 이용해 취약점 Crush 발생

 

 

presence는 다음과 같은 property를 가집니다.

 

(1) visible - (기본값) Object is visible
(2) invisible - 객체는 보이지 않지만 레이아웃 및 이벤트 처리에 여전히 참여합니다. 즉 공간이 레이아웃에 할당되어이 객체를 표시하면 계산 및 유효성 검사가 여전히 실행
(3) 숨김 - 객체가 보이지 않고 레이아웃에서 제외되었습니다. 이 개체에 대해 예약 된 공간이 없습니다. 그 계산과 유효성 검사는 여전히 실행
    
   - XFA 3.0에서는 다음을 추가
(4) inactive - 객체가 숨겨져 있으며 이벤트 처리에서 제외 계산, 검증 및 기타 이벤트가 발생하지 않는다. 애플리케이션을 정의하는 하위 폼이 presence = "inactive"로 설정된 경우 이러한 모든 동작은 true

 


페이지 힙이 활성화되면 Template 객체를 읽는 동안 범위를 벗어난 읽기가 발생하면 CMP 명령어의 위치에서 충돌이 발생합니다. 


개체의 크기가 0x140 바이트 인 것처럼 보이지만 오프셋 0x1d0에서 역 참조하는 데이터는 버퍼의 경계를 벗어납니다.

 

 


[그림.3] [http://www.4hou.com/vulnerable/13735.html]

 

 

이를 이용해 공격자는 임의의 코드를 실행할 수 있습니다.

 

 


[그림. 4] 악성 PDF 실행시 Crash라는 메세지 팝업창을 띄우는 모습

 

 

 


[ 취약시스템 ]

Adobe Systems Acrobat DC (Classic) 2015.006.30418 and earlier 
Adobe Systems Acrobat DC (Continuous) 2018.011.20040 and earlier 
Adobe Systems Acrobat Reader 2017 2017.011.30080 and earlier 
Adobe Systems Acrobat Reader DC (Classic) 2015.006.30418 and earlier 
Adobe Systems Acrobat Reader DC (Continuous) 2018.011.20040 and earlier 

 

 

 


[ 해결방안 ]

1.벤더사에서 권고하는 최신의 패치를 적용합니다.
https://helpx.adobe.com/security/products/acrobat/apsb18-21.html
2.신뢰되지 않은 메일,웹사이트의 첨부파일을 열람하지 않습니다.
3.최신의 백신을 이용합니다.

 

 

 

 

[ 공격 탐지 방안 ]

1. 탐지된 Response Payload에 %PDF-1.7과 같은 PDF Magic Number 존재
2. Javascript 구문 존재
3. Javascript 구문 안에 no = xfa.resolveNode("xfa[0].template[0].outerform[0].sub1[0]") 변수 할당
4. Javascript 구문 안에 no2 = xfa.resolveNode("xfa[0].form[0].outerform[0].sub2[0]") 변수 할당
5. no.nodes.append(o2) 변수 노드 연산
6. no2.presence = "inactive"; 상태값 지정 존재

변수와 스크립트 구문은 약간의 변화가 존재할 수 있지만, 전체적인 코드는 위와 같습니다.

 

 

 

 

[ Win Sniper 대응방안 ]

Sniper-IPS

[4505] Adobe Reader Type Confusion XFA RCE

Sniper-UTM

[805374689] Adobe Reader Type Confusion XFA RCE

Sniper-APTX

[3756] Adobe Reader Type Confusion XFA RCE

 

 

 


[ 참조 ]

https://helpx.adobe.com/security/products/acrobat/apsb18-21.html
https://www.zerodayinitiative.com/blog/2018/9/18/cve-2018-12794-using-type-confusion-to-get-code-execution-in-adobe-reader
https://github.com/thezdi/PoC/tree/master/CVE-2018-12794
http://www.4hou.com/vulnerable/13735.html

첨부파일 첨부파일이 없습니다.
태그 CVE-2018-12794  Adobe