Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2019-25485 — Débordement de tampon basé sur la pile dans R 3.4.4. Exploitation complète sur x86, mais seulement contrôle RIP avec analyse de gadgets sur x64 en raison des contraintes du programme. La même vulnérabilité sur deux architectures, menant à des chemins d'exploitation différents. | Kitploit
Outils/GitHubGitHub/themalwareguardian/cve-2019-25485
Analyse des VulnérabilitésExploitationRétro-ingénierieShellcodeDébogueursApprentissage et ÉducationDéveloppement de Charges UtilesExploitation de Binaires

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
GitHub
themalwareguardian/cve-2019-25485

CVE-2019-25485

Débordement de tampon basé sur la pile dans R 3.4.4. Exploitation complète sur x86, mais seulement contrôle RIP avec analyse de gadgets sur x64 en raison des contraintes du programme. La même vulnérabilité sur deux architectures, menant à des chemins d'exploitation différents.

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

🐞 CVE-2019-25485: R 3.4.4 - Débordement de tampon basé sur la pile (x86 et x64)

Débordement de tampon basé sur la pile dans R 3.4.4. Exploitation complète sur x86, mais seulement contrôle de RIP avec analyse de gadgets sur x64 en raison des contraintes du programme. La même vulnérabilité sur deux architectures, menant à des chemins d'exploitation différents.




📑 Table des matières

  • Pourquoi ce dépôt existe
  • Pourquoi cette vulnérabilité est intéressante
  • Contexte et logiciel concerné
  • À propos de la vulnérabilité
  • Déclenchement du crash
  • Exploitation



🎓 Pourquoi ce dépôt existe

Ce dépôt fait partie du matériel que j'utilise lorsque j'enseigne l'exploitation de corruptions mémoire (en plus de mon travail régulier, j'enseigne également dans différents cours de cybersécurité où j'aide à former la prochaine génération de rétro-ingénieurs).

CVE-2019-25485 est le cas que j'utilise lorsque je souhaite que les étudiants travaillent sur la même vulnérabilité sur deux architectures différentes et voient de première main ce qui change entre elles. R 3.4.4 est disponible en versions x86 et x64, et le même débordement existe dans les deux, le même champ d'interface graphique, le même gestionnaire d'entrée, le même crash. Les deux sont documentés et exploités ici comme exercices distincts :

  • La version x86 suit la méthodologie classique de remplacement de EIP. Le débordement atteint EIP, un gadget JMP ESP est trouvé dans un module sans ASLR, le shellcode est placé après le remplacement de EIP, et un reverse shell fonctionnel est obtenu. C'est un exploit propre et direct qui démontre les principes fondamentaux des débordements de tampon basés sur la pile.
  • La version x64 atteint le contrôle de RIP et confirme le décalage, mais l'exécution complète de code (RCE) n'est pas réalisée. C'est délibéré et c'est l'objectif de l'exercice. La tentative d'exploitation x64 documente entièrement le processus de recherche de gadgets, analyse pourquoi chaque catégorie de gadget échoue dans ce contexte spécifique, explique la contrainte d'octet nul imposée par le gestionnaire d'entrée, et décrit la structure de chaîne ROP qui serait nécessaire pour contourner DEP et pourquoi elle ne peut pas être construite compte tenu des contraintes de ce vecteur d'entrée. La seule voie théorique restante pour une exploitation complète à partir de cette seule vulnérabilité serait la programmation orientée saut (JOP), qui enchaîne des gadgets se terminant par JMP plutôt que par RET et ne repose pas sur la pile pour le flux de contrôle. Construire une chaîne JOP manuellement sans aucune région contrôlée inscriptible après le remplacement de RIP est un défi ouvert avancé qui dépasse le cadre de cet exercice. L'échec n'est pas une lacune dans la méthodologie. C'est la leçon.



💡 Pourquoi cette vulnérabilité est intéressante

R 3.4.4 est une application de calcul statistique, pas un service réseau ou un navigateur. Le débordement est déclenché via un champ d'interface graphique de bureau, ce qui signifie que la surface d'attaque est complètement différente de tous les autres cas que j'enseigne. Ce qui rend ce cas utile pour l'enseignement :

  • Aucun composant réseau. La charge utile est collée dans un champ d'interface graphique, ce qui introduit une classe différente de contraintes, en particulier la façon dont le gestionnaire d'entrée de l'interface graphique traite les octets avant qu'ils n'atteignent l'opération de copie vulnérable.
  • Le contrôle de RIP est confirmé. Le débordement atteint RIP et le décalage est trouvé. Ce n'est pas un cas où la vulnérabilité ne peut pas être atteinte. Le contrôle du pointeur d'instruction est entièrement démontré.
  • Le respect des adresses canoniques brise l'approche classique. Sur x86, vous écrasez EIP et ajoutez le shellcode. Sur x64, les octets supérieurs de RIP doivent être \x00\x00 pour que l'adresse soit canonique, et ces octets nuls terminent l'entrée immédiatement après l'adresse du gadget. Il n'y a pas d'espace pour le shellcode ou les valeurs de chaîne ROP après le remplacement.
  • La conversion des octets nuls bloque ROP. Le champ d'interface graphique convertit les octets nuls en espaces avant de les copier dans le tampon. Chaque adresse x64 contient des octets nuls dans la moitié supérieure. Aucune adresse de gadget ne peut être placée sur la pile en tant que valeur de chaîne ROP, elles arrivent toutes corrompues.
  • DEP bloque l'exécution directe. Même si un moyen d'atteindre le tampon de shellcode était trouvé, DEP est appliqué et bloque l'exécution sur la pile.
  • La recherche de gadgets est documentée intégralement. Le processus de vidage des gadgets de chaque module chargé, de filtrage par type et de raisonnement sur les raisons pour lesquelles chaque gadget échoue est documenté étape par étape. C'est la compétence fondamentale dont tout développeur d'exploit a besoin.
  • Le squelette de la chaîne ROP pour VirtualProtect est expliqué. Les étudiants voient exactement ce qui serait nécessaire pour contourner DEP, pourquoi la convention d'appel est importante, et pourquoi cette chaîne spécifique ne peut pas être construite compte tenu des contraintes d'entrée.
Télécharger l’outil



🔍 Contexte et logiciel concerné

R est un environnement de calcul statistique et de graphisme disponible pour Windows, macOS et Linux. La vulnérabilité se trouve dans la boîte de dialogue des préférences de l'interface graphique, plus précisément le champ Langue pour les menus et messages, qui copie l'entrée utilisateur dans un tampon de pile de taille fixe sans valider sa longueur.

Détails techniques clés :

  • Type de vulnérabilité : Débordement de tampon basé sur la pile
  • Version concernée : R 3.4.4 x86_x64
  • Point d'entrée concerné : Édition -> Préférences de l'interface graphique -> Langue pour les menus et messages
  • Composant vulnérable : Gestionnaire d'entrée des préférences de l'interface graphique
  • Authentification requise : Non (application locale)
  • Impact : x86 - Exécution de code à distance | x64 - Flux de contrôle confirmé



⚠️ À propos de la vulnérabilité

R 3.4.4 traite le champ Langue pour les menus et messages en copiant la chaîne fournie dans un tampon de pile de taille fixe sans vérifier sa longueur. Une version simplifiée de la logique vulnérable ressemble à ceci :

root@kitploit:~
char language_buffer[256];

strcpy(language_buffer, user_input);

Envoyer une chaîne suffisamment longue provoque la copie au-delà de la fin du tampon, corrompant la pile jusqu'à ce que l'adresse de retour sauvegardée soit écrasée. Lorsque la fonction retourne, le CPU charge la valeur contrôlée par l'attaquant depuis la pile dans RIP et tente d'y sauter.

Sur x64, Windows applique la validation des adresses canoniques avant tout saut. Une valeur non canonique comme 0x4141414141414141 déclenche immédiatement une violation d'accès avant que RIP ne soit chargé, ce qui signifie que le crash semble différent de celui sur x86, pas de RIP = 4141414141414141 propre. Le décalage doit être trouvé en lisant le motif cyclique depuis la pile après le crash plutôt que directement depuis RIP.




💥 Déclenchement du crash

Le crash peut être reproduit en collant une longue chaîne dans le champ de langue. Aucune authentification n'est requise. Exemple utilisant Python pour générer la charge utile :

root@kitploit:~
import struct

payload = b'A' * 400

with open('payload.txt', 'wb') as f:
	f.write(payload)
root@kitploit:~
Ouvrir R 3.4.4 x64
Édition -> Préférences de l'interface graphique
Coller le contenu de payload.txt dans Langue pour les menus et messages
Cliquer sur OK



💣 Exploitation

Le but de ce dépôt n'est pas seulement de démontrer le crash, mais de parcourir le processus d'exploitation complet sur les deux architectures, en documentant ce qui fonctionne sur x86, ce qui casse sur x64, et plus important encore, pourquoi.

Pour garder le README principal propre, les notes d'exploitation détaillées, les scripts et les étapes du débogueur sont placés dans le dossier Vulnerability 📂 de ce dépôt, organisés en sous-dossiers séparés x86 et x64.

Vous y trouverez le flux de travail complet pour les deux architectures :

x86 - Exploitation complète :

  • Fuzzing du champ de langue pour identifier le crash.
  • Découverte du décalage pour localiser la position exacte de EIP sur la pile.
  • Analyse des mauvais caractères pour identifier les octets qui corrompent la charge utile.
  • Localisation d'un gadget JMP ESP dans stats.dll, un module compilé sans ASLR ni SafeSEH.
  • Placement et exécution du shellcode, reverse shell fonctionnel obtenu.
  • x64 - Contrôle de RIP et analyse d'exploitation :

    • Configuration de x64dbg pour éviter les interruptions constantes dues aux événements de chargement de DLL.
    • Fuzzing du champ de langue en trois phases pour trouver la taille exacte du crash.
    • Recherche du décalage de RIP en lisant le motif cyclique depuis la pile plutôt que depuis RIP.
    • Confirmation du contrôle de RIP en utilisant un remplacement de 6 octets avec remplissage automatique d'octets nuls.
    • Identification de la conversion d'octet nul en espace comme contrainte d'entrée fondamentale.
    • Vidage des gadgets de tous les modules R chargés en utilisant rp++ et filtrage avec PowerShell.
    • Analyse de chaque catégorie de gadget, CALL RBX, CALL RSP, POP RSP, SUB RSP, PUSH RSP, et documentation des raisons pour lesquelles chacune échoue dans ce contexte spécifique.
    • Explication de la structure de chaîne ROP nécessaire pour appeler VirtualProtect et contourner DEP, et pourquoi elle ne peut pas être construite compte tenu de la contrainte d'octet nul.
    • Documentation de la JOP comme seule voie théorique restante et pourquoi elle reste un défi ouvert.