
Scanner offline per CVE-2026-29000 (CVSS 10.0) in org.pac4j:pac4j-jwt. Ispeziona direttamente jar/fat-jar, quindi funziona dove mvn dependency:tree non può. Singolo jar, zero dipendenze, Java 8+.
Scansione offline per CVE-2026-29000 (CVSS 10.0) — inclusi i pacchetti che l'advisory ufficiale non elenca.
English | 中文
Un singolo jar, circa 24KB, zero dipendenze a runtime, disponibile da Java 8, completamente offline, non trasmette alcun dato.
JwtAuthenticator di org.pac4j:pac4j-jwt non impone la verifica della firma durante l'elaborazione di JWT cifrati (JWE).
Un attaccante che ottiene la chiave pubblica RSA del server (la chiave pubblica è pubblica per definizione),
può costruire un PlainJWT incapsulato in un JWE, scrivendo subject e role con valori arbitrari,
autenticandosi come qualsiasi utente, inclusi gli amministratori. Senza alcuna credenziale.
| Voce | Valore |
|---|---|
| CVE | CVE-2026-29000 |
| GitHub advisory | GHSA-pm7g-w2cf-q238 |
| CVSS | 10.0 (punteggio pieno) |
| Data di pubblicazione | 2026-03-05 |
pac4j è ampiamente integrato in Spring Security, Apereo CAS, JEE, Vert.x, Play, Dropwizard e altri.
La v0.1.0 sosteneva che «il database ufficiale delle vulnerabilità elenca solo 1 pacchetto, mentre in realtà ce ne sono 5», e di conseguenza segnalava come vulnerabili
pac4j-oidc / javalin-pac4j / lagom-pac4j / ratpack-pac4j.
Erano falsi positivi. L'advisory ufficiale elenca correttamente solo pac4j-jwt.
Base della revisione (due prove indipendenti, entrambe riproducibili autonomamente):
| Artefatto | La sua dipendenza da pac4j-jwt | Viene trasmessa agli utilizzatori |
|---|---|---|
pac4j-oidc | scope test (verificato versione per versione su 3.0.0 / 4.0.0 / 4.5.0 / 5.0.0 / 5.7.0 / 6.0.0 / 6.3.0) | ❌ |
javalin-pac4j | scope test | ❌ |
lagom-pac4j-parent | scope provided | ❌ |
ratpack-pac4j:1.4.6 | quel blocco di dipendenze è interamente racchiuso in un commento XML, non esiste affatto | ❌ |
test / provided non vengono trasmesse a valle,
pac4j-jwt non comparirà mai nel runtime classpath degli utilizzatori.pac4j-oidc-6.0.0.jar contiene 78 voci, tutte sotto org/pac4j/oidc/,
senza alcuna classe pac4j-jwt inclusa tramite shade. Né trasmessa, né incorporata.Dov'è l'errore: la v0.1.0 analizzava i pom uno per uno, ma guardava solo «chi dichiara la coordinata pac4j-jwt»,
senza considerare lo scope —— scambiando «dichiarato nel pom» per «l'utilizzatore lo riceverà».
Se hai aggiornato pac4j a causa di un report della v0.1.0, quell'aggiornamento non era necessario (l'aggiornamento in sé è innocuo). È necessario intervenire solo quando nella tua applicazione è effettivamente presente una versione vulnerabile di
pac4j-jwt.
Per determinare se su una determinata macchina esiste effettivamente un pac4j-jwt vulnerabile, mvn dependency:tree fallisce in due situazioni ——
sulla macchina di produzione c'è solo un fat-jar già compilato (senza sorgenti né pom); oppure è stato incluso tramite shade all'interno di un SDK,
e non compare affatto nell'albero delle dipendenze. Questo strumento analizza direttamente l'artefatto stesso, senza dipendere dall'ambiente di build.
| Artefatto | Numero di versioni vulnerabili | Advisory ufficiale |
|---|---|---|
org.pac4j:pac4j-jwt | 114 | ✅ l'unico elencato, e questo è corretto |
java -jar pac4j-check.jar ./myapp.jar # analizza un jar/war
java -jar pac4j-check.jar /opt/apps # analizza una directory (ricorsivamente)
java -jar pac4j-check.jar /opt/apps --json # output JSON, comodo per le pipeline
java -jar pac4j-check.jar ./app.jar --gbk # da usare quando la console Windows mostra caratteri cinesi corrotti
Codici di uscita: 0 = nessun problema rilevato · 1 = dubbio/impossibile determinare · 2 = vulnerabilità rilevata. Utilizzabile direttamente in CI.
[CRITICAL] pac4j-jwt 5.4.3
位置 :demo-app.jar!/BOOT-INF/lib/pac4j-jwt-5.4.3.jar
版本来源:pom.properties(可靠)
部署形态:Spring Boot fat-JAR
结论 :命中 CVE-2026-29000 —— JWE 处理路径未强制校验签名,
拿到服务器 RSA 公钥即可伪造任意身份(含管理员)登录
处置 :升级 pac4j-jwt 至 5.7.9
La v0.1.0 in questo caso segnalava anche un
[CRITICAL] pac4j-oidc—— era un falso positivo, rimosso nella v0.2.0, per i motivi spiegati nella correzione all'inizio.
mvn dependency:tree non riesce a individuareIl verdetto si basa esclusivamente sull'advisory ufficiale GHSA-pm7g-w2cf-q238:
pac4j-jwt < 4.5.9 -> aggiorna a 4.5.9
pac4j-jwt >= 5.0.0-RC1 且 < 5.7.9 -> aggiorna a 5.7.9
pac4j-jwt >= 6.0.4.1 且 < 6.3.3 -> aggiorna a 6.3.3
Autoverifica: questo strumento esegue il verdetto su tutte le 147 versioni di pac4j-jwt presenti su Maven Central,
ottenendo 114 corrispondenze, in perfetta corrispondenza con la somma delle versioni nei tre intervalli dell'advisory ufficiale (13+33+68).
Questa asserzione è scritta nei test (OfficialRangeCrossCheckTest); se non corrisponde, la build fallisce.
⚠️ Ma bisogna essere chiari su cosa verifica: verifica che l'algoritmo degli intervalli di versione sia corretto, non può verificare «quali artefatti debbano entrare nella tabella dei verdetti» —— il falso positivo della v0.1.0 si è verificato proprio su quest'ultimo punto, e all'epoca questa autoverifica era verde. L'ambito coperto dalla verifica ≠ l'ambito in cui la conclusione è valida.
Copre solo il groupId org.pac4j.
Alcune ricerche di terze parti sostengono che gli artefatti vulnerabili siano 19 in totale, per 1.020 versioni, ma non hanno pubblicato l'elenco completo.
Questo strumento ricostruisce in modo indipendente la porzione relativa a org.pac4j, senza pretendere di coprire tutto.
Altri groupId (come org.apereo.cas di Apereo CAS) non sono inclusi.
pac4j-jwt 6.0.0 ~ 6.0.4 è contrassegnato come «dubbio» e non come «vulnerabile».
La fonte ufficiale afferma che la serie 6.x è vulnerabile a partire da 6.0.4.1; mentre ricerche di terze parti sostengono che la vulnerabilità fosse stata introdotta già in 1.9.2 ——
se fosse vero, anche queste 5 versioni dovrebbero essere conteggiate. Non abbiamo verificato in modo indipendente le conclusioni di terze parti,
quindi le segnaliamo separatamente e raccomandiamo un aggiornamento prudente, invece di dichiararle direttamente vulnerabili.
Perché tanta prudenza: una regola di verdetto sbagliata non è un «falso positivo», è far compiere all'utente l'azione sbagliata. Meglio contrassegnare come dubbio, piuttosto che fissare come conclusione un ambito non verificato.
mvn package # artefatto: target/pac4j-check.jar
mvn test # 31 test
Se trovi errori di verdetto, mancate rilevazioni o falsi positivi, apri una Issue. Se puoi fornire coordinate riproducibili dell'artefatto (groupId:artifactId:version), la correzione sarà molto più rapida.
Apache License 2.0
Scanner offline per CVE-2026-29000 (CVSS 10.0) — inclusi i pacchetti che l'advisory ufficiale non elenca.
Un singolo jar, ~24KB, zero dipendenze a runtime, Java 8+, completamente offline, non invia nulla da nessuna parte.