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
cve-2025-43564-tomcat_put_rce_reproduction — Reproduction de cve-2025-43564-tomcat_put_rce_reproduction | Kitploit
Outils/GitHubGitHub/razureink/cve-2025-43564-tomcat_put_rce_reproduction
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationDéveloppement de Charges Utiles
GitHubrazureink/cve-2025-43564-tomcat_put_rce_reproduction

cve-2025-43564-tomcat_put_rce_reproduction

Reproduction de cve-2025-43564-tomcat_put_rce_reproduction

Voir le dépôt
119il y a 2 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

CVE-2025-43564 — Exécution de code à distance (RCE) via la gestion des requêtes PUT partielles d'Apache Tomcat

ChampValeur
Identifiant CVECVE-2025-43564
Score CVSS9.8 (CRITIQUE)
VecteurAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-494 — Téléchargement de code sans vérification d'intégrité
ExploitationConfirmée dans la nature moins d'une semaine après la divulgation
DivulgationJuillet 2025
CorrectifTomcat 11.0.6, 10.1.40, 9.0.102

Table des matières

  1. Vue d'ensemble
  2. Détails techniques
  3. Versions concernées
  4. Étapes de reproduction
  5. Preuve de concept
  6. Atténuation
  7. Références

Vue d'ensemble

CVE-2025-43564 est une vulnérabilité critique d'exécution de code à distance non authentifiée dans la gestion des requêtes PUT partielles HTTP d'Apache Tomcat. Le défaut réside dans la manière dont Tomcat traite les requêtes PUT avec un contenu partiel (HTTP/1.1 Content-Range ou Transfer-Encoding: chunked avec une sémantique partielle). Un attaquant peut concevoir une requête PUT partielle qui contourne les contrôles d'accès et les contraintes d'écriture, permettant le téléchargement de fichiers arbitraires — y compris des webshells JSP accessibles via le web — vers la racine web du serveur ou tout répertoire inscriptible accessible via le contexte de servlet.

Une fois qu'un fichier JSP est installé, l'attaquant n'a plus qu'à le requêter et à transmettre des commandes du système d'exploitation via les paramètres de requête, obtenant ainsi une exécution de code à distance entièrement non authentifiée avec les droits de l'utilisateur du processus Tomcat.

CVSS 9.8 — Critique car :

  • Vecteur réseau — exploitable à distance
  • Faible complexité d'attaque — aucune condition particulière requise
  • Aucun privilège requis — non authentifié
  • Aucune interaction utilisateur — entièrement automatisé
  • Impact élevé — compromission totale de la confidentialité, de l'intégrité et de la disponibilité

Détails techniques

Cause racine

Le DefaultServlet d'Apache Tomcat et le connecteur HTTP/1.1 (NIO/NIO2/Apr) gèrent les requêtes PUT pour le téléchargement de ressources statiques. La vulnérabilité se situe dans la logique de gestion des requêtes PUT partielles : lorsqu'un client envoie un PUT avec un en-tête Content-Range (RFC 7233 §4.2) ou utilise un encodage par blocs avec une sémantique partielle spécifique, le serveur ne valide pas correctement :

  1. Les vérifications d'intégrité du chemin de fichier / de la ressource avant d'écrire le contenu partiel
  2. La ré-évaluation du contrôle d'accès pour les écritures partielles — la vérification initiale réussit, mais les opérations d'écriture suivantes se poursuivent sans re-validation
  3. Les contraintes de traversée de répertoire dans le calcul du décalage d'écriture partielle

Le code d'analyse dans org.apache.catalina.servlets.DefaultServlet et les composants sous-jacents HttpInput / SocketProcessorBase gèrent mal la frontière entre les écritures de contenu partiel et les écritures complètes de ressources, permettant à un attaquant d'ajouter ou d'écraser un contenu arbitraire sur tout chemin auquel le processus Tomcat a accès en écriture.

Déroulement de l'attaque

Attacker ──PUT /exec.jsp HTTP/1.1──► Tomcat (DefaultServlet)
             Content-Range: bytes 0-99/100
             [JSP payload bytes]

   └──► Server writes partial content to exec.jsp
        without full validation of the target path

Attacker ──GET /exec.jsp?cmd=whoami──► Tomcat

   └──► JSP executes → RCE

L'attaquant envoie un PUT partiel avec un en-tête Content-Range qui amène Tomcat à croire que la requête est la continuation d'un téléchargement existant. Le serveur crée ou ouvre le fichier cible et écrit les octets fournis sans vérifier que le fichier existe déjà, sans vérifier les permissions d'écriture au moment de l'écriture, et sans assainir le chemin cible par rapport à la racine web.

Pourquoi cela contourne les protections standard

  • Restrictions d'accès PUT par défaut — La configuration par défaut de Tomcat nécessite de définir readonly=false sur le DefaultServlet pour qu'un PUT standard fonctionne. Le chemin PUT partiel ignore cette vérification dans certaines conditions.
  • Pare-feu applicatifs web (WAF) — La plupart des signatures WAF pour les attaques basées sur PUT recherchent des requêtes PUT complètes. Un PUT partiel avec Content-Range échappe souvent à ces signatures.
  • Contournement de l'authentification — Le chemin de code PUT partiel n'invoque pas toujours les contraintes de sécurité configurées ; dans certaines configurations de connecteur, l'authentification n'est jamais vérifiée.

Versions concernées

ProduitVersions concernéesCorrigé dans
Apache Tomcat 1111.0.0-M1 à 11.0.511.0.6
Apache Tomcat 10.110.1.0-M1 à 10.1.3910.1.40
Apache Tomcat 10.0toutes les versions (fin de vie)passer à 10.1.x
Apache Tomcat 99.0.0-M1 à 9.0.1019.0.102
Apache Tomcat 8.5toutes les versions (fin de vie)passer à 9.0.x
Apache Tomcat 8toutes les versions (fin de vie)passer à 9.0.x
Apache Tomcat 7toutes les versions (fin de vie)passer à 9.0.x

Remarque : Les branches plus anciennes (7.x, 8.x, 8.5.x, 10.0.x) sont en fin de vie et ne recevront pas de backport. Les utilisateurs doivent passer à une branche prise en charge.


Étapes de reproduction

Configuration du laboratoire

  1. Téléchargez un Apache Tomcat vulnérable (par exemple, Tomcat 9.0.50) :

    wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.50/bin/apache-tomcat-9.0.50.zip
    
  2. Extrayez et démarrez Tomcat avec la configuration par défaut :

    unzip apache-tomcat-9.0.50.zip
    cd apache-tomcat-9.0.50/bin
    ./startup.sh   # or startup.bat on Windows
    
  3. Vérifiez que le serveur est en cours d'exécution :

    curl -v http://localhost:8080
    

Étapes d'exploitation

  1. Téléversez le webshell JSP à l'aide du script PoC :

    python exploit.py --target http://localhost:8080 --cmd id
    
  2. Vérifiez que le webshell a bien été installé :

    curl http://localhost:8080/exec.jsp?cmd=whoami
    
  3. Exécutez des commandes arbitraires :

    python exploit.py --target http://localhost:8080 --cmd "cat /etc/passwd"
    
  4. Session interactive (si souhaité) :

    python exploit.py --target http://localhost:8080 --shell
    

Preuve de concept

L'exploit.py inclus est un PoC Python fonctionnel qui :

  1. Envoie une requête HTTP PUT à la cible Tomcat avec une charge utile de webshell JSP comme corps de requête
  2. Exploite la faille de gestion des PUT partiels — l'en-tête Content-Type et la structure de la charge utile déclenchent le chemin de code vulnérable
  3. Le webshell JSP est écrit dans le docBase du serveur (par exemple, webapps/ROOT/)
  4. Une fois téléversé, envoie des requêtes GET à exec.jsp?cmd=<command> pour exécuter des commandes du système d'exploitation
  5. Prend en charge les modes commande unique (--cmd) et shell interactif (--shell)

PoC manuel (avec curl)

Télécharger l’outil