
Scanner CLI offline senza dipendenze che individua fastjson all'interno di JAR e fat-JAR di Spring Boot, segnala l'esposizione a CVE-2026-16723 e rileva le dipendenze shaded per il gating in CI.
Un solo comando per scoprire se nella tua applicazione Java c'è fastjson, dove si nasconde e se è interessato da CVE-2026-16723.
Zero dipendenze · Completamente offline · Un singolo jar da 23KB · Supporta Java 8+
Il 21 luglio 2026, il team ufficiale di fastjson ha reso pubblica CVE-2026-16723 (CVSS 9.0, esecuzione di codice da remoto):
Numerosi avvisi di sicurezza (comprese diverse testate di sicurezza in lingua inglese) continuano ancora oggi ad affermare che «la 1.x è EOL, non ci sarà mai una patch, l'unica strada è migrare a fastjson2». Questa affermazione non è più valida dal 2026-07-29. Puoi verificarlo tu stesso:
| Prova | Link |
|---|---|
Nel repository centrale Maven esiste com.alibaba:fastjson:1.2.84, jar caricato il 2026-07-29 | repo1 |
GitHub release 1.2.84, pubblicata il 2026-07-29T08:24:51Z | release |
Commit chiave fix: strengthen autoType type name validation and whitelist verification | 2026-07-29T07:02:55Z |
La 1.2.83 è stata rilasciata a maggio 2022, dopodiché il ramo 1.x è rimasto senza commit per quattro anni — la 1.2.84 è stata pubblicata in via del tutto eccezionale proprio per questa vulnerabilità.
Il titolo della release non menziona la correzione di sicurezza: il titolo della 1.2.83 riportava «(correzione di sicurezza)», mentre la 1.2.84 dice solo
«Rilascio versione 1.2.84». Ma il corpo del testo lo dice — contiene una sezione completa Security Fixes, che elenca puntualmente quattro
rafforzamenti di AutoType, e è così fin dal giorno del rilascio (2026-07-29) (verificabile nell'archivio Wayback 20260729094935).
Quanto al perché, dopo il rilascio della patch, la maggior parte degli avvisi di sicurezza e degli scanner non si sia ancora adeguata, non sono riuscito a scoprirlo, quindi qui non faccio congetture.
📌 Correzione del 2026-08-14: qui era originariamente scritto «il testo non menziona affatto la sicurezza, perciò non è stato seguito». La prima parte, verificata con il corpo della release e con l'archivio Wayback dello stesso giorno, si è rivelata errata (solo il titolo non lo indicava), e di conseguenza anche la seconda parte perde fondamento ed è stata rimossa.
👉 Impatto concreto per gli utenti della 1.x: aggiornare alla 1.2.84 è la soluzione meno costosa (una minor release dello stesso ramo, di solito senza modifiche al codice), senza essere costretti a fare subito la migrazione di major version a fastjson2. Questo strumento fornisce consigli in tal senso.
⚠️ Il prerequisito è JDK 8 o superiore (verificato il 2026-10-14): le 274 class della 1.2.84 sono tutte bytecode Java 8 (major 52), mentre la 1.2.83 è Java 5 (major 49). Su JDK 7 (Zulu 7u352)
javacemette solo un avviso con codice di uscita 0, ma a runtime lancia direttamenteUnsupportedClassVersionError: com/alibaba/fastjson/JSON : Unsupported major.minor version 52.0. Inoltre: la costanteJSON.VERSIONnella 1.2.84 è ancora"1.2.83", quindi basarsi su di essa per determinare la versione porta a errori; questo strumento leggepom.propertiese non ne è influenzato.
E il punto più problematico è questo:
fastjson è di solito una dipendenza transitiva — nessuno lo installa attivamente, arriva al seguito di altre librerie. Molti team non sanno nemmeno di usarlo.
mvn dependency:tree elenca le dipendenze, ma non è in grado di gestire due situazioni:
Questo strumento è stato scritto proprio per queste due situazioni.
Scarica fastjson-check.jar da Releases, poi:
# 扫一个 jar(Spring Boot fat-JAR 会自动逐层展开)
java -jar fastjson-check.jar ./myapp.jar
# 扫一整个目录(递归查找所有 jar/war)
java -jar fastjson-check.jar /opt/apps
# 输出 JSON,接入流水线
java -jar fastjson-check.jar /opt/apps --json
Non richiede installazione, non richiede account, non richiede connessione a Internet, non carica alcun dato.
Lo stesso artefatto è sia una CLI che un plugin Maven. Questo utilizzo non richiede di scaricare prima il jar:
# 在你的项目目录下直接跑,扫的是 Maven 解析后的依赖
mvn io.github.xiaoqimikko:fastjson-check:0.3.1:check
Oppure collegalo al ciclo di vita della build (fase verify):
<plugin>
<groupId>io.github.xiaoqimikko</groupId>
<artifactId>fastjson-check</artifactId>
<version>0.3.1</version>
<executions>
<execution>
<goals><goal>check</goal></goals>
</execution>
</executions>
</plugin>
pom.xml alla CLIQuando la CLI scansiona pom.xml legge del testo, ma nei progetti reali la versione di fastjson spesso non è in quel testo:
<version>${fastjson.version}</version><parent>, nel tuo pom non c'è questa rigaIl plugin riceve l'insieme delle dipendenze Maven dopo la risoluzione, e ogni dipendenza porta con sé il percorso reale del jar nel repository locale.
Si segue quindi proprio la strada in cui questo strumento è più abile: scansionare com/alibaba/fastjson(2)/JSON.class nel jar reale,
anziché fidarsi di ciò che è scritto nel pom.
⚠️ Ma i confini del riconoscimento non cambiano: la chiave di determinazione resta quel percorso di classe, quindi le dipendenze relocate / ripacchettizzate con nome del package modificato restano non riconoscibili (vedi «Cosa non è» qui sotto). Il plugin risolve «dove è scritta la versione», non «il nome del package è stato cambiato».
| Parametro | Predefinito | Descrizione |
|---|---|---|
-Dfastjson-check.failOnFound | false | Fa fallire la build quando viene rilevato CRITICAL / HIGH |
-Dfastjson-check.path | non impostato | Non analizza l'albero delle dipendenze, analizza invece questo percorso (directory / jar / war / fat-jar) |
-Dfastjson-check.skip | false | Salta l'esecuzione |
🔴 Per impostazione predefinita non fa fallire la build, ed è voluto, diversamente dalla semantica del codice di uscita della CLI:
la riga di comando la digiti tu, e il codice di uscita 1 è proprio ciò che vuoi; il plugin invece è agganciato alla pipeline,
e uno strumento di autoverifica non dovrebbe far diventare rossa la build quando non te lo aspetti. Per usarlo come gate CI, aggiungi esplicitamente
-Dfastjson-check.failOnFound=true.
💡 Su Windows, se il report è illeggibile, riporta la console a GBK (
chcp 936) — la codifica di output della modalità plugin è decisa da Maven, e gli interruttori--utf8/--gbkdella CLI qui non arrivano.
fastjson-check 0.1.0 —— fastjson 应急排查(离线,不外传任何数据)