
Débordement de tampon basé sur SEH dans Easy File Sharing Web Server 7.2, accessible via le point de terminaison de récupération de mot de passe.
Dépassement de tampon basé sur SEH dans Easy File Sharing Web Server 7.2, accessible via le point de terminaison de récupération de mot de passe.
Ce dépôt a été créé dans le cadre du matériel que j'utilise pour enseigner la recherche de vulnérabilités et le développement d'exploits, en particulier pour introduire les concepts de dépassement SEH (Structured Exception Handler) et de chaînes ROP (Return-Oriented Programming).
Il est lié à ma présentation "The Path That Leads to Your First CVE". Dans cette présentation, j'explique qu'il existe différents points d'entrée dans la recherche de vulnérabilités, et que l'étude de CVE publiquement documentées dans des logiciels hérités est l'un des chemins les plus accessibles pour les débutants.
Cette CVE a été choisie car elle démontre un scénario d'exploitation complet et réaliste :
L'objectif est d'utiliser ce cas comme tremplin entre les exercices d'introduction aux dépassements de tampon et les concepts plus avancés de développement d'exploits.
Cette vulnérabilité affecte Easy File Sharing Web Server 7.2, une application légère de serveur web Windows largement utilisée pour le partage simple de fichiers. Le logiciel a été écrit sans tenir compte des mesures d'atténuation modernes. Ce qui rend ce cas particulièrement intéressant d'un point de vue pédagogique, c'est la combinaison de facteurs impliqués :
Cette combinaison fait de CVE-2025-34096 un excellent cas pour enseigner les techniques de développement d'exploits dans un scénario d'attaque non authentifiée réaliste.
Easy File Sharing Web Server 7.2 est une application Windows légère conçue pour partager des fichiers via HTTP. Au-delà de la navigation de fichiers de base et des comptes utilisateurs, il inclut une fonctionnalité de récupération de mot de passe, un formulaire permettant aux utilisateurs de saisir leur adresse e-mail pour recevoir leurs identifiants oubliés.
Ce formulaire envoie vers /sendemail.ghp. Le gestionnaire qui traite le champ Email copie la valeur directement dans un tampon de pile à taille fixe sans vérification de longueur. Le point de terminaison ne nécessite aucune authentification, il n'y a donc rien entre un attaquant distant et le chemin de code vulnérable.
Détails techniques clés :
Easy File Sharing Web Server traite les requêtes HTTP POST dirigées vers /sendemail.ghp dans le cadre de sa fonctionnalité de notification par e-mail. Le paramètre Email accepté par ce point de terminaison est copié dans un tampon de pile local sans aucune vérification de longueur.
Une version simplifiée de la logique vulnérable ressemble à ceci :
char email_buffer[256];
strcpy(email_buffer, user_input);
Étant donné que le tampon de destination a une taille fixe et que la longueur de l'entrée n'est pas validée, l'envoi d'une chaîne suffisamment longue dans le champ Email entraîne une écriture au-delà de la fin du tampon.
À mesure que davantage de données sont écrites, la disposition de la pile devient corrompue. Contrairement à un simple écrasement d'adresse de retour, le dépassement atteint la chaîne Structured Exception Handler (SEH) stockée sur la pile. Lorsqu'une exception est déclenchée en raison de la pile corrompue, le système d'exploitation parcourt la chaîne SEH et transfère le contrôle à l'adresse du gestionnaire contrôlée par l'attaquant.
Le flux d'exploitation suit donc la technique d'écrasement SEH :
Cela rend la vulnérabilité plus complexe à exploiter qu'un simple écrasement d'EIP, mais aussi plus représentative des scénarios du monde réel.
Le crash peut être reproduit en envoyant une longue chaîne dans le paramètre Email d'une requête POST vers /sendemail.ghp. Aucune authentification n'est requise. Exemple en Python :
import socket
HOST = '127.0.0.1'
PORT = 80
request = (
'POST /sendemail.ghp HTTP/1.1\r\n'
'Email=' + 'A' * 5000 + '&getPassword=Get+Password'
).encode('utf-8')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
Lorsqu'il est exécuté sous un débogueur, le crash montre une chaîne SEH corrompue et une violation d'accès, confirmant que des données contrôlées par l'utilisateur ont écrasé le pointeur du gestionnaire d'exceptions.
L'objectif de ce dépôt n'est pas seulement de démontrer le crash, mais aussi de parcourir le processus d'exploitation complet étape par étape, en suivant la méthodologie utilisée lors du développement de véritables exploits basés sur SEH.
Pour garder le README principal propre, les notes d'exploitation détaillées, les scripts et les étapes de débogage 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, notamment :