Docker-Labs + defensiver Scanner für fastjson Remote-Class-Load-RCE. fastjson 1.2.66-1.2.83: @JSONType-Ressourcenprobe (CVE-2026-16723). fastjson2 2.0.57: Der @type des Angreifers erreicht loadClass mit deaktiviertem autoType über polymorphe Typen (@JSONType(seeAlso) / Jackson @JsonSubTypes). Reine Marker-Payloads; safeMode- und JDK17-Kontrollen.
@JSONType Remote-JAR/FD-Ketten-Labor und ErkennungDieses Repository enthält nun zwei getrennte Fastjson-Forschungslinien:
modern-fd/ ist die empfohlene, nur-Marker-Rekonstruktion der
Fastjson-1.2.83-Einzelkörper-Remote-JAR/Dateideskriptor-Kette auf Spring
Boot 3, normal eingebettetem Tomcat und JDK 17. Sie verwendet die wörtliche
Fest-DTO-Senke JSON.parseObject(body, BoundEnvelope.class) bei deaktiviertem AutoType.scanner/ enthält passive Anfrage-/Log-Erkennung, statische
Artefakt-Inventarisierung und eine nicht ausführende Erreichbarkeitssonde.Der Bug:
ParserConfig.checkAutoTypeprüft jeden@type-Wert auf die@JSONType-Annotation, indemgetResourceAsStream(typeName.replace('.','/') + ".class")ausgeführt wird. Auf modernen Linux/JDK-Kombinationen kann eine Remote-jar:http-Sonde das JAR hinter einem offenen Deskriptor im Cache belassen; späterejar:file:/proc/self/fd/N-Sonden im selben Körper können es unter gültigen Klassennamen wieder öffnen und eine annotierte Klasse initialisieren. Die exakte 1.2.83-Komposition funktioniert bei deaktiviertem AutoType und über ein festes DTO, dasList<Object>enthält. Bindung allein ist daher keine Abschwächung. Vollständiger Durchlauf:docs/MECHANISM.md.
Die begleitende projektsweite Überprüfung umfasste 2.041 aufrufbare/statische-Initialisierer-Zeilen in allen 193 Fastjson-1.2.83-Produktions-Java-Dateien. Die folgende Tabelle priorisiert die Ergebnisse mit der höchsten Auswirkung; sie ist keine Behauptung, dass jede Fastjson-Bereitstellung betroffen ist. Dieses Repository reproduziert direkt F105. Die übrigen Einträge fassen separat versiegelte Quellcode-Überprüfungen und begrenzte Laborbeweise zusammen.
| Priorität | Befund | Bewiesenes Ergebnis | Wichtige Grenze |
|---|---|---|---|
| 1 | F105 — Remote-@JSONType-Bytecode-Ausführung | Angreiferbereitgestellte Klasseninitialisierung über kompatible Spring-Boot-Loader, einschließlich der JDK-8-Direktroute und der Linux/JDK-17-Route mit beibehaltenem JAR über /proc/self/fd/N-Fortsetzung | Erfordert einen parser-erreichbaren @type-Träger, kompatiblen Boot/TCCL-Loader, ausgehenden Verkehr, SafeMode/IgnoreAutoType aus und ein exaktes Angreifer-JAR. Die moderne Fest-DTO-Route benötigt zusätzlich eine generische Wertspur (das Labor verwendet List<Object>), Linux-procfs, einen beibehaltenen Deskriptor und exakte Namensausrichtung; nicht universell auf jeder JDK, jedem Loader oder Betriebssystem |
| 2 | F1/F45 — TemplatesImpl-Befehlsausführung | Marker-Befehlsausführung über die Fest-DTO-API, einschließlich einer ignorierten Körpereigenschaft | Erfordert geschwächte Serverrichtlinie: Klassenaufnahme, AutoType und Befüllung privater Felder oder gleichwertige Pfade; unveränderte Standardeinstellungen blockieren dies |
| 3 | F70/C016 — unbegrenzte Pufferung und GZIP-Expansion | Typisierte Byte-/InputStream- und annotierte DTO-Pfade expandieren oder puffern ohne Ausgabegrenze; eingeschränkter Java-Heap-OOME wurde reproduziert | Endpunkt/Schema und Erreichbarkeit von Angreifer-Bytes sind erforderlich; ein produktionsweiter Ausfall wurde nicht festgestellt |
| 4 | F18/C089 — Stack-Erschöpfung des Parser-Threads | Tief verschachtelte gewöhnliche Objektwerte können unter Standard-Parsing einen StackOverflowError erzeugen | Auswirkung auf die Verfügbarkeit des Anfrage-Threads; kein unveränderlicher JVM- oder dienstweiter Absturz |
| 5 | F120/C162 — HTTP-SSRF/lokale Ressourcenladung mit festem Schema | Körpergesteuerte JEditorPane/JTextPane.page führt HTTP-Anfragen aus und kann begrenzte file:-Inhalte in den Dokumentstatus laden | Erfordert, dass die Anwendung den Swing-Typ deklariert; keine automatische Antwort-Exfiltration oder RCE wurde bewiesen |
| 6 | F118/C160 — Autorisierungs-/Datenintegritätsfehler durch Hash-Kollision | Eine ausgeprägte Unicode-FNV-1a-64-Kollision kann an eine privilegierte Enum-Konstante binden oder eine JSONPath-Mutation auf den falschen Bean-Setter lenken | Erfordert eine nutzbare Kollision und nachgelagertes Vertrauen oder eine exponierte JSONPath-Mutationsoperation; keine Klassenaufnahme oder RCE |
| 7 | F121/C163 — feste JdbcRowSet-JNDI-Erreichbarkeit | Exakte Setter-Reihenfolge verursachte eine körperausgewählte ausgehende JNDI/LDAP-Verbindung | Beweis endet bei einer Verbindung: keine Naming-Antwort, Objektfabrik, Bytecode-Ladung oder RCE |
| 8 | F2/F45 — standardmäßige DNS-Auflösung | Angreiferkontrollierte Hostname-Auflösung funktioniert unter Standardkonfiguration und über eine ignorierte Fest-DTO-Eigenschaft | Nur DNS/OOB-Interaktion, keine generische HTTP-SSRF oder RCE |
Siehe findings/FINDINGS.md für Validierungskennzeichnungen,
Voraussetzungen, Befunde niedrigerer Stufe, Abhilfeprioritäten und explizite negative
Grenzen.
Dieses Repository dient der Ausbildung, defensiven Forschung und autorisierten Prüfung von Systemen,
die Ihnen gehören oder für die Sie ausdrücklich die Erlaubnis zur Prüfung haben. Host-Publikation, soweit für das
interne Netzwerk des modernen Labors unterstützt, wird nur auf 127.0.0.1 angefragt; seine Skripte treiben den
Test vollständig innerhalb dieses isolierten Netzwerks. Das moderne Labor hat kein Prozessausführungs-
Primitiv und setzt nur einen festen In-JVM-Marker.
Das ältere JDK-8-Labor führt id aus und schreibt seine Ausgabe nach /tmp/PWNED; halten Sie es
isoliert. Richten Sie den Legacy-Exploit oder die aktive Sonde nicht gegen unbefugte Systeme.
Das scanner/-Verzeichnis enthält vier abhängigkeitsfreie Python-3-Werkzeuge (keine pip-
Installationen).
fjdetect.py — untersucht dekodierte JSON-Anfragekörper oder strukturierte
JSON-Logs passiv auf Remote-JAR-Seeds und /proc/self/fd- oder /dev/fd-Sequenzen.fjscan_static.py — inventarisiert Jars/Wars/Ears auf die verwundbare Kombination
(inhaltsgestützt, metadatenverifiziert 1.2.83 × tatsächlicher Spring-Boot-Loader-Klassen-
inhalt). Sondenenthaltende 1.2.48–1.2.82-Veröffentlichungen und reine Metadaten-/Dateinamen-
kandidaten werden separat zur Überprüfung gemeldet. CI-Gate-freundlich (Exit 2 bei EXPOSED).fjscan_probe.py — aktive, sichere Erreichbarkeitsprüfung: feuert den @type auf einen Canary,
den Sie kontrollieren (eingebauter Listener oder Burp Collaborator / interactsh) und korreliert den
Ressourcenabruf-Callback. Sein eingebauter Listener gibt ein leeres 404 zurück; konfigurieren Sie
externe Listener äquivalent. Ein Callback beweist keine Klassenladung oder RCE.fjpayload.py — erzeugt Remote-Ressourcen-Abrufkörper für manuelle Tests;
verwenden Sie nur einen leeren/404-Listener, wenn keine Ausführung beabsichtigt ist.# 1) passive Anfrage-/Log-Inspektion
python3 scanner/fjdetect.py --ndjson gateway.jsonl
# 2) Inventarisierung von Build-Artefakten / entpackten Images (parallel)
python3 scanner/fjscan_static.py /path/to/artifacts --threads 16