
Rileva i moduli e le versioni di Apache Shiro effettivamente installati, stabilendo una per una quali delle 26 CVE ufficiali ricadono davvero su di te. Valutazione per «CVE × modulo», un singolo JAR a zero dipendenze. CVE-2026-49268
Identifica i moduli e le versioni di Apache Shiro effettivamente installati e determina, una per una, quali delle 26 CVE ufficiali ti riguardano davvero.
Un singolo jar senza dipendenze, nessuna connessione di rete, non legge il tuo pom — scansiona direttamente gli artefatti di build (jar / war / fat jar / directory).
java -jar shiro-check.jar --utf8 your-app.jar
Le CVE di Shiro non sono legate a "Shiro", ma a moduli specifici. Lo stesso identificativo segue regole diverse su moduli diversi:
| CVE | Moduli interessati | Solo chi usa shiro-core |
|---|---|---|
| CVE-2020-17510 | shiro-spring | Non colpito |
| CVE-2020-17523 | shiro-web / shiro-spring / shiro-spring-boot-starter | Non colpito |
| CVE-2023-34478 | shiro-web | Non colpito |
| CVE-2026-56091 | shiro-guice | Non colpito |
Delle 26 CVE ufficiali, 13 non coinvolgono affatto shiro-core. Ridurle alla frase "Shiro < 1.7.1 ha una falla" significa fare al posto dell'utente un giudizio che spetta a lui — e sbagliarlo.
La granularità di valutazione di questo strumento è CVE × modulo: 26 CVE si espandono in 37 regole, che coprono 7 moduli.
Dependabot abbina le GitHub advisory in base alle coordinate delle dipendenze. 5 delle 26 voci non corrispondono:
Ma shiro-root è il POM padre con packaging=pom — su Maven Central non esiste un jar corrispondente (HTTP 404), nessun progetto dipende da esso, quindi il matching per coordinate non può mai trovarlo.
ℹ️
unreviewedè uno stato normale del flusso di GitHub (importato automaticamente da NVD, con i pacchetti interessati non ancora annotati manualmente); anche il matching per coordinate è una scelta ragionevole. Qui si constata solo il fatto che "non arriva agli alert", non che qualcuno abbia sbagliato.
shiro-all è un uber jar che impacchetta più moduli. Nella pratica, shiro-all-1.3.2.jar contiene al suo interno 6 file META-INF/maven/org.apache.shiro/<modulo>/pom.properties:
shiro-all shiro-core shiro-web shiro-spring shiro-ehcache shiro-quartz
In pratica, un progetto che nel pom dichiara solo shiro-all ha un solo nome a livello di coordinate (delle 26 CVE, solo CVE-2016-6802 è agganciata a questa coordinata), ma nel jar ci sono davvero il codice di tre moduli: core, web e spring.
Scansionare l'artefatto reale permette di vedere attraverso questo strato. In un test con shiro-all-1.3.2.jar, lo strumento ha segnalato 20 voci su 3 moduli.
Il first_patched_version di 3 advisory è 3.0.0-alpha-2, ma questa versione non è mai stata pubblicata su Maven Central (il team ha pubblicato direttamente la versione stabile 3.0.0). Non puoi aggiornare seguendo quella versione — lo strumento lo segnala e sostituisce il suggerimento di upgrade con una versione realmente disponibile.
"Hit" = il modulo è presente E la versione rientra nell'intervallo ufficiale delle versioni affette. Non equivale a "già sfruttato" o "necessariamente sfruttabile".
La maggior parte delle 26 voci richiede una configurazione specifica per essere valida, quindi lo strumento le elenca separatamente:
Esempi di condizioni (riportate parola per parola dalla descrizione ufficiale, senza estrapolazioni):
CVE-2026-49268 仅当使用 DefaultLdapRealm(用户名未转义即拼进 LDAP DN)
CVE-2023-22602 仅当与 Spring Boot 2.6+ 一起使用,且未把
spring.mvc.pathmatch.matching-strategy 设回 ant_path_matcher
CVE-2026-23903 仅当静态文件放在大小写不敏感的文件系统上(如 macOS 默认设置),
且 Shiro 里只配了小写的 filter 路径;只影响静态文件
🔴 Lo strumento non analizza la tua configurazione. Shiro può essere configurato in shiro.ini, application.yml o nel codice Java; una conclusione derivata dall'analisi sarebbe più pericolosa della mancata analisi. Le condizioni sono elencate in chiaro e sta a te valutare — è una scelta deliberata, non pigrizia.
# 扫一个 jar / war
java -jar shiro-check.jar your-app.jar
# 扫整个目录(递归)
java -jar shiro-check.jar /path/to/libs
# 连「不适用」的条目也列出来
java -jar shiro-check.jar --all your-app.jar
# Windows 控制台中文乱码时
java -jar shiro-check.jar --utf8 your-app.jar
Capacità di riconoscimento: jar normale · Spring Boot fat jar (BOOT-INF/lib/) · WAR tradizionale (WEB-INF/lib/) · uber jar (shiro-all, con i moduli interni esplosi) · jar rinominati (in base a pom.properties) · archivi malformati che usano backslash nei percorsi.
Richiede JDK 17+. Zero dipendenze a runtime.
Nessuna riga scritta a mano. tools/gen_rules.py genera tutto da due fonti primarie:
| Fonte | Cosa fornisce |
|---|---|
| shiro.apache.org/security-reports.html | elenco completo delle voci, testo originale delle descrizioni, testo originale delle condizioni di attivazione |
| GitHub Advisory API | coordinate dei moduli interessati, intervalli di versione strutturati, valutazione della gravità |
Il processo di generazione include 12 asserzioni; se una qualsiasi non è soddisfatta, si interrompe senza scrivere il file (per evitare che "un errore di parsing produca una tabella vuota mentre i test restano tutti verdi"):
Prima della pubblicazione c'è anche tools/recheck_before_publish.py, che ricontrolla le argomentazioni portanti con una seconda metodologia indipendente (non importa lo script di generazione e non legge il suo output — riusare la stessa logica di parsing significherebbe riprodurre anche i bug).
unreviewed in reviewed in qualsiasi momentoshiro-check scansiona i tuoi artefatti di build (jar / war / fat jar / directory) per individuare quali moduli di Apache Shiro spedisci davvero, quindi valuta tutte le 26 CVE ufficiali rispetto alla tua combinazione esatta di modulo + versione.
Perché esiste: le CVE di Shiro sono legate ai moduli, non a "Shiro". 13 delle 26 non toccano
mai shiro-core. Lo strumento lavora con granularità CVE × modulo (37 regole, 7 moduli).
Tre cose che il matching basato sulle coordinate non può vedere:
unreviewed con un elenco di pacchetti interessati vuoto; 2 sono agganciate solo a org.apache.shiro:shiro-root, che è un POM padre con packaging=pom e nessun jar su Maven Central (HTTP 404), quindi nessun progetto dipende da esso.shiro-all è un uber jar — shiro-all-1.3.2.jar contiene 6 voci pom.properties (core, web, spring, ehcache, quartz + se stesso). Il tuo pom mostra una sola coordinata; il jar contiene codice per tre moduli.3.0.0-alpha-2 come fix, una versione mai pubblicata su Maven Central. Lo strumento le segnala e suggerisce una versione a cui puoi realmente aggiornare.Un "hit" significa modulo presente E versione all'interno dell'intervallo ufficiale delle versioni affette. Non significa sfruttabile — la maggior parte delle voci richiede una configurazione specifica, che lo strumento elenca parola per parola dall'advisory ufficiale. Non analizza volutamente la tua configurazione.
java -jar shiro-check.jar [--all] [--utf8] <jar | war | directory> ...
Richiede JDK 17+. Nessuna dipendenza a runtime. La tabella delle regole è generata da due fonti primarie con 12 asserzioni che interrompono il processo in caso di errore; vedi tools/gen_rules.py.
Apache License 2.0
| Voce | Perché non corrisponde |
|---|
| CVE-2026-56091 (bypass dell'autenticazione in shiro-guice, high) | l'advisory è ancora unreviewed, l'elenco dei pacchetti interessati è vuoto |
| CVE-2026-56130 (cookie RememberMe che non scade mai) | Idem |
| CVE-2014-0074 (bypass con password vuota in LDAP) | Idem |
| CVE-2023-22602 (bypass dell'autenticazione su Spring Boot 2.6+, high) | l'advisory è agganciata solo a org.apache.shiro:shiro-root |
| CVE-2010-3863 | Idem |