
CVE-2025-55752 CVE-2025-55754 CVE-2025-48988 CVE-2025-52520 CVE-2025-53506 CVE-2025-61795 CVE-2025-66614:Tomcat 8.5 è EOL,versione finale 8.5.100. Apache dichiara una per una che "anche 8.5 è vulnerabile" per 14 CVE del 2025,di cui 10 non risultano in NVD per 8.5.100. Jar singolo offline,legge conf/ per determinare esattamente a quali sei esposto.
Stai ancora usando Tomcat 8.5? Questo strumento ti dice esattamente quali CVE del 2025 ti colpiscono — perché su questo punto non ottieni una risposta completa né dalle pagine ufficiali, né da NVD, né dagli scanner.
Jar singolo a zero dipendenze, funziona offline, senza connessione di rete e senza caricare nulla.
Tomcat 8.5 ha raggiunto l'EOL il 2024-03-31, l'ultima versione è la 8.5.100 (rilasciata il 2024-03-19). Da allora Apache continua a dichiarare nei record CVE, uno per uno, che «anche la 8.5 è vulnerabile», ma è il posto che meno persone vanno a guardare.
La pagina di sicurezza 9.x di Apache elenca 17 CVE-2025-*, di cui 14 riportano testualmente:
The following versions were EOL at the time the CVE was created but are known to be affected: 8.5.x though 8.5.100
(testuale — in 8 delle 14 voci
throughè scritto comethough; il limite inferiore è per lo più8.5.0, ma anche8.5.6/8.5.44/ / )
8.5.608.5.90Queste 14 voci, nei tre posti in cui andresti a cercarle, appaiono così:
| Dove vai a controllare | Cosa vedi |
|---|---|
Pagina di sicurezza 8.5 di Apache (security-8.html) | Zero voci per il 2025 — la pagina si ferma a 2024-02-19 Fixed in Apache Tomcat 8.5.99 |
| NVD | Cercando 8.5.100 tramite cpe, di queste 14 ottieni solo 4 risultati; nelle altre 10 la configurazione cpe non include proprio la 8.5 |
| GitHub advisory | Tutte e 14 ci sono, ma il first_patched_version lato 8.5 è null per tutte |
L'unico posto che racconta l'intera storia è il record originale che Apache, in qualità di CNA, ha inviato a CVE.org — cioè il livello che meno persone vanno a spulciare. Questo strumento fa proprio questo: prende le informazioni da quel livello e le confronta con la versione realmente installata sulla tua macchina.
🔴 Questo strumento descrive le differenze tra le fonti dati, non il comportamento di un prodotto. «Il tuo scanner segnalerà o no queste 10 voci» dipende da quale database legge e da come le unisce — non è stato testato, quindi qui non verrà scritto.
Segnalare solo in base al numero di versione equivale a dire «sei vulnerabile» anche per le 12 voci che richiedono una configurazione specifica — ti farebbe fare qualcosa di non necessario.
Per questo, quando gli passi la directory di installazione, lo strumento legge tutti gli XML in conf/ (incluso conf/Catalina/<host>/),
rimuove i blocchi di commento e poi cerca i marcatori delle condizioni di attivazione. Rimuovere i commenti non è opzionale:
nel server.xml ufficiale, la ricerca testuale di UpgradeProtocol trova 1 occorrenza, ma dopo aver tolto i commenti è 0 — l'intero blocco è commentato.
Su una installazione pulita della 8.5.100 ufficiale, l'output è questo:
2 voci vulnerabili di default · 0 confermate dalla configurazione · 11 da verifica manuale · 1 non applicabile
di cui 10 non presenti nella configurazione cpe di NVD per la 8.5
Attivando nella stessa configurazione HTTP/2, RewriteValve e CGIServlet, le «confermate dalla configurazione» diventano 5.
java -jar tomcat85-check.jar <directory di installazione | jar | war> ...
--all elenca anche le voci «versione fuori intervallo»
--utf8 da aggiungere se la console Windows mostra caratteri cinesi corrotti
# Tomcat decompresso — passa il livello che contiene conf/, risparmi un bel po' di lavoro manuale
java -jar tomcat85-check.jar /opt/tomcat
# Funziona anche con un singolo jar / war
java -jar tomcat85-check.jar /opt/app/lib/catalina.jar
I jar in lib/ non hanno alcun numero di versione nel nome file (è catalina.jar, non catalina-8.5.100.jar).
Gli strumenti che ricavano la versione solo dal nome file, su questo tipo di installazioni non riconoscono nulla —
e «non ha trovato nulla» sembra identico a «sei al sicuro».
Questo strumento ricava la versione in quest'ordine:
server.number da catalina.jar!/org/apache/catalina/util/ServerInfo.properties
— è quello che riporta lo version.sh di Tomcat stessoImplementation-Version da META-INF/MANIFEST.MFSe le due fonti non coincidono (ServerInfo.properties può essere sovrascritto, spesso per nascondere la versione),
vengono riportate entrambe, senza scegliere al posto tuo.
Uno: posso confermare che è attivo, non che non lo sia.
Se il report dice «non trovato», significa non trovato nei file che ho esaminato, non «non è attivo».
La configurazione può trovarsi in posti che questo strumento non vede: WEB-INF/web.xml dentro i war, CATALINA_BASE esterno, parametri di avvio.
Per questo non esiste la fascia «non vulnerabile» — se non trovo nulla, finisce comunque in da verifica manuale.
Due: anche se lo trovo, non è detto che sia proprio quello.
Per esempio, nel server.xml predefinito ufficiale, AprLifecycleListener è già abilitato di default,
ma si limita a tentare di caricare la libreria nativa — se la libreria non c'è, il connettore APR non si attiva.
Quindi è un «marcatore debole»: se lo trovo, segnalo solo «possibile», non «confermato».
Tre: non esiste una versione 8.5 a cui aggiornare.
Il first_patched_version di tutte e 14 le voci è null lato 8.5.
Non è «non ancora corretto», è «non verrà più corretto per la 8.5». L'unica via d'uscita è cambiare linea (9.0 / 10.1 / 11.0).
Questo strumento risponde a «a cosa sei vulnerabile», non finge di saper rispondere a «a quale 8.5 aggiornare».
Prendiamo CVE-2025-55754: tutti e quattro i numeri sono veri:
| Chi la dà | Valore |
|---|---|
| Apache (scala ASF a 4 livelli) | low |
| GitHub advisory | low |
| CVSS v3.1 (quello che NVD adotta) | 9.6 critical |
| CVSS v4.0 | 2.1 |
Se guardi solo NVD, penseresti che sia la più grave; se guardi solo Apache, penseresti che puoi ignorarla. Nessuno dei due ha torto — Apache valuta la sfruttabilità reale con la configurazione predefinita, CVSS è un calcolo meccanico basato sul vettore, che non guarda se hai attivato o no quella funzionalità.
Per questo lo strumento stampa tutti e quattro i numeri e, quando le due parti discordano, lo dice esplicitamente.
Apache usa low / moderate / important / critical, GitHub usa low / medium / high / critical.
La base dell'allineamento viene dal testo ufficiale di security-impact.html di Tomcat:
Important / High — A vulnerability rated as Important (or High) impact is one which could result in the compromise of data or availability of the server.
→ Important e High sono due nomi per lo stesso livello, scritti insieme dagli stessi sviluppatori.
🔴 Invece per moderate e medium l'ufficialità non dichiara un allineamento, e questo strumento non lo fa al posto loro —
il Moderate di ASF definisce condizioni di sfruttabilità come «fattori di mitigazione significativi / non tocca le configurazioni comuni / richiede autenticazione»,
mentre il medium di GitHub è un intervallo di punteggio CVSS: non sono la stessa cosa. In questo caso il report dice «l'ufficialità non dichiara questi due livelli uguali» e ti mostra entrambi.
Con questo criterio, delle 14 voci 5 hanno valutazioni sostanzialmente diverse tra le due parti (il caso più estremo è CVE-2025-52520: Apache low / GitHub high),
2 non sono allineabili, 7 coincidono.
La tabella di valutazione CveTable.java è generata, nessuna riga scritta a mano:
python -u tools/fetch_sources.py # scarica le tre fonti primarie → tools/sources.json
python -u tools/gen_table.py # genera CveTable.java (5 asserzioni; se una fallisce, il file non viene scritto)
| Fonte | Serve a rispondere |
|---|---|
| CVE.org (record originale di Apache come CNA) | Apache ha dichiarato o no «colpisce la 8.5» e con quale intervallo |
| NVD | la configurazione cpe include o no la 8.5 |
| GitHub advisory | severity, coordinate Maven interessate, esistenza o no di una versione corretta lato 8.5 |
Prima di pubblicare/rilasciare viene eseguita anche una verifica con criterio indipendente — non legge il sources.json di cui sopra,
ma analizza il CveTable.java generato e poi interroga di nuovo NVD tramite cpe:
python -u tools/recheck_before_publish.py
Questo passaggio non è una formalità: al primo run ha trovato un errore vero. Lo script di generazione, per decidere se «NVD ha la 8.5», riconosceva solo gli intervalli con limite inferiore che inizia per
8.5, mentreCVE-2025-24813riportaversionStartIncluding=None .. versionEndExcluding=9.0.99— limite inferiore aperto, quindi copre la 8.5. La differenza contava quindi una voce in più. Controllare voce per voce ilcveIdnon lo avrebbe mai scoperto; è emerso solo adottando il punto di vista dell'utente, cioè «cerca 8.5.100 tramite cpe».
mvn package # → target/tomcat85-check.jar
mvn test # 59 test
Richiede JDK 17+. Zero dipendenze a runtime, JUnit solo in fase di test.
MIT — vedi LICENSE