
Débordement de tampon classique basé sur la pile dans SLMail 5.1 montrant comment les premiers serveurs de messagerie pouvaient être compromis via des commandes SMTP et POP3 surdimensionnées.
Débordement de tampon basé sur la pile classique dans SLMail 5.5 montrant comment les premiers serveurs de messagerie pouvaient être compromis via des commandes SMTP et POP3 surdimensionnées.
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 principal, j'enseigne également dans différents cours de cybersécurité où j'aide à former la prochaine génération d'ingénieurs en rétro-ingénierie).
CVE-2003-0264 est l'un des premiers cas que je présente lors de l'enseignement des débordements de tampon basés sur la pile vanille sur un protocole réseau. C'est propre, bien documenté, et le chemin d'exploitation est direct : pas de SEH, pas d'egghunter, pas de contrainte d'espace. L'étudiant envoie une charge utile, écrase EIP, atterrit sur un gadget JMP ESP et obtient un shell. Cette clarté est exactement ce qui le rend utile comme point de départ.
SLMail 5.5 est un serveur de messagerie Windows hérité. La vulnérabilité se trouve dans le service POP3, plus précisément dans le gestionnaire de commande PASS, qui copie l'entrée utilisateur directement dans un tampon de pile de taille fixe sans aucune validation de longueur. Ce qui rend ce cas particulièrement utile pour l'enseignement, c'est le nombre réduit de pièces mobiles :
Cette combinaison - accessible sur le réseau, sans authentification, écrasement direct d'EIP, absence de mitigations modernes - fait de CVE-2003-0264 l'un des exemples les plus propres de débordement de pile vanille qui fonctionne encore sur les versions modernes de Windows.
SLMail est un serveur de messagerie Windows qui fournit des services SMTP, POP3 et d'administration. Le service POP3 écoute sur le port TCP 110 et gère les commandes standard de récupération de courrier. La vulnérabilité se trouve dans le gestionnaire de commande PASS, qui traite l'argument du mot de passe envoyé par un client connecté.
Détails techniques clés :
|:---|:---| | Type de vulnérabilité | Débordement de tampon basé sur la pile | | Version affectée | SLMail 5.5 et versions antérieures | | Point d'accès affecté | Commande POP3 PASS | | Composant vulnérable | Gestionnaire de commande PASS | | Authentification requise | Non | | Impact | Exécution de code à distance |
Le service POP3 de SLMail traite la commande PASS en copiant l'argument du mot de passe fourni dans un tampon de pile de taille fixe en utilisant une fonction non sécurisée sans vérification de longueur. Une version simplifiée de la logique vulnérable ressemble à ceci :
char password_buffer[256];
strcpy(password_buffer, pass_argument);
Envoyer une chaîne suffisamment longue comme argument PASS 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 EIP et saute dessus.
Le crash peut être reproduit en envoyant un argument PASS surdimensionné via POP3. Aucun identifiant valide n'est nécessaire. Exemple avec Python :
import socket
HOST = '127.0.0.1'
PORT = 110
payload = b"A" * 3000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.recv(1024)
s.send(b"USER username\r\n")
s.recv(1024)
s.send(b"PASS " + payload + b"\r\n")
s.close()
Lorsqu'il est exécuté sous un débogueur, le crash montre EIP écrasé avec des données contrôlées par l'utilisateur :
EIP = 41414141
confirmant que l'adresse de retour sauvegardée a été corrompue par le débordement.
L'objectif de ce dépôt n'est pas seulement de démontrer le crash, mais de parcourir l'ensemble du processus d'exploitation pas à pas, du fuzzing jusqu'à un reverse shell fonctionnel.
Pour garder le README principal clair, 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.
Vous y trouverez le flux de travail complet utilisé pour exploiter cette CVE, incluant :