Spring Boot powers an estimated 30% of all Java backend applications in production — and 2026 has been a rough year for it. The Spring ecosystem logged 37 CVEs in just two months, according to HeroDevs’ April 2026 roundup. The headline vulnerability, CVE-2026-40976 (CVSS 9.1), affects Spring Boot 4.0 in a particularly insidious way: a dependency split introduced in 4.0 can cause the entire default security filter chain to become ineffective, leaving all application endpoints unauthenticated — with no error, no warning, and no indication that protection has been silently disabled. Beyond direct Spring CVEs, HeroDevs’ May 2026 patch roundup identified 24 upstream CVEs across Tomcat, Netty, Thymeleaf, Jetty, and pgjdbc that reach Spring Boot applications through the managed-dependency BOM but will never be fixed in end-of-life versions. And the MavenGate research reminds us that 18% of Maven Central dependency domains are available for purchase — ready to be turned into a supply chain attack. This guide covers the real CVEs, how to detect exposure, and the concrete steps to harden your Spring Boot dependency pipeline in 2026.
Spring Boot alimente environ 30 % de toutes les applications Java backend en production — et 2026 a été une année difficile. L’écosystème Spring a enregistré 37 CVE en seulement deux mois, selon le bilan d’avril 2026 de HeroDevs. La vulnérabilité phare, CVE-2026-40976 (CVSS 9.1), touche Spring Boot 4.0 d’une manière particulièrement insidieuse : une scission de dépendance introduite en 4.0 peut rendre la chaîne de filtres de sécurité par défaut complètement inefficace, laissant tous les endpoints de l’application non authentifiés — sans erreur, sans avertissement, sans aucune indication que la protection a été silencieusement désactivée. Au-delà des CVE Spring directes, le bilan de mai 2026 de HeroDevs a identifié 24 CVE en amont touchant Tomcat, Netty, Thymeleaf, Jetty et pgjdbc qui atteignent les applications Spring Boot via le BOM de dépendances gérées, mais ne seront jamais corrigées dans les versions en fin de vie. Et la recherche MavenGate rappelle que 18 % des domaines de dépendances Maven Central sont disponibles à l’achat — prêts à être transformés en attaques supply chain. Ce guide couvre les CVE réelles, comment détecter l’exposition et les étapes concrètes pour durcir votre pipeline de dépendances Spring Boot en 2026.
CVE-2026-40976 (CVSS 9.1): When Spring Boot’s Default Security Silently Disappears
CVE-2026-40976 (CVSS 9.1) : Quand la Sécurité par Défaut de Spring Boot Disparaît Silencieusement
Spring Boot 4.0 split the spring-boot-actuator module into two separate dependencies: spring-boot-actuator-autoconfigure and spring-boot-health. This architectural change introduced a critical edge case: applications that depend on spring-boot-actuator-autoconfigure but not on spring-boot-health trigger an unintended condition where Spring Boot’s default web security filter chain becomes completely inoperative. The result is that every endpoint in the application becomes reachable without authentication, including sensitive admin endpoints, internal APIs, and business data endpoints.
Spring Boot 4.0 a scindé le module spring-boot-actuator en deux dépendances séparées : spring-boot-actuator-autoconfigure et spring-boot-health. Ce changement architectural a introduit un cas limite critique : les applications qui dépendent de spring-boot-actuator-autoconfigure mais pas de spring-boot-health déclenchent une condition non voulue où la chaîne de filtres de sécurité web par défaut de Spring Boot devient complètement inopérante. Le résultat : chaque endpoint de l’application devient accessible sans authentification, y compris les endpoints admin sensibles, les API internes et les endpoints de données métier.
The vulnerability only affects applications that meet all four conditions:
La vulnérabilité n’affecte que les applications qui réunissent les quatre conditions :
- Servlet-based web application (not reactive/WebFlux)
- Application web basée sur les servlets (pas reactive/WebFlux)
- No custom Spring Security configuration — relying entirely on the default filter chain
- Pas de configuration Spring Security personnalisée — repose entièrement sur la chaîne de filtres par défaut
- Depends on
spring-boot-actuator-autoconfigure - Dépend de
spring-boot-actuator-autoconfigure - Does not depend on
spring-boot-health - Ne dépend pas de
spring-boot-health
Affected versions: Spring Boot 4.0.0 through 4.0.5. Fix: upgrade to Spring Boot 4.0.6 (released April 23, 2026). Alternatively, add an explicit Spring Security configuration to your application, which bypasses the default chain entirely.
Versions affectées : Spring Boot 4.0.0 à 4.0.5. Correctif : passer à Spring Boot 4.0.6 (publié le 23 avril 2026). Alternativement, ajouter une configuration Spring Security explicite dans l’application, ce qui contourne complètement la chaîne par défaut.
<!-- pom.xml — upgrade to fix CVE-2026-40976 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.6</version> <!-- was 4.0.0–4.0.5 -->
</parent>
// build.gradle.kts — upgrade to fix CVE-2026-40976
plugins {
id("org.springframework.boot") version "4.0.6" // was 4.0.0–4.0.5
}
The Full CVE Picture: 37 Spring Vulnerabilities in 2 Months
Le Tableau Complet des CVE : 37 Vulnérabilités Spring en 2 Mois
CVE-2026-40976 is the most severe, but it is far from alone. HeroDevs’ April 2026 roundup catalogued 37 Spring-ecosystem CVEs across Spring Boot, Spring Security, Spring Framework, and Spring Cloud Config. Here are the key ones developers must understand:
CVE-2026-40976 est la plus sévère, mais elle est loin d’être seule. Le bilan d’avril 2026 de HeroDevs a répertorié 37 CVE dans l’écosystème Spring — Spring Boot, Spring Security, Spring Framework et Spring Cloud Config. Voici les principales que les développeurs doivent comprendre :
| CVE | CVE | CVSS | CVSS | Component | Composant | Impact | Impact |
|---|---|---|---|---|---|---|---|
CVE-2026-40976 |
CVE-2026-40976 |
9.1 | 9.1 | spring-boot-actuator-autoconfigure | spring-boot-actuator-autoconfigure | Default security filter chain ineffective → all endpoints unauthenticated | Chaîne de filtres par défaut inefficace → tous les endpoints non authentifiés |
CVE-2026-40478 |
CVE-2026-40478 |
9.0+ | 9.0+ | Thymeleaf template engine | Moteur de templates Thymeleaf | Server-Side Template Injection → Remote Code Execution | Injection de template côté serveur → Exécution de code à distance |
CVE-2026-41901 |
CVE-2026-41901 |
9.0+ | 9.0+ | Thymeleaf template engine | Moteur de templates Thymeleaf | SSTI via user-controlled template expressions → RCE | SSTI via expressions de template contrôlées par l’utilisateur → RCE |
CVE-2026-22731 |
CVE-2026-22731 |
High | Haut | Spring Boot Actuator endpoints | Endpoints Spring Boot Actuator | Improper endpoint mapping → Actuator auth bypass | Mappage incorrect des endpoints → contournement auth Actuator |
CVE-2026-22733 |
CVE-2026-22733 |
High | Haut | Spring Boot Actuator endpoints | Endpoints Spring Boot Actuator | Sensitive infrastructure path mapping bypass | Contournement du mappage de chemins d’infrastructure sensibles |
CVE-2026-41705 |
CVE-2026-41705 |
High | Haut | Spring AI — MilvusVectorStore | Spring AI — MilvusVectorStore | Filter expression injection via unsanitized document IDs | Injection d’expression de filtre via des IDs de document non assainis |
CVE-2026-40972 |
CVE-2026-40972 |
7.5 | 7.5 | Spring Boot DevTools | Spring Boot DevTools | Timing attack against remote DevTools secret → session hijack | Attaque temporelle sur le secret remote DevTools → hijack de session |
The Zombie Dependency Problem: 24 Upstream CVEs Spring Boot Can’t Fix
Le Problème des Dépendances Zombies : 24 CVE en Amont que Spring Boot Ne Peut Pas Corriger
The direct Spring CVEs are just one part of the problem. Spring Boot uses a managed-dependency BOM (Bill of Materials) that pins specific versions of hundreds of third-party libraries: Tomcat, Netty, Thymeleaf, Jetty, pgjdbc, Jackson, Hibernate, and more. When Spring Boot reaches end-of-life, the framework stops receiving BOM updates — but the upstream libraries keep accumulating CVEs.
Les CVE Spring directes ne représentent qu’une partie du problème. Spring Boot utilise un BOM (Bill of Materials) de dépendances gérées qui épinglé des versions spécifiques de centaines de bibliothèques tierces : Tomcat, Netty, Thymeleaf, Jetty, pgjdbc, Jackson, Hibernate et bien d’autres. Lorsque Spring Boot atteint sa fin de vie, le framework cesse de recevoir des mises à jour du BOM — mais les bibliothèques en amont continuent d’accumuler des CVE.
HeroDevs’ May 2026 patch roundup found 24 unique upstream CVEs across just five components that are reachable through the Spring Boot managed-dependency BOM. These are real CVEs in widely-used components, but teams running EOL Spring Boot versions will never receive a BOM update that addresses them:
Le bilan de patch de mai 2026 de HeroDevs a trouvé 24 CVE en amont uniques dans seulement cinq composants accessibles via le BOM de dépendances gérées de Spring Boot. Ce sont de vraies CVE dans des composants largement utilisés, mais les équipes exécutant des versions Spring Boot en fin de vie ne recevront jamais de mise à jour du BOM qui les corrige :
- Apache Tomcat — embedded servlet container, new CVEs every quarter
- Apache Tomcat — conteneur servlet embarqué, nouvelles CVE chaque trimestre
- Netty — async networking layer used by Spring WebFlux
- Netty — couche réseau asynchrone utilisée par Spring WebFlux
- Thymeleaf — SSTI vulnerabilities in 3.1.4 and 3.1.5 (CVSS 9.0+)
- Thymeleaf — vulnérabilités SSTI dans 3.1.4 et 3.1.5 (CVSS 9.0+)
- Jetty — alternative embedded server option in Spring Boot
- Jetty — option de serveur embarqué alternatif dans Spring Boot
- pgjdbc — PostgreSQL JDBC driver, data layer exposure
- pgjdbc — driver JDBC PostgreSQL, exposition de la couche de données
The implication is stark: checking only your direct Spring Boot version is not enough. You must also audit the transitive dependency tree for CVEs in these embedded components. Tools like OWASP Dependency-Check, Gradle dependency verification, or a continuous scanner like OptiBot are required for complete coverage.
L’implication est claire : vérifier uniquement votre version directe de Spring Boot ne suffit pas. Vous devez également auditer l’arbre de dépendances transitives pour les CVE dans ces composants embarqués. Des outils comme OWASP Dependency-Check, la vérification des dépendances Gradle, ou un scanner continu comme OptiBot sont nécessaires pour une couverture complète.
Thymeleaf SSTI: When Your View Layer Becomes a Remote Code Execution Vector
Thymeleaf SSTI : Quand Votre Couche Vue Devient un Vecteur d’Exécution de Code à Distance
Thymeleaf Server-Side Template Injection (SSTI) is a recurring vulnerability class in Spring MVC applications. CVE-2026-40478 and CVE-2026-41901 (both CVSS 9.0+) are the latest incarnations: they allow RCE when user-controlled input reaches a Thymeleaf expression context. The classic pattern is passing unsanitized user input directly into a Thymeleaf template path or model attribute that is then used in an expression:
L’injection de template côté serveur (SSTI) Thymeleaf est une classe de vulnérabilité récurrente dans les applications Spring MVC. CVE-2026-40478 et CVE-2026-41901 (toutes deux CVSS 9.0+) en sont les dernières occurrences : elles permettent une RCE lorsque des entrées contrôlées par l’utilisateur atteignent un contexte d’expression Thymeleaf. Le pattern classique consiste à passer des entrées utilisateur non assainies directement dans un chemin de template Thymeleaf ou un attribut de modèle utilisé dans une expression :
// VULNERABLE — user input reaches template resolution
@GetMapping("/view")
public String renderView(@RequestParam String template, Model model) {
// Attacker sends: template=__${T(java.lang.Runtime).getRuntime().exec('...')}__::
return template; // NEVER use user input as template name
}
// SAFE — use allowlist for template names
@GetMapping("/view")
public String renderView(@RequestParam String page, Model model) {
List<String> allowed = List.of("home", "profile", "dashboard");
if (!allowed.contains(page)) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST);
}
return page;
}
The fix is straightforward: never use user input to determine the template name or path. Use a strict allowlist. Also upgrade to Thymeleaf 3.1.6+ which addresses CVE-2026-40478 and CVE-2026-41901 — but note that Spring Boot EOL versions will not pin this version automatically in their BOM.
Le correctif est simple : ne jamais utiliser les entrées utilisateur pour déterminer le nom ou le chemin du template. Utilisez une liste blanche stricte. Passez également à Thymeleaf 3.1.6+ qui corrige CVE-2026-40478 et CVE-2026-41901 — mais notez que les versions Spring Boot en fin de vie n’épingleront pas automatiquement cette version dans leur BOM.
Securing Spring Boot Actuator: The Endpoint That Developers Keep Forgetting
Sécuriser Spring Boot Actuator : L’Endpoint que les Développeurs Oublient Toujours
Spring Boot Actuator provides production-ready endpoints — /actuator/health, /actuator/env, /actuator/heapdump, /actuator/loggers — that expose sensitive application internals. CVE-2026-22731 and CVE-2026-22733 exploit improper endpoint mapping to bypass Actuator authentication. Beyond these CVEs, misconfigured Actuator is a perennial finding in Spring Boot security audits: /actuator/env exposes all environment variables including secrets, /actuator/heapdump can leak credentials from heap memory, and /actuator/jolokia (if present) enables JMX-based RCE.
Spring Boot Actuator fournit des endpoints prêts pour la production — /actuator/health, /actuator/env, /actuator/heapdump, /actuator/loggers — qui exposent des informations internes sensibles de l’application. CVE-2026-22731 et CVE-2026-22733 exploitent un mappage incorrect des endpoints pour contourner l’authentification Actuator. Au-delà de ces CVE, un Actuator mal configuré est une découverte pérenne lors des audits de sécurité Spring Boot : /actuator/env expose toutes les variables d’environnement, y compris les secrets, /actuator/heapdump peut faire fuiter des identifiants de la mémoire heap, et /actuator/jolokia (si présent) permet une RCE basée sur JMX.
# application.yml — Actuator hardening (2026 best practices)
management:
endpoints:
web:
exposure:
include: "health,info" # Expose only what you need
exclude: "env,heapdump,jolokia,shutdown,loggers"
endpoint:
health:
show-details: "when-authorized"
server:
port: 8081 # Separate management port, not exposed publicly
spring:
security:
# Explicitly protect management endpoints
# Never rely solely on Spring Boot's default filter chain
MavenGate: 6,170 Maven Central Domains Available for Hijacking Today
MavenGate : 6 170 Domaines Maven Central Disponibles au Détournement Aujourd’hui
The supply chain threat for Java extends well beyond direct CVEs. The MavenGate research from Oversecured analyzed 33,938 domain names corresponding to Maven Central dependencies and found that 6,170 (18.18%) of them were available for purchase. Because Maven Central uses domain-based group ID ownership verification (e.g., com.example requires ownership of example.com), purchasing an expired domain grants the attacker the ability to publish packages under that group ID and inject malicious code into any project that pulls those dependencies. Affected companies notified in the original research included Google, Facebook, Amazon, Microsoft, Adobe, LinkedIn, and Netflix.
La menace supply chain pour Java s’étend bien au-delà des CVE directes. La recherche MavenGate d’Oversecured a analysé 33 938 noms de domaine correspondant à des dépendances Maven Central et a constaté que 6 170 (18,18%) d’entre eux étaient disponibles à l’achat. Parce que Maven Central utilise la vérification de propriété du group ID basée sur le domaine (ex. : com.example nécessite la propriété de example.com), l’achat d’un domaine expiré donne à l’attaquant la possibilité de publier des packages sous ce group ID et d’injecter du code malveillant dans tout projet qui tire ces dépendances. Les entreprises notifiées lors de la recherche originale incluaient Google, Facebook, Amazon, Microsoft, Adobe, LinkedIn et Netflix.
The practical defense is dependency verification. Both Maven and Gradle support checksum and signature verification:
La défense pratique est la vérification des dépendances. Maven et Gradle prennent tous deux en charge la vérification des sommes de contrôle et des signatures :
// build.gradle.kts — enable dependency verification (Gradle 6.2+)
// Run: ./gradlew --write-verification-metadata sha256 to generate
// This creates gradle/verification-metadata.xml with checksums for all deps
dependencyVerification {
// Will fail build if any dependency checksum doesn't match
}
<!-- Maven: use maven-enforcer-plugin to require dependency checksums -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.5.0</version>
<dependencies>
<dependency>
<groupId>org.commonjava.maven.enforcer</groupId>
<artifactId>artifactsize-enforcer-rule</artifactId>
</dependency>
</dependencies>
</plugin>
OWASP Dependency-Check & Gradle Dependency Locking: Your CI/CD Security Gate
OWASP Dependency-Check & Verrouillage des Dépendances Gradle : Votre Porte de Sécurité CI/CD
OWASP Dependency-Check scans your project’s dependencies against the NVD CVE database. The Gradle plugin (v12.2.2 as of May 2026) and Maven plugin integrate directly into your build pipeline. The key configuration is setting a failBuildOnCVSS threshold — start at 9.0 for critical-only gating, then progressively lower to 7.0 as false positives are suppressed:
OWASP Dependency-Check analyse les dépendances de votre projet par rapport à la base de données CVE du NVD. Le plugin Gradle (v12.2.2 en mai 2026) et le plugin Maven s’intègrent directement dans votre pipeline de build. La configuration clé est la définition d’un seuil failBuildOnCVSS — commencez à 9.0 pour un blocage critique uniquement, puis abaissez progressivement à 7.0 au fur et à mesure que les faux positifs sont supprimés :
// build.gradle.kts
plugins {
id("org.owasp.dependencycheck") version "12.2.2"
}
dependencyCheck {
failBuildOnCVSS = 9.0f // Start strict, lower over time
suppressionFile = "owasp-suppressions.xml"
formats = listOf("HTML", "JSON", "SARIF")
nvd {
apiKey = System.getenv("NVD_API_KEY") // Faster updates
}
analyzers {
ossIndex {
enabled = true // Sonatype OSS Index for broader coverage
}
}
}
<!-- pom.xml — OWASP Dependency-Check Maven plugin -->
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>12.2.2</version>
<configuration>
<failBuildOnCVSS>9</failBuildOnCVSS>
<suppressionFiles>
<suppressionFile>owasp-suppressions.xml</suppressionFile>
</suppressionFiles>
<formats>HTML,JSON,SARIF</formats>
</configuration>
</plugin>
For Gradle projects, also enable dependency locking to prevent unexpected version resolution changes (which could be a vector for dependency confusion attacks):
Pour les projets Gradle, activez également le verrouillage des dépendances pour prévenir les changements de résolution de version inattendus (qui pourraient être un vecteur pour des attaques de confusion de dépendances) :
// build.gradle.kts — Gradle dependency locking
dependencyLocking {
lockAllConfigurations() // Creates gradle.lockfile
lockMode.set(LockMode.STRICT) // Fail if resolved != locked
}
// Generate/update lockfile:
// ./gradlew dependencies --write-locks
Spring Boot Version Support in 2026: Which Versions Still Receive Patches?
Support des Versions Spring Boot en 2026 : Quelles Versions Reçoivent Encore des Patches ?
Understanding which Spring Boot version you’re running — and whether it’s still supported — is the foundation of dependency security. CVE-2026-40976 affects Spring Boot 4.0.0–4.0.5, but other 2026 CVEs span versions 2.7.x through 4.0.x. Multiple branches are in end-of-life status:
Comprendre quelle version de Spring Boot vous exécutez — et si elle reçoit encore du support — est le fondement de la sécurité des dépendances. CVE-2026-40976 touche Spring Boot 4.0.0–4.0.5, mais d’autres CVE 2026 couvrent les versions 2.7.x à 4.0.x. Plusieurs branches sont en statut fin de vie :
- Spring Boot 2.7.x — EOL. No more patches. Affected by 2026 CVEs — no fix available from upstream.
- Spring Boot 2.7.x — Fin de vie. Plus de patches. Touchée par des CVE 2026 — aucun correctif disponible en amont.
- Spring Boot 3.2.x / 3.3.x — EOL. Many 2026 CVEs still apply. Upgrade required.
- Spring Boot 3.2.x / 3.3.x — Fin de vie. De nombreuses CVE 2026 s’appliquent encore. Mise à niveau requise.
- Spring Boot 3.4.x — Community support until late 2026. Currently receiving patches.
- Spring Boot 3.4.x — Support communautaire jusqu’à fin 2026. Reçoit actuellement des patches.
- Spring Boot 3.5.x — Current (as of May 2026). Active support.
- Spring Boot 3.5.x — Actuel (en mai 2026). Support actif.
- Spring Boot 4.0.x — Latest. 4.0.6 fixes CVE-2026-40976.
- Spring Boot 4.0.x — Dernière version. 4.0.6 corrige CVE-2026-40976.
Teams on EOL branches can use commercial support providers (HeroDevs offers Never-Ending Support for EOL Spring versions), but the cleanest solution is upgrading to a supported branch and setting up automated CVE scanning.
Les équipes sur des branches en fin de vie peuvent utiliser des prestataires de support commercial (HeroDevs propose un support sans fin pour les versions Spring EOL), mais la solution la plus propre est la mise à niveau vers une branche supportée et la mise en place d’une analyse CVE automatisée.
Spring Boot Dependency Security Checklist for 2026
Checklist de Sécurité des Dépendances Spring Boot pour 2026
Here is a practical checklist covering the most impactful controls for Spring Boot security in 2026:
Voici une checklist pratique couvrant les contrôles les plus importants pour la sécurité Spring Boot en 2026 :
Dependency Management
Gestion des Dépendances
- ✅ Upgrade to Spring Boot 4.0.6+ or 3.5.x (patched branch)
- ✅ Passer à Spring Boot 4.0.6+ ou 3.5.x (branche avec patches)
- ✅ Add explicit Spring Security configuration — never rely solely on the default filter chain
- ✅ Ajouter une configuration Spring Security explicite — ne jamais se fier uniquement à la chaîne de filtres par défaut
- ✅ Run
mvn dependency:treeor./gradlew dependenciesto audit transitive dependencies - ✅ Exécuter
mvn dependency:treeou./gradlew dependenciespour auditer les dépendances transitives - ✅ Override vulnerable transitive versions explicitly in your BOM/dependencyManagement
- ✅ Remplacer explicitement les versions transitives vulnérables dans votre BOM/dependencyManagement
Build Pipeline
Pipeline de Build
- ✅ Integrate OWASP Dependency-Check (v12.2.2) with
failBuildOnCVSS=9.0as baseline - ✅ Intégrer OWASP Dependency-Check (v12.2.2) avec
failBuildOnCVSS=9.0comme base - ✅ Enable Gradle dependency locking (
LockMode.STRICT) or Maven reproducible builds - ✅ Activer le verrouillage des dépendances Gradle (
LockMode.STRICT) ou les builds reproductibles Maven - ✅ Enable Gradle dependency verification (SHA-256 checksums) for critical dependencies
- ✅ Activer la vérification des dépendances Gradle (sommes de contrôle SHA-256) pour les dépendances critiques
- ✅ Configure a private repository proxy (Nexus/Artifactory) to avoid direct Maven Central pulls
- ✅ Configurer un proxy de dépôt privé (Nexus/Artifactory) pour éviter les pulls directs vers Maven Central
Actuator & Runtime Security
Sécurité Actuator & Runtime
- ✅ Expose only
healthandinfoon the public port; move all other Actuator endpoints to a separate management port - ✅ Exposer uniquement
healthetinfosur le port public ; déplacer tous les autres endpoints Actuator vers un port de gestion séparé - ✅ Disable
heapdump,env,jolokia, andshutdownendpoints explicitly - ✅ Désactiver explicitement les endpoints
heapdump,env,jolokiaetshutdown - ✅ Remove
spring-boot-devtoolsfrom production builds (never include in the production classpath) - ✅ Supprimer
spring-boot-devtoolsdes builds de production (ne jamais inclure dans le classpath de production) - ✅ Sanitize all model attributes that reach Thymeleaf templates — never let user input reach template resolution
- ✅ Assainir tous les attributs du modèle qui atteignent les templates Thymeleaf — ne jamais laisser les entrées utilisateur atteindre la résolution des templates
Frequently Asked Questions
Questions Fréquentes
Is CVE-2026-40976 being actively exploited?
CVE-2026-40976 est-elle activement exploitée ?
No public reports of active exploitation have been confirmed as of May 2026. However, the vulnerability is easy to detect and exploit — any application that meets the four vulnerable conditions (servlet-based, no custom Spring Security config, includes actuator-autoconfigure, excludes spring-boot-health) exposes all endpoints without authentication. Given the CVSS 9.1 score and the large number of Spring Boot 4.0 early adopters, patch urgency is high. Upgrade to 4.0.6 immediately.
Aucun rapport d’exploitation active n’a été confirmé en mai 2026. Cependant, la vulnérabilité est facile à détecter et à exploiter — toute application réunissant les quatre conditions vulnérables expose tous ses endpoints sans authentification. Compte tenu du score CVSS 9.1 et du grand nombre d’utilisateurs précoces de Spring Boot 4.0, l’urgence de patcher est élevée. Passez à 4.0.6 immédiatement.
How do I know if my Spring Boot app is vulnerable to CVE-2026-40976?
Comment savoir si mon application Spring Boot est vulnérable à CVE-2026-40976 ?
Check four things: (1) your Spring Boot version is between 4.0.0 and 4.0.5, (2) your application is servlet-based (not reactive), (3) you have spring-boot-actuator-autoconfigure on the classpath, and (4) you do NOT have spring-boot-health. If all four are true and you have no custom @EnableWebSecurity or SecurityFilterChain bean, you are vulnerable. Run ./gradlew dependencies | grep spring-boot-health or mvn dependency:tree | grep spring-boot-health to check.
Vérifiez quatre choses : (1) votre version de Spring Boot est entre 4.0.0 et 4.0.5, (2) votre application est basée sur les servlets (pas reactive), (3) vous avez spring-boot-actuator-autoconfigure dans le classpath, et (4) vous n’avez PAS spring-boot-health. Si les quatre sont vrais et que vous n’avez pas de bean @EnableWebSecurity ou SecurityFilterChain personnalisé, vous êtes vulnérable. Exécutez ./gradlew dependencies | grep spring-boot-health ou mvn dependency:tree | grep spring-boot-health pour vérifier.
Does OWASP Dependency-Check catch all Spring Boot CVEs?
OWASP Dependency-Check détecte-t-il toutes les CVE Spring Boot ?
OWASP Dependency-Check scans against the NVD CVE database and will detect CVEs in direct and transitive dependencies by matching package names and versions. It will catch CVEs like CVE-2026-40976 (NVD-published), but it cannot detect malicious packages (MavenGate-style attacks where the dependency itself has been tampered) — that requires dependency verification with checksums. For complete coverage you need both: Dependency-Check for known CVEs + Gradle/Maven dependency verification for supply chain integrity.
OWASP Dependency-Check scanne à la base de données CVE du NVD et détectera les CVE dans les dépendances directes et transitives en comparant les noms et versions des packages. Il détectera des CVE comme CVE-2026-40976 (publiée sur le NVD), mais ne peut pas détecter les packages malveillants (attaques de type MavenGate où la dépendance elle-même a été falsifiée) — cela nécessite une vérification des dépendances avec des sommes de contrôle. Pour une couverture complète, vous avez besoin des deux : Dependency-Check pour les CVE connues + vérification des dépendances Gradle/Maven pour l’intégrité supply chain.
What is the "zombie dependency" problem and how do I know if I’m affected?
Qu’est-ce que le problème des “dépendances zombies” et comment savoir si je suis touché ?
The zombie dependency problem occurs when you run an EOL Spring Boot version (e.g., 2.7.x, 3.2.x, 3.3.x): the Spring Boot BOM pins specific upstream library versions that no longer receive updates, yet those libraries keep getting new CVEs. You’re affected if you’re on an EOL branch. The only real fix is upgrading to a supported Spring Boot version. If you can’t upgrade immediately, override the vulnerable transitive versions explicitly using <dependencyManagement> in Maven or constraints in Gradle, and monitor for new CVEs continuously.
Le problème des dépendances zombies survient lorsque vous exécutez une version Spring Boot en fin de vie (ex. : 2.7.x, 3.2.x, 3.3.x) : le BOM Spring Boot épinglé des versions de bibliothèques en amont qui ne reçoivent plus de mises à jour, mais ces bibliothèques continuent d’obtenir de nouvelles CVE. Vous êtes touché si vous êtes sur une branche EOL. Le seul vrai correctif est la mise à niveau vers une version Spring Boot supportée. Si vous ne pouvez pas mettre à niveau immédiatement, remplacez explicitement les versions transitives vulnérables en utilisant <dependencyManagement> dans Maven ou constraints dans Gradle, et surveillez en continu les nouvelles CVE.
Should I use Dependabot or Renovate for Spring Boot dependency updates?
Dois-je utiliser Dependabot ou Renovate pour les mises à jour de dépendances Spring Boot ?
Both work well for Spring Boot. Renovate has slightly better Maven/Gradle support (understands Spring Boot parent POM upgrades as a single version change) and can group all Spring Boot-related updates into one PR. Dependabot handles individual dependency version bumps but may generate many separate PRs for a Spring Boot upgrade. However, neither tool covers CVEs in transitive dependencies pinned by the BOM that you haven’t overridden — for that, you need a dedicated CVE scanner like OWASP Dependency-Check or OptiBot.
Les deux fonctionnent bien pour Spring Boot. Renovate a un support Maven/Gradle légèrement meilleur (comprend les mises à niveau du POM parent Spring Boot comme un seul changement de version) et peut regrouper toutes les mises à jour liées à Spring Boot dans une seule PR. Dependabot gère les mises à jour individuelles de version de dépendances mais peut générer de nombreuses PR séparées pour une mise à niveau Spring Boot. Cependant, aucun des deux outils ne couvre les CVE dans les dépendances transitives épinglées par le BOM que vous n’avez pas remplacées — pour cela, vous avez besoin d’un scanner CVE dédié comme OWASP Dependency-Check ou OptiBot.
Monitor Your Spring Boot Dependencies Automatically
Surveillez Vos Dépendances Spring Boot Automatiquement
CVE OptiBot scans your Maven and Gradle lockfiles daily against the NVD and OSV.dev databases. Get instant alerts for new CVEs in Spring Boot, Thymeleaf, Tomcat, Netty, and your entire transitive dependency tree — including the zombie dependencies that Spring Boot’s EOL BOM won’t patch. No code access required.
CVE OptiBot scanne vos lockfiles Maven et Gradle quotidiennement contre les bases NVD et OSV.dev. Recevez des alertes instantanées pour les nouvelles CVE dans Spring Boot, Thymeleaf, Tomcat, Netty et l’ensemble de votre arbre de dépendances transitives — y compris les dépendances zombies que le BOM EOL de Spring Boot ne corrigera pas. Aucun accès au code requis.
Start free monitoring Démarrer le monitoring gratuit