Image de base Docker avec correctif de validation d'en-tête Host rétroporté pour CVE-2025-12543 dans Undertow 1.4.x, permettant un déploiement sécurisé des applications WildFly 11.
Ce dépôt fournit une image Docker de base construite sur WildFly 11.0.0.Final avec un correctif rétroporté pour CVE-2025-12543, une vulnérabilité critique de validation de l'en-tête Host dans Undertow.
L'image est destinée à être fournie aux collègues comme base. Ils peuvent déployer leur propre application .war et leur standalone.xml par-dessus.
| Champ | Détail |
|---|---|
| Identifiant CVE | CVE-2025-12543 |
| Composant | io.undertow:undertow-core |
| Sévérité | Critique (CVSS 9.6) |
| Versions affectées | Toutes les versions < 2.2.39 (y compris 1.4.x) |
| Corrigé dans | Undertow 2.2.39 / 2.3.22 |
| Version WildFly 11 | undertow-core-1.4.18.Final — affectée |
Undertow ne parvient pas à valider correctement l'en-tête Host dans les requêtes HTTP entrantes. Les requêtes contenant des en-têtes Host malformés ou malveillants sont traitées sans rejet, permettant :
D'autres utilisateurs sont toujours sur WildFly 11, et il n'y a actuellement ni ressources ni projets de mise à niveau. Le correctif a été rétroporté directement dans le JAR Undertow 1.4.18.Final.
.
├── Dockerfile # Définition de l'image principale
├── README.md
├── wildfly-dist-11.0.0.Final.tar.gz # Archive de distribution WildFly 11
├── reports/
│ ├── result-20260401-0230.txt # Rapport de scan CVE qui a identifié la vulnérabilité
│ └── wildfly_11.0.0.Final_*.txt # Rapports de scan supplémentaires
└── patch/
├── src/
│ ├── HostHeaderHandler.java # Correctif rétroporté — nouvelle classe de gestionnaire
│ ├── HttpReadListener_only.java # Source décompilée + corrigée de HttpReadListener (référence)
│ └── PatchHttpReadListener.java # Outil de correction de bytecode Javassist
├── build.sh # Script de construction — reconstruit le JAR corrigé à partir de zéro
├── undertow-core-1.4.18.Final.jar # JAR original (non corrigé) — conservé pour référence
└── undertow-core-1.4.18.Final-patched.jar # JAR corrigé injecté dans l'image
DockerfileConstruit l'image finale. Il :
bitnamilegacy/java:1.8.432-7-debian-12-r2 (OpenJDK 1.8.0_432) comme base/opt/jboss/wildflyundertow-core-1.4.18.Final.jar original par la version corrigéestandalone.sh -b 0.0.0.0 (liaison à toutes les interfaces)patch/undertow-core-1.4.18.Final-patched.jarLe JAR Undertow corrigé. Il est identique à l'original à l'exception de deux modifications :
io/undertow/server/handlers/HostHeaderHandler.class (et ses classes internes)io/undertow/server/protocol/http/HttpReadListener.class — injecte HostHeaderHandler dans le pipeline de requêtespatch/src/HostHeaderHandler.javaLe gestionnaire de validation d'en-tête Host rétroporté. Porté depuis la PR Undertow #1857 (UNDERTOW-2656).
Toutes les constantes (IP4_EXACT, IP6_EXACT, tables de caractères) sont autonomes — aucune dépendance aux API ajoutées dans Undertow 2.x. Sur chaque requête HTTP, il valide :
400 Bad Request en cas de violationpatch/src/PatchHttpReadListener.javaUn correcteur de bytecode Javassist à usage unique. Il charge HttpReadListener depuis le JAR original et remplace :
// Avant
Connectors.executeRootHandler(connection.getRootHandler(), exchange);
// Après
Connectors.executeRootHandler(
HostHeaderHandler.WRAPPER.wrap(connection.getRootHandler()),
exchange
);
Ceci injecte HostHeaderHandler automatiquement dans chaque requête HTTP, sans nécessiter une recompilation complète de HttpReadListener (qui dépend de classes internes complexes et d'internals xnio).
patch/src/HttpReadListener_only.javaSource décompilée du HttpReadListener original d'Undertow 1.4.18.Final, utilisée comme référence pour localiser le point d'injection. La version corrigée de cette source est également conservée ici à des fins d'audit.
reports/result-20260401-0230.txtRapport de scan CVE (généré le 2026-04-01) qui a identifié CVE-2025-12543 dans undertow-core-1.4.18.Final à :
/opt/jboss/wildfly/modules/system/layers/base/io/undertow/core/main/undertow-core-1.4.18.Final.jar
Le rapport de scan (result-20260401-0230.txt) a confirmé que undertow-core-1.4.18.Final est affecté par CVE-2025-12543 (CVSS 9.6).
Le correctif se trouve dans Undertow PR #1857, fusionné dans main (2026-01-09) et rétroporté dans 2.2.x et 2.3.x. Le correctif ajoute HostHeaderHandler.java et le câble dans HttpReadListener pour valider l'en-tête Host sur chaque requête.
Undertow 1.4.x → 2.2.x est un saut de version majeur avec des changements d'API cassants. WildFly 11 est étroitement couplé à Undertow 1.4.x via JBoss Modules. Un remplacement direct du JAR provoquerait ClassNotFoundException / NoSuchMethodError au démarrage.
HostHeaderHandler.javaÉcrire une version autonome de HostHeaderHandler.java compatible avec Undertow 1.4.18.Final :
IP4_EXACT, IP6_EXACT) — non disponibles dans NetworkUtils de la version 1.4.xexchange.isHostIncludedInRequestURI() — non disponible dans HttpServerExchange de la version 1.4.xCompiler avec le classpath Undertow 1.4.18 + xnio à l'intérieur de l'image WildFly :
javac -cp undertow-core-1.4.18.Final.jar:xnio-api-3.5.4.Final.jar:jboss-logging-3.3.1.Final.jar \
-d out HostHeaderHandler.java
HttpReadListener via JavassistDécompiler HttpReadListener avec Procyon pour localiser le point d'injection :
Connectors.executeRootHandler(this.connection.getRootHandler(), httpServerExchange);
situé dans handleEventWithNoRunningRequest().
Comme HttpReadListener a des classes internes anonymes ($1, $2, $3) qui ne peuvent pas être référencées depuis une source décompilée, une recompilation complète n'est pas réalisable. Utiliser plutôt Javassist (PatchHttpReadListener.java) pour instrumenter directement le bytecode — en remplaçant l'appel executeRootHandler pour envelopper le gestionnaire racine avec HostHeaderHandler.WRAPPER.
java -cp javassist.jar:undertow-core-1.4.18.Final.jar:out \
PatchHttpReadListener undertow-core-1.4.18.Final.jar out/