L’essentiel
- Le 9 octobre 2026, le CERT-FR publie l’avis CERTFR-2026-AVI-1290 : quatre bulletins Apache Struts du 2 octobre (S2-075 à S2-078), avec risques d’exécution de code à distance, de déni de service et d’atteinte à la confidentialité.
- Les versions Struts 6.x antérieures à 6.12.0 et 7.x antérieures à 7.4.0 sont visées ; la branche Struts 2 n’est plus maintenue selon l’éditeur.
- S2-075 (CVE-2026-104711) concerne l’ancien RESTful action mapper et une injection OGNL ; S2-077 (CVE-2026-104713) expose le plugin REST à un corps de requête non borné (DoS mémoire).
- S2-078 (CVE-2026-104714) décrit une fuite possible entre utilisateurs via le formatage concurrent de dates/heures dans les messages localisés — sans attaque ciblée.
Ce que dit le CERT-FR
Le 9 octobre 2026, le CERT-FR diffuse l’avis CERTFR-2026-AVI-1290 sur plusieurs vulnérabilités dans Apache Struts. Il s’appuie sur quatre bulletins éditeur publiés le 2 octobre 2026 (S2-075 à S2-078). Le résumé officiel mentionne une exécution de code arbitraire à distance, un déni de service à distance et une atteinte à la confidentialité des données. Les versions 6.x antérieures à 6.12.0 et 7.x antérieures à 7.4.0 sont concernées. L’éditeur rappelle que Struts 2 n’est plus maintenu.
RCE et DoS : mapper legacy, BigDecimal, plugin REST
S2-075 (CVE-2026-104711) : si l’application utilise l’ancien RESTful action mapper, une requête forgée peut injecter une expression OGNL et mener à une exécution de code à distance. Les applications avec le mapper par défaut, le mapper `restful2` ou le plugin REST ne sont pas affectées. Sur Struts 7, la configuration par défaut avec allowlist OGNL activée n’est pas exposée.
S2-076 (CVE-2026-104712) : lorsqu’un paramètre est lié à une propriété `java.math.BigDecimal` puis rendu via la tag library, la réponse peut devenir disproportionnée — DoS CPU et bande passante sortante, sans authentification. Les réponses JSON/REST du plugin ne sont pas concernées.
S2-077 (CVE-2026-104713), noté Important par Apache : avec le plugin REST, le corps de requête est lu en mémoire sans limite ; une seule requête volumineuse peut saturer le heap. Les versions corrigées plafonnent le corps à 2 Mo par défaut (constante `struts.rest.content.maxLength`). En attente de patch, Apache recommande une limite côté reverse proxy ou conteneur servlet.
Confidentialité : messages localisés et concurrence
S2-078 (CVE-2026-104714) : le text provider partage un formateur entre requêtes servies en parallèle. Si un message i18n de votre application formate une date ou une heure, deux utilisateurs simultanés peuvent voir une valeur d’un autre session dans la page, ou provoquer une erreur serveur. Aucune requête malveillante n’est nécessaire — le trafic normal suffit. Les bundles livrés avec Struts ne formatent pas de dates ; l’exposition vient des fichiers de messages métier.
- Inventaire : dépendances Maven/Gradle, WAR legacy, microservices Java encore sur Struts 6.x/7.x.
- Seuil unique : viser Struts 6.12.0+ ou 7.4.0+ pour couvrir les quatre bulletins.
- Mapper RESTful legacy : migrer vers le plugin REST ou le mapper par défaut (S2-075).
- Endpoints REST : vérifier la taille max du corps après patch ; ajuster `struts.rest.content.maxLength` si légitime > 2 Mo.
- Messages i18n : pré-formater dates/heures avant interpolation si vous ne pouvez pas patcher immédiatement (contournement éditeur S2-078).
Sources
Cette note a été rédigée avec l’aide d’outils d’intelligence artificielle à partir des sources citées, puis relue et publiée sous la responsabilité de Jordan FOUASSIER, directeur de la publication. Nous résumons les faits et proposons notre lecture ; les textes et visuels des sources ne sont pas reproduits. Une erreur ? Écrivez à contact@aigyrosgroup.com.