En bref

  • CVE-2026-40976 (CVSS 9.1) : Spring Boot 4.0.0-4.0.5 expose l'intégralité des endpoints applicatifs sans authentification dans les déploiements servlet avec Spring Security personnalisé
  • Versions affectées : Spring Boot 4.0.0-4.0.5, 3.4.x avant 3.4.17, 3.3.x avant 3.3.20, 2.7.x avant 2.7.34 ; Spring for GraphQL 2.0.x/1.4.x/1.3.x/1.0.x (désérialisation menant à RCE, CVSS 8.1)
  • Action urgente : mettre à jour vers Spring Boot 4.0.6+, 3.4.17+, 3.3.20+ ou 2.7.34+ ; auditer les SecurityFilterChain pour garantir une règle catchall restrictive en fin de chaîne

Les faits

Le 16 juin 2026, le CERT-FR a publié l'avis CERTFR-2026-AVI-0759 relatif à de multiples vulnérabilités critiques dans les produits de l'écosystème Spring, framework Java développé sous l'égide de VMware/Broadcom. La plus sévère, CVE-2026-40976, porte un score CVSSv3.1 de 9.1 selon le vecteur AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N. Elle affecte Spring Boot dans ses versions 4.0.0 à 4.0.5, ainsi que les branches 3.4.x avant 3.4.17, 3.3.x avant 3.3.20, et 2.7.x avant 2.7.34. Avec plusieurs centaines de millions de déploiements Java fondés sur Spring Boot dans le monde, la surface d'attaque potentielle est considérable.

La root cause de CVE-2026-40976 réside dans un comportement défaillant de la configuration de sécurité automatique (auto-configuration) de Spring Boot dans les déploiements basés sur servlet. Lorsqu'un développeur définit une SecurityFilterChain personnalisée couvrant certains chemins mais omettant un catch-all pour le reste des endpoints, Spring Boot 4.0.x adopte par défaut un comportement permissif ("Fail Open" : permit-all implicite) plutôt que restrictif ("Fail Closed" : deny-all par défaut). Tout endpoint non explicitement couvert par une règle d'autorisation devient alors accessible sans authentification. Ce comportement est particulièrement insidieux car la configuration peut sembler correcte au développeur — les endpoints protégés restent protégés — sans révéler le vide de protection sur les autres routes.

La condition de déclenchement implique une SecurityFilterChain avec des règles partielles et une absence de règle catchall. Ce pattern de configuration est malheureusement courant en pratique : les développeurs Spring ajoutent des règles au fur et à mesure des besoins fonctionnels, sans nécessairement terminer la chaîne par un anyRequest().authenticated() ou anyRequest().denyAll(). Dans Spring Boot 4.0.x, ce manque est fatal. La vulnérabilité a été découverte par l'équipe Spring Security de VMware lors d'un audit interne de la branche 4.x, initialement publiée dans les Spring Security Advisories du 14 avril 2026 et reprise dans l'avis CERTFR du 16 juin 2026.

CVE-2026-40972 est une seconde vulnérabilité du même bulletin, affectant le module Spring Boot DevTools. Il s'agit d'une attaque temporelle (timing attack) contre le secret partagé DevTools Remote : en mesurant les temps de réponse lors de tentatives de connexion au mécanisme DevTools Remote, un attaquant sur le même réseau peut récupérer le secret par oracle temporel. Ce secret obtenu, l'attaquant exploite le mécanisme légitime de mise à jour à distance de DevTools pour uploader des classes Java arbitraires dans l'application, aboutissant à une exécution de code à distance (RCE) dans le contexte du processus Spring Boot. DevTools ne devrait pas être actif en production, mais des configurations inadéquates dans des pipelines CI/CD ou des environnements de staging exposés constituent des vecteurs réels et documentés.

CVE-2026-40973 complète ce lot avec une vulnérabilité locale (CVSS 7.0) affectant le répertoire temporaire ApplicationTemp utilisé par Spring Boot au démarrage. Des permissions système insuffisantes sur certains systèmes Linux permettent à un processus local non privilégié de prendre le contrôle du répertoire avant la création par l'application (race condition), y plaçant des fichiers malveillants susceptibles de mener à un détournement de session ou à une exécution de code locale. Ce vecteur est exploitable dans des environnements de conteneurs partagés, de multi-tenancy applicative, ou de serveurs hébergeant plusieurs applications Java concurrentes.

L'avis CERTFR-2026-AVI-0759 couvre également une vulnérabilité de désérialisation dans Spring for GraphQL affectant les versions 2.0.0-2.0.3, 1.4.0-1.4.5, 1.3.0-1.3.8 et 1.0.0-1.0.6 (CVSS 8.1, vecteur AV:N/AC:H/PR:N/UI:N). Les applications Spring for GraphQL exposant des champs paginés (Connection) sont vulnérables : un attaquant peut forger une requête GraphQL malveillante qui déclenche la désérialisation d'objets depuis des classes "gadget" disponibles dans le classpath, aboutissant à une RCE sur le serveur. Le score AC:H indique une complexité d'exploitation élevée (nécessite la présence de classes gadgets spécifiques), mais l'absence de condition d'authentification (PR:N) maintient le niveau de risque élevé.

Les versions corrigées sont Spring Boot 4.0.6, 3.4.17, 3.3.20 et 2.7.34, publiées dans le cadre d'une livraison coordonnée. Spring for GraphQL est corrigé dans les versions 1.3.9+ (branche 1.3.x) et les branches équivalentes dans les autres séries. Les organisations sous contrat de support commercial VMware Tanzu disposent de correctifs backportés additionnels. Il est recommandé de vérifier les versions de toutes les dépendances Spring transitives (spring-security, spring-web, spring-data) dans les projets Maven et Gradle pour s'assurer de l'absence de versions vulnérables non détectées par les seules versions de Spring Boot parent.

Le Centre pour la Cybersécurité Belgique (CCB) avait déjà émis un avertissement prioritaire dès la publication des Spring Security Advisories d'avril 2026, qualifiant la mise à jour de priorité maximale. Le CERT-FR réitère cette recommandation dans CERTFR-2026-AVI-0759, soulignant que la difficulté de détection de CVE-2026-40976 par audit de code statique — la faille se manifeste par une absence de règle plutôt que par une règle erronée — rend particulièrement urgente l'application des correctifs sans attendre un prochain cycle de déploiement planifié.

Impact et exposition

Toute application Spring Boot 4.0.0-4.0.5 avec Spring Security personnalisé et déployée sur serveur servlet est potentiellement exposée à CVE-2026-40976. L'exploitation ne requiert aucun credential, aucune connaissance interne de l'application, et aucune interaction avec un utilisateur légitime. Dans un contexte d'APIs exposées sur Internet — dominant dans les architectures microservices — CVE-2026-40976 permet l'exfiltration de données métier, la modification d'objets applicatifs, et le contournement total des contrôles d'accès. Des données personnelles, financières ou médicales hébergées dans des applications Spring Boot peuvent être exposées directement à quiconque envoie une requête HTTP.

CVE-2026-40972 touche principalement les pipelines CI/CD et environnements de staging où DevTools reste actif par erreur de configuration. Ces environnements sont souvent moins surveillés que la production mais hébergent des versions proches de la prod avec des données réelles ou quasi-réelles. Un attaquant ayant accès au réseau interne (phishing, VPN compromis, latéralisation) peut exploiter DevTools Remote pour obtenir une RCE sans avoir à exploiter une vulnérabilité plus complexe.

Spring Boot est le standard de facto du développement Java d'entreprise : services financiers, santé, administration publique, télécommunications, e-commerce, industrie — tous les secteurs sont potentiellement exposés. En France, la majorité des applications développées par les DSI et ESN utilisent Spring Boot comme socle technique. Le CERT-FR estime que plusieurs dizaines de milliers d'applications pourraient être concernées en France, avec une exposition directe à Internet pour une part significative dans le contexte des architectures API-first.

Recommandations immédiates

  • Mettre à jour Spring Boot vers 4.0.6+, 3.4.17+, 3.3.20+ ou 2.7.34+ selon la branche — Spring Security Advisory 2026-04-14
  • Mettre à jour Spring for GraphQL vers les versions corrigées selon la branche (1.3.9+ pour la branche 1.3.x)
  • Auditer toutes les SecurityFilterChain pour garantir une règle catchall restrictive (anyRequest().authenticated() ou anyRequest().denyAll()) en fin de chaîne
  • Désactiver Spring Boot DevTools dans tous les environnements non-développement : spring.devtools.restart.enabled=false, ne jamais configurer spring.devtools.remote.secret en production/staging
  • Vérifier les permissions du répertoire temporaire ApplicationTemp sur Linux (chmod 700 recommandé)
  • Scanner les APIs exposées pour vérifier les réponses aux endpoints protégés sans authentification (réponse attendue 401/403, toute réponse 200 indique une exposition)

⚠️ Urgence

CVE-2026-40976 (CVSS 9.1) permet l'accès non authentifié à l'intégralité des endpoints d'une application Spring Boot. Toute application Java Spring Boot 4.0.0-4.0.5 exposée sur Internet doit être traitée comme potentiellement vulnérable. La mise à jour immédiate est impérative — aucune interaction attaquant-victime n'est requise pour l'exploitation.

Comment savoir si je suis vulnérable ?

Vérifiez la version de Spring Boot dans votre pom.xml ou build.gradle via la propriété spring-boot-starter-parent ou la commande : mvn dependency:tree | grep spring-boot. Si vous êtes en 4.0.0-4.0.5, 3.4.0-3.4.16, 3.3.0-3.3.19, ou 2.7.0-2.7.33, vous êtes concerné. Pour tester l'exposition à CVE-2026-40976, tentez d'accéder sans token/session à un endpoint protégé : curl -v https://votre-app/api/ressource-protegee — si la réponse est 200 OK au lieu de 401/403, votre application est vulnérable. Pour CVE-2026-40972, vérifiez l'absence de spring.devtools.remote.secret dans vos configurations de production et staging.

Vos applications Spring Boot sont-elles sécurisées ?

Ayi NEDJIMI réalise des audits de code et de configuration pour identifier les expositions Spring Security dans vos applications Java.

Demander un audit applicatif