Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
thymeleaf-check — Vérificateur hors ligne pour Thymeleaf CVE-2026-40477 / CVE-2026-41901 — vous indique à laquelle des deux failles SSTI de CVSS 9.0 vous êtes exposé, et si votre ligne de version dispose d’un correctif (3.0.x : ce n’est pas le cas). | Kitploit
Outils/GitHubGitHub/xiaoqimikko/thymeleaf-check
Analyse StatiqueScanners de VulnérabilitésAudit de ConfigurationDevSecOpsSécurité de la Chaîne Logistique
GitHubxiaoqimikko/thymeleaf-check

thymeleaf-check

Vérificateur hors ligne pour Thymeleaf CVE-2026-40477 / CVE-2026-41901 — vous indique à laquelle des deux failles SSTI de CVSS 9.0 vous êtes exposé, et si votre ligne de version dispose d’un correctif (3.0.x : ce n’est pas le cas).

Voir le dépôt
51il y a 1 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

thymeleaf-check

Outil de diagnostic hors ligne pour Thymeleaf CVE-2026-40477 / CVE-2026-41901 —— zéro dépendance, un seul jar, sans connexion réseau.

Deux contournements SSTI de score CVSS 9.0, avec deux versions correctives publiées en neuf jours. Il répond d'abord à la question « lesquelles m'affectent », puis à la question plus délicate :

Sur ma branche de version, existe-t-il une version corrective vers laquelle monter ?

Pour 3.1.x, oui (il suffit de passer à 3.1.5.RELEASE). Pour 3.0.x et antérieurs, non —— et c'est précisément la population la plus nombreuse en termes d'installations.


Pourquoi cet outil est nécessaire

Les plages affectées des deux avis sont, dans OSV, toutes deux définies par introduced: 0 :

curl -s https://api.osv.dev/v1/vulns/GHSA-r4v4-5mwr-2fwr | jq '.affected[0].ranges'
# [{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.1.4.RELEASE"}]}]

Autrement dit, toute la branche 3.0 est incluse, et la liste version par version énumère 3.0.15.RELEASE jusqu'à 1.0.0. Or, sur Maven Central, la branche 3.0 s'arrête à 3.0.15.RELEASE, sans aucune publication ultérieure :

curl -s https://repo1.maven.org/maven2/org/thymeleaf/thymeleaf/maven-metadata.xml \
  | grep -o '<version>3\.0\.[^<]*</version>' | tail -1
# <version>3.0.15.RELEASE</version>

Les versions corrigées des deux CVE sont toutes deux sur la branche 3.1. Les utilisateurs de 3.0.x n'ont donc pas l'option « changer juste un numéro de version », seulement une migration vers une autre branche majeure — et la 3.1 est explicitement listée par la documentation officielle comme comportant des changements incompatibles (recopiés un par un depuis la section 3.1.0.M1 du ChangeLog.txt officiel) :

- Removed web-API based expression security objects (#request, #response, #session, #servletContext).
- Removed support for Spring 3.x and Spring 4.x.
- Set minimum JDK compatibility level to JDK 8 project-wide (JDK 17 for thymeleaf-spring6).

Les templates qui contiennent ${#request.…} / ${#session.…} provoqueront directement une erreur lors de la mise à niveau ; ces valeurs doivent désormais être placées dans le Model par le Controller. Il s'agit d'une migration à planifier, pas d'un simple changement de numéro de version.

Qui se trouve sur cette ligne

Nombre de dépendances de deps.dev (lecture directe du 2026-09-04, recalculable par quiconque) :

VersionNombre de dépendancesQuelles lignes concernéesMise à niveau sur la même ligne possible
3.0.11.RELEASE1124deux❌ aucune version corrigée sur la ligne 3.0
3.0.15.RELEASE678deux❌ idem, et c'est déjà le terminus de cette ligne
3.0.12.RELEASE641deux❌
3.1.3.RELEASE826deux✅ mise à niveau vers 3.1.5
3.1.2.RELEASE677deux✅
3.1.4.RELEASE70seulement CVE-2026-41901✅
3.1.5.RELEASE590—déjà sûr

La version unique la plus répandue en termes d'installations est 3.0.11.RELEASE, soit 36 % de plus que la 3.1.3, la plus élevée de la ligne 3.1, et elle n'a aucune issue sur sa propre ligne.


Utilisation

java -jar thymeleaf-check.jar <目录或 jar/war 路径> [--utf8|--gbk]
$ java -jar thymeleaf-check.jar ./target
[CRITICAL] ./target/myapp.war :: BOOT-INF/lib/thymeleaf-3.0.11.RELEASE.jar
            构件:thymeleaf  版本 3.0.11.RELEASE(3.0 线,依据: MANIFEST(Implementation-Version))
            命中: CVE-2026-40477 + CVE-2026-41901
            受影响,且 3.0 线在 Maven Central 上没有任何修复版(该线止于 3.0.15.RELEASE)。

Code de sortie : 2 = une ligne de version contenant un composant n'a pas de version corrigée sur la même ligne · 1 = affecté mais mise à niveau possible sur la même ligne / indéterminable · 0 = non détecté · 3 = erreur d'utilisation ou de chemin. Peut être intégré directement dans la CI.

Que scanner pour être le plus précis

Scannez les artefacts de build (target/*.jar, *.war), pas les répertoires de code source. Dans la grande majorité des cas, Thymeleaf est introduit de manière transitive par spring-boot-starter-thymeleaf, et le starter lui-même ne porte pas de version — il est impossible de voir le numéro de version de Thymeleaf dans le pom. Dans ce cas, l'outil indique explicitement « impossible de le déterminer en lisant le pom », plutôt que de considérer qu'il n'existe pas.

Trois critères d'identification, classés par fiabilité :

  1. Implementation-Version du MANIFEST — reconnaissable même si le jar a été renommé par un outil de repackaging. (Sous META-INF/ du jar officiel de Thymeleaf, il n'y a que MANIFEST.MF, pas de répertoire maven/, donc pour lui c'est le critère le plus solide.)
  2. Les métadonnées Maven pom.properties
  3. Le nom du fichier jar

Dans un fat jar / war, les répertoires BOOT-INF/lib/ et WEB-INF/lib/ sont ouverts et examinés un par un, et le MANIFEST des jars embarqués est également lu.


Les deux CVE sont deux mécanismes différents

CVE-2026-40477CVE-2026-41901
GHSAGHSA-r4v4-5mwr-2fwrGHSA-c9ph-gxww-7744
CVSS9.09.0
Affecté<= 3.1.3.RELEASE<= 3.1.4.RELEASE
Correctif3.1.4.RELEASE3.1.5.RELEASE
Divulgation2026-04-152026-05-04
Phrase officielle"fails to properly restrict the scope of accessible objects""fails to properly neutralize specific constructs", se produisant dans un contexte sandboxé (restreint)

La plage affectée de la seconde inclut 3.1.4, donc ceux qui ont mis à jour vers 3.1.4 en suivant la première advisory tombent dans la seconde.

Mais ne le lisez pas comme « l'officiel n'a pas corrigé proprement » — les deux advisories décrivent des mécanismes différents, 3.1.4 (2026-04-12) et 3.1.5 (2026-04-21) sont deux versions officielles séparées de neuf jours, et aucun texte officiel ne dit que la première correction était incomplète. Cet outil ne fait que présenter les faits côte à côte, sans tirer cette conclusion à votre place.


D'où vient la table de décision, et comment vérifier qu'elle est toujours valable

Chaque chiffre dans RuleTable.java peut être vérifié rétrospectivement :

python tools/gen_rules.py --show

Il recoupe la table de décision à l'aide de deux sources primaires — les plages affectées et la liste version par version d'OSV, et le maven-metadata.xml de Maven Central — et quitte avec un code non nul en cas de divergence.

Trois conventions :

  • Code de sortie 2 si les données ne peuvent pas être récupérées, en signalant « vérification non effectuée », et non « vérification réussie ». Une panne réseau ne doit pas être interprétée comme une validation complète.
  • Vérification uniquement, aucune modification automatique du code. Si les chiffres changent, c'est à un humain d'examiner comment ils ont changé.
  • Il surveille spécifiquement deux événements susceptibles de rendre cet outil obsolète : la sortie ou non de la 3.1.6 et l'apparition soudaine d'une 3.0.16 dans la branche 3.0.

Compilation

mvn package        # JDK 17;target/thymeleaf-check-0.1.0.jar
mvn test           # 19 个用例

Le fait de n'avoir aucune dépendance à l'exécution est délibéré : un outil de diagnostic doit pouvoir être déposé dans n'importe quel environnement et s'exécuter directement.

License

Apache-2.0

Codes de sortie

CodeSignification
0Analyse terminée, et chaque fichier a réellement été lu, aucune découverte nécessitant votre intervention
4Un fichier n'a pas pu être lu — ce n'est pas un zip, contenu tronqué, ou échec de lecture
Télécharger l’outil