
Outil Java hors ligne qui analyse les jars d'applications pour déterminer l'exposition à 14 CVE de Netty codec-http, identifiant la version corrigée exacte (4.1.137.Final/4.2.17.Final) malgré des limites incohérentes dans les avis de sécurité.
Vérificateur hors ligne pour les 14 CVE de io.netty:netty-codec-http (2025–2026).
Vous indique celles auxquelles vous êtes réellement exposé — et la version unique qui les couvre toutes :
4.1.137.Final / 4.2.17.Final, un numéro inscrit sur aucun des quatorze avis.
CVE-2025-58056 · CVE-2025-67735 · CVE-2026-33870 · CVE-2026-41417 · CVE-2026-42580 · CVE-2026-42581 · CVE-2026-42585 · · · · · · ·
CVE-2026-42587CVE-2026-50020CVE-2026-56746CVE-2026-59898CVE-2026-59899CVE-2026-59903CVE-2026-59921Un seul jar, zéro dépendance d'exécution, entièrement hors ligne, Java 17+.
Chaque module Netty est publié sous le même numéro de version, donc la mise à niveau semble être une décision unique. Elle ne l'est pas. Sur la ligne 4.1, les versions de correctif pour ces quatorze se répartissent sur 125 / 129 / 132 / 133 / 135 / 136 / 137 — sept valeurs différentes. Suivez un seul avis et vous restez dans la plage affectée des autres.
netty-codec-http2 déclare netty-codec-http comme dépendance compile avec
<version>${project.version}</version> — les deux versions sont verrouillées l'une à l'autre.
Donc, si vous êtes passé à 4.1.136.Final parce que c'est la version qui couvre les sept
CVE de netty-codec-http2, vous exécutez désormais aussi netty-codec-http 4.1.136.Final — et
CVE-2026-59903 couvre <= 4.1.136.Final. Vous avez besoin de 4.1.137.Final. Même histoire sur la
ligne 4.2 : la réponse HTTP/2 est 4.2.16.Final, de ce côté il faut 4.2.17.Final.
Ce n'est pas une affirmation que le conseil HTTP/2 était faux — il répondait pour un module différent. C'est une affirmation que « un seul numéro de version » masque le fait que vous répondiez pour un seul module.
Sur ces quatorze avis, la borne supérieure est écrite <= 16 fois et < 12 fois.
La même 4.1.136.Final est donc sûre pour CVE-2026-56746 (< 4.1.136.Final) et
affectée pour CVE-2026-59903 (<= 4.1.136.Final).
Normaliser l'opérateur dans un sens ou dans l'autre produit une réponse erronée — une direction sur-signale, l'autre
sous-signale, et la sous-signalisation est l'erreur coûteuse pour un outil comme celui-ci.
La table de règles conserve chaque opérateur exactement comme l'avis l'a écrit, et une assertion dans
tools/gen_rules.py fait échouer la compilation si ce cas limite cesse un jour de se comporter ainsi.
pom.xml — volontairementSi vous utilisez Spring WebFlux, netty-codec-http arrive via
spring-boot-starter-webflux
-> spring-boot-starter-reactor-netty
-> reactor-netty-http
-> netty-codec-http
L'artifactId n'apparaît jamais dans votre pom.xml. Une vérification basée sur le pom répond « je ne l'utilise pas »,
ce qui est faux. Cet outil lit les jars qui sont réellement livrés.
java -jar netty-http-check.jar target/ # analyser la sortie de compilation
java -jar netty-http-check.jar myapp.jar # fat-jar / war Spring Boot, jars imbriqués inclus
java -jar netty-http-check.jar --version-of 4.1.136.Final # juger une version directement
Codes de sortie : 0 = non affecté · 1 = affecté · 2 = impossible de juger.
🔴
2n'est volontairement pas0. « Rien trouvé » et « propre » ne doivent pas se ressembler pour un script. Un fichier qui n'est pas un zip lisible est signalé comme une erreur de lecture, jamais traité silencieusement comme « pas de netty ici ».
netty-codec-http. Les autres modules Netty ont leurs propres CVE ;
un résultat propre ici ne dit rien à leur sujet. Si vous exécutez aussi netty-codec-http2, l'outil
le signale et pointe vers le problème inter-modules ci-dessus, mais il ne juge pas ce module.low ; elles sont affichées telles quelles, non regroupées dans un total alarmiste.reviewed avec des métadonnées de package complètes, donc Dependabot et
compagnie alertent bien dessus. Cet outil n'est pas « le scanner ne le voit pas » — c'est « l'alerte vous
donne un numéro de version par avis, et vous devez encore déterminer quelle version unique y met fin. »src/main/java/dev/mikko/nettyhttpcheck/RuleTable.java est généré, jamais édité à la main :
python tools/gen_rules.py --dry # exécuter uniquement les assertions
python tools/gen_rules.py # régénérer la table
Sept assertions doivent passer ou rien n'est écrit — parmi elles : chaque avis est toujours
reviewed ; les deux lignes de versions sont présentes pour chacun ; l'intersection calculée est toujours
4.1.137.Final / 4.2.17.Final ; ces versions sont réellement récupérables depuis Maven Central
(avec une version sentinelle qui doit renvoyer 404, pour qu'une sonde cassée ne puisse pas passer silencieusement) ;
le cas limite du §3 bascule toujours ; et la réponse HTTP/2 du §2 laisse toujours un trou de ce côté.
Les vérifications de bout en bout avec de vrais jars vivent dans tools/e2e_real_jars.py — elles téléchargent de vrais jars depuis
Maven Central plutôt que des fixtures, car « fonctionne sur un zip fait main, échoue sur le vrai jar »
est un vrai mode de défaillance.
MIT