Lab de reproduction local pour Apache Tomcat CVE-2025-24813, documentant les conditions d'exploitation et la vérification assistée par IA de la vulnérabilité.
Uniquement destiné à des expérimentations locales autorisées, à la compréhension des correctifs et à la validation défensive. Veuillez ne pas envoyer de requêtes à des cibles non autorisées.
Ce projet documente le processus de reproduction de la CVE-2025-24813 sur une instance locale d'Apache Tomcat 9.0.98 : utilisation de partial PUT pour écrire un fichier temporaire, puis, dans une configuration où la persistance de Session de type fichier est activée et où les conditions de filtrage de la désérialisation sont laxistes, vérification de la chaîne de chargement du fichier de Session et d'exécution du Payload.
.inject.session dans le répertoire de travail, puis confirme que l'accès déclenche le chargement de la Session et l'exécution du Payload ; il ne faut pas juger du succès uniquement à partir du code de statut HTTP.409 ou 500, mais l'écriture du fichier et le déclenchement ultérieur doivent encore être évalués par étapes, en combinant le contenu du fichier, les journaux du serveur et les effets secondaires contrôlés.L'avis de sécurité officiel d'Apache énumère les conditions de déclenchement de CVE-2025-24813, la plage d'impact (Tomcat 9.0.0-M1 à 9.0.98) et les informations de correction dans la version 9.0.99 : https://tomcat.apache.org/security-9
java -version)requests127.0.0.1:8080scripts/reproduce_local.py # Script de validation locale, cible par défaut localhost:8080
evidence/ # Captures d'écran d'expérimentation (renommées par étape)
python3 -m venv .venv
. .venv/bin/activate
python -m pip install requests
python scripts/reproduce_local.py
La cible dans le script est fixée à l'adresse d'expérimentation locale et ne contient aucune logique de scan distant. Avant l'exécution, il convient de confirmer dans l'instance Tomcat locale :
work/Catalina/localhost/ROOT sont observables.PUT /inject/session avec Content-Range, observer si le fichier temporaire est généré ;work/Catalina/localhost/ROOT/.inject.session ;JSESSIONID=.inject, observer le chargement du fichier de Session ;409/500 comme un échec ou un succès de la reproduction de la vulnérabilité.Les en-têtes HTTP doivent utiliser de véritables CRLF (octets 0d 0a) ; ne pas envoyer 0x0d0x0a comme texte visible. En Python, utiliser b"\\r\\n" ou laisser requests construire les en-têtes de requête.
Donnez la priorité à la mise à niveau vers une version de Tomcat incluant le correctif, puis revérifiez les permissions d'écriture du Default Servlet, les cas d'usage du PUT partiel et la configuration du filtre de persistance de Session. Après le correctif, répétez le même ensemble d'étapes de validation locale ; on s'attend à ce que la chaîne d'écriture de fichiers temporaires ou la chaîne de chargement de Session ne soit plus exploitable.
Ce dépôt ne fournit aucune fonctionnalité de scan, de persistance ou d'exploitation en masse visant des cibles Internet. Tout le contenu est strictement limité à l'environnement d'expérimentation local sous mon contrôle et à des environnements d'entraînement explicitement autorisés.