
CVE-2025-55752 CVE-2025-55754 CVE-2025-48988 CVE-2025-52520 CVE-2025-53506 CVE-2025-61795 CVE-2025-66614 : Tomcat 8.5 est en fin de vie (EOL), version finale 8.5.100. Apache déclare une par une que « 8.5 est également concerné » pour 14 CVE de 2025, dont 10 introuvables dans la NVD pour 8.5.100. Jar unique hors ligne, lisez conf/ pour déterminer lesquelles vous concernent réellement.
Vous tournez encore sur Tomcat 8.5 ? Cet outil vous dit quelles CVE de 2025 vous touchent réellement — parce que sur cette question, vous n'obtiendrez pas de réponse complète ni sur les pages officielles, ni sur NVD, ni chez les scanners.
Jar unique zéro dépendance, fonctionne hors ligne, sans connexion réseau, sans rien envoyer.
Tomcat 8.5 est en EOL depuis le 2024-03-31, la dernière version est 8.5.100 (publiée le 2024-03-19). Depuis, Apache continue de déclarer dans les enregistrements CVE « 8.5 est également concerné », et c'est précisément l'endroit que le moins de monde consulte.
La page de sécurité 9.x officielle d'Apache liste 17 entrées CVE-2025-*, dont 14 indiquent textuellement :
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
(texte original — sur les 14, 8 écrivent
throughcommethough; la borne inférieure est le plus souvent8.5.0, mais aussi8.5.6/ / / )
8.5.448.5.608.5.90Ces 14 entrées, voici ce que vous voyez selon les trois endroits où vous allez chercher :
| Là où vous allez chercher | Ce que vous voyez |
|---|---|
Page de sécurité 8.5 officielle d'Apache (security-8.html) | Zéro entrée pour 2025 — la page s'arrête à 2024-02-19 Fixed in Apache Tomcat 8.5.99 |
| NVD | En interrogeant 8.5.100 par cpe, vous n'obtenez que 4 entrées sur les 14 ; pour les 10 autres, la configuration cpe ne contient pas 8.5 |
| GitHub advisory | Les 14 sont là, mais côté 8.5, first_patched_version est null partout |
Le seul endroit qui raconte toute l'histoire, c'est l'enregistrement original soumis par Apache en tant que CNA sur CVE.org — c'est-à-dire la couche que le moins de monde va fouiller. Ce que fait cet outil, c'est confronter les informations de cette couche à la version réellement installée sur votre machine.
🔴 Cet outil expose les différences entre les sources de données, pas le comportement d'un produit. « Votre scanner va-t-il remonter ces 10 entrées ? » dépend de la base qu'il lit et de la façon dont il fusionne — cela n'a pas été testé, donc rien n'est écrit ici.
Ne signaler que par numéro de version reviendrait à présenter les 12 entrées « valables uniquement avec une configuration spécifique » comme « vous êtes touché » — c'est vous envoyer faire une tâche inutile.
C'est pourquoi, lorsqu'un répertoire d'installation est fourni, l'outil lit tous les XML sous conf/ (y compris conf/Catalina/<host>/),
retire les blocs de commentaires, puis cherche les marqueurs de condition déclenchante. Retirer les commentaires n'est pas une option :
dans le server.xml officiel, la recherche textuelle de UpgradeProtocol donne 1 occurrence, mais 0 après retrait des commentaires — le passage entier est commenté.
Sur une installation nue officielle 8.5.100, le résultat est :
2 entrées affectées par défaut · 0 entrée confirmée par configuration · 11 entrées à confirmer manuellement · 1 entrée non applicable
dont 10 introuvables dans la configuration cpe de NVD pour 8.5
Une fois HTTP/2, RewriteValve et CGIServlet activés dans la même configuration, les « confirmées par configuration » passent à 5.
java -jar tomcat85-check.jar <répertoire d'installation | jar | war> ...
--all liste aussi les entrées « version hors intervalle »
--utf8 à ajouter si le chinois s'affiche mal sur la console Windows
# Tomcat déployé décompressé — passez le niveau contenant conf/, vous économiserez une grosse partie du travail manuel
java -jar tomcat85-check.jar /opt/tomcat
# Un simple jar / war suffit aussi pour scanner
java -jar tomcat85-check.jar /opt/app/lib/catalina.jar
Les jars sous lib/ ne portent aucun numéro de version dans leur nom de fichier (c'est catalina.jar, pas catalina-8.5.100.jar).
Les outils qui ne se fient qu'au nom de fichier ne reconnaissent rien sur ce type de déploiement —
or « rien détecté » ressemble exactement à « vous êtes en sécurité ».
Cet outil détermine la version dans cet ordre :
server.number dans catalina.jar!/org/apache/catalina/util/ServerInfo.properties
— c'est ce que rapporte version.sh de Tomcat lui-mêmeImplementation-Version dans META-INF/MANIFEST.MFQuand les deux sources ne concordent pas (ServerInfo.properties peut être écrasé, souvent pour masquer la version),
les deux sont rapportées, sans choisir à votre place.
Un : on peut confirmer qu'une chose est activée, pas qu'elle ne l'est pas.
Quand le rapport dit « introuvable », cela signifie « introuvable dans les fichiers que j'ai examinés », pas « vous ne l'avez pas activé ».
La configuration peut se trouver là où l'outil ne regarde pas : WEB-INF/web.xml dans un war, CATALINA_BASE externe, paramètres de démarrage.
C'est pourquoi il n'existe pas de niveau « non affecté » — tout ce qui est introuvable tombe dans à confirmer manuellement.
Deux : même quand on trouve, ce n'est pas toujours exactement ça.
Par exemple, dans le server.xml officiel par défaut, AprLifecycleListener est activé par défaut,
mais il ne fait que tenter de charger la bibliothèque native — si la bibliothèque n'existe pas, le connecteur APR ne s'active pas.
C'est donc un « marqueur faible » : une correspondance ne rapporte que « possible », pas « confirmé ».
Trois : il n'existe aucune version 8.5 vers laquelle migrer.
first_patched_version des 14 entrées est null côté 8.5.
Ce n'est pas « pas encore corrigé », c'est « ne sera plus corrigé pour 8.5 ». La seule issue est de changer de ligne (9.0 / 10.1 / 11.0).
Cet outil répond « de quoi êtes-vous touché », il ne prétend pas répondre « vers quel 8.5 migrer ».
Prenons CVE-2025-55754, les quatre chiffres sont tous vrais :
| Qui la donne | Valeur |
|---|---|
| Apache (échelle ASF à quatre niveaux) | low |
| GitHub advisory | low |
| CVSS v3.1 (c'est celle que NVD retient) | 9.6 critical |
| CVSS v4.0 | 2.1 |
Si vous ne regardez que NVD, vous croirez que c'est la plus grave ; si vous ne regardez qu'Apache, vous croirez pouvoir l'ignorer. Les deux ont raison — Apache évalue l'exploitabilité réelle en configuration par défaut, CVSS est un calcul mécanique à partir du vecteur, sans vérifier si vous avez activé la fonctionnalité.
C'est pourquoi cet outil imprime les quatre chiffres, et signale explicitement quand les deux côtés divergent.
Apache utilise low / moderate / important / critical, GitHub utilise low / medium / high / critical.
La base d'alignement vient du texte original de security-impact.html officiel de 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 et High sont deux appellations d'un même niveau, c'est écrit ensemble par l'officiel.
🔴 En revanche, l'officiel ne dit pas que moderate et medium s'alignent, et l'outil ne le fait pas non plus à sa place —
le Moderate de l'ASF définit des conditions d'exploitabilité comme « facteurs d'atténuation significatifs / n'affecte pas les configurations courantes / nécessite une authentification »,
tandis que le medium de GitHub est un intervalle de score CVSS ; les deux ne sont pas la même chose. Dans ce cas, le rapport indique « l'officiel ne dit pas que ces deux niveaux sont égaux » et vous présente les deux.
Selon ce critère, sur les 14 entrées, 5 sont jugées substantiellement différemment des deux côtés (le plus éloigné : CVE-2025-52520 : Apache low / GitHub high),
2 ne s'alignent pas, 7 sont identiques.
La table de décision CveTable.java est générée, aucune ligne n'est recopiée à la main :
python -u tools/fetch_sources.py # récupère les trois sources primaires → tools/sources.json
python -u tools/gen_table.py # génère CveTable.java (5 assertions, aucune ne passe → pas d'écriture de fichier)
| Source | Sert à répondre |
|---|---|
| CVE.org (enregistrement original d'Apache en tant que CNA) | Apache a-t-il lui-même déclaré « affecte 8.5 », et quel est l'intervalle |
| NVD | la configuration cpe contient-elle une entrée 8.5 |
| GitHub advisory | severity, coordonnées Maven affectées, existence d'une version corrigée côté 8.5 |
Avant publication / diffusion, une re-vérification indépendante est également exécutée — elle ne lit pas le sources.json ci-dessus,
mais analyse le CveTable.java généré, puis interroge NVD par cpe :
python -u tools/recheck_before_publish.py
Cette étape n'est pas une formalité : dès sa première exécution, elle a attrapé une vraie erreur. Le script de génération, pour juger « NVD contient-il 8.5 », ne reconnaissait que « borne inférieure commençant par
8.5», orCVE-2025-24813indiqueversionStartIncluding=None .. versionEndExcluding=9.0.99— borne inférieure ouverte, elle couvre donc 8.5. La différence en était faussée d'une entrée supplémentaire. Une recherche entrée par entrée surcveIdne l'aurait jamais détectée ; c'est en passant au critère « interroger 8.5.100 par cpe », du point de vue utilisateur, que l'erreur est apparue.
mvn package # → target/tomcat85-check.jar
mvn test # 59 tests
Nécessite JDK 17+. Zéro dépendance à l'exécution, JUnit uniquement pour les tests.
MIT — voir LICENSE