🔍 Contexte
Publié le 21 juillet 2026 par la société FearsOff (Dubai, UAE) sur leur blog de recherche, cet article détaille la découverte et l’exploitation d’une vulnérabilité RCE critique dans FastJson 1.2.83, identifiée sous CVE-2026-16723. FastJson 1.2.83 était jusqu’ici considéré comme la version sûre de la branche 1.x, notamment parce qu’AutoType est désactivé par défaut.
🧩 Mécanisme de la vulnérabilité
La vulnérabilité repose sur le comportement de la fonction checkAutoType dans FastJson 1.2.83 :
- Avant de vérifier si une classe est autorisée, FastJson appelle
getResourceAsStreamsur la valeur du champ@typecontrôlée par l’attaquant. getResourceAsStreamaccepte des noms de ressources sous forme d’URL, permettant une requête HTTP sortante vers un serveur attaquant (SSRF aveugle).- La transformation
typeName.replace('.', '/')empêche l’utilisation de noms de domaine avec des points, contournée en utilisant la représentation entière de l’adresse IP (ex:2130706433pour127.0.0.1).
⚙️ Chaîne d’exploitation
Étape 1 – SSRF aveugle :
{"@type":"http://2130706433:31337/probe"}
Déclenche une requête GET vers le serveur de l’attaquant, confirmant le SSRF avec AutoType désactivé.
Étape 2 – Chargement de jar distant (JDK 8) :
En utilisant le schéma jar:http://, FastJson télécharge un jar distant contenant une classe annotée @JSONType. FastJson instancie la classe avant le contrôle AutoType, exécutant le bloc statique <clinit> comme payload. Limité à JDK 8 (JDK 9+ rejette les noms de classe contenant ://).
Étape 3 – Exploitation sur JDK 21 via /proc/self/fd :
- Le JVM télécharge le jar dans un fichier temporaire
/tmp/jar_cache<random>.tmp, le supprime du disque mais garde le descripteur de fichier ouvert. - Un second
@typepointe vers/proc/self/fd/<N>pour charger la classe depuis le descripteur ouvert, contournant la restriction sur://. - Le numéro de descripteur est bruteforcé (quelques centaines de tentatives).
- Exploitable uniquement avec le classloader Spring Boot fat-jar (
LaunchedURLClassLoader) ; ne fonctionne pas avec un déploiement WAR standard sur Tomcat.
🎯 Conditions d’exploitation
- FastJson version 1.2.68 à 1.2.83
- Application déployée en Spring Boot fat-jar
- JDK 8 : exploitation directe en une requête
- JDK 9+ (dont JDK 21) : exploitation en deux requêtes avec bruteforce du fd
📋 Divulgation
La vulnérabilité a été signalée à Alibaba, qui a publié un advisory critique couvrant FastJson 1.2.68 à 1.2.83. La mitigation recommandée est -Dfastjson.parser.safeMode=true ou la migration vers FastJson 2.x.
📌 Type d’article
Publication de recherche offensive détaillant une chaîne d’exploitation originale, avec preuve de concept fonctionnelle et analyse technique approfondie.
🧠 TTPs et IOCs détectés
TTP
- T1190 — Exploit Public-Facing Application (Initial Access)
- T1059.007 — Command and Scripting Interpreter: JavaScript (Execution)
- T1203 — Exploitation for Client Execution (Execution)
- T1071.001 — Application Layer Protocol: Web Protocols (Command and Control)
- T1083 — File and Directory Discovery (Discovery)
IOC
🟡 Indice de vérification factuelle : 50/100 (moyenne)
- ⬜ fearsoff.org — source non référencée (0pts)
- ✅ 13739 chars — texte complet (fulltext extrait) (15pts)
- ✅ 3 IOCs (IPs/domaines/CVEs) (10pts)
- ⬜ pas d’IOC vérifié (0pts)
- ✅ 5 TTPs MITRE identifiées (15pts)
- ✅ date extraite du HTML source (10pts)
- ⬜ aucun acteur de menace nommé (0pts)
- ⬜ 0/1 CVE(s) confirmée(s) (0pts)
🔗 Source originale : https://fearsoff.org/research/fastjson-1-2-83-rce