Débordement de tampon basé sur SEH dans Easy File Sharing Web Server 7.2 démontrant comment un paramètre HTTP POST authentifié peut corrompre la chaîne de gestion des exceptions.
Débordement de tampon basé sur SEH dans Easy File Sharing Web Server 7.2 montrant comment un paramètre HTTP POST authentifié peut corrompre la chaîne de gestion des exceptions.
Ce dépôt fait partie du matériel que j'utilise pour enseigner l'exploitation des corruptions mémoire (en plus de mon travail habituel, 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-2018-18912 est le cas que j'utilise pour passer des écrasements directs de l'EIP à l'exploitation basée sur SEH. Une fois que les étudiants comprennent comment fonctionne un écrasement direct d'adresse de retour, l'étape suivante consiste à comprendre ce qui se produit lorsque la pile est tellement corrompue que le programme déclenche une exception avant de revenir, et comment cette chaîne de gestionnaires d'exceptions devient alors la surface d'attaque. Cette CVE illustre clairement cette transition : le débordement est suffisamment profond pour atteindre la chaîne SEH, et le chemin d'exploitation suit la technique classique POP POP RETN que tout développeur d'exploit doit maîtriser. La contournement optionnel de la DEP via ROP est laissé comme exercice pour les étudiants qui souhaitent aller plus loin — le même débordement, une stratégie de gadgets différente, un problème beaucoup plus difficile.
Cette vulnérabilité affecte Easy File Sharing Web Server 7.2, une application serveur web légère pour Windows largement utilisée pour le partage simple de fichiers. Le logiciel a été écrit sans tenir compte des mesures de sécurité modernes. Ce qui rend ce cas particulièrement intéressant d'un point de vue pédagogique, c'est la combinaison des facteurs impliqués :
Cette combinaison fait de CVE-2018-18912 un excellent cas pour enseigner les techniques de développement d'exploits au-delà des bases.
Easy File Sharing Web Server 7.2 est une application Windows qui permet aux utilisateurs de partager des fichiers via HTTP. Elle inclut des fonctionnalités telles que la navigation de fichiers, l'authentification des utilisateurs et un système de forum intégré.
La fonctionnalité de forum accepte les requêtes POST pour créer de nouveaux sujets. L'un des champs de formulaire gérés par ce point d'entrée est le paramètre author. En interne, l'application copie cette valeur contrôlée par l'utilisateur dans un tampon de pile de taille fixe sans valider la longueur.
La vulnérabilité a été découverte et signalée en 2018. La PoC originale a été publiée peu après, démontrant à la fois le crash et une chaîne d'exploitation fonctionnelle incluant des gadgets ROP du module ImageLoad.dll fourni.
Détails techniques clés :
Easy File Sharing Web Server traite les requêtes HTTP POST adressées à /forum.ghp lorsqu'un utilisateur crée un nouveau sujet de forum. L'un des paramètres acceptés est author, qui est copié dans un tampon de pile local sans aucune vérification de longueur.
En rétro-ingénierie du binaire, on peut observer que le gestionnaire de ce champ de formulaire utilise un tampon de taille fixe et une opération de copie non sécurisée. Une version simplifiée de la logique vulnérable ressemble à ceci :
char author_buffer[64];
strcpy(author_buffer, user_input);
Comme 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 author provoque 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ébordement atteint la chaîne du gestionnaire d'exceptions structuré (SEH) stockée sur la pile. Lorsqu'une exception est déclenchée à la suite de la corruption de la pile, 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 de l'EIP, mais aussi plus représentative des scénarios réels.
Le crash peut être reproduit en envoyant une longue chaîne dans le paramètre author d'une requête POST vers /forum.ghp après s'être authentifié avec des identifiants valides. Exemple en Python :
import socket
HOST = '127.0.0.1'
PORT = 80
payload = b"A" * 500
request = (
b"POST /forum.ghp?forumid=1 HTTP/1.1\r\n"
b"Host: 127.0.0.1\r\n"
b"Content-Type: application/x-www-form-urlencoded\r\n"
b"Cookie: UserID=test; PassWD=test; SESSIONID=1234\r\n"
b"Connection: close\r\n"
b"\r\n"
b"author=" + payload + b"&passwd=test&title=test&content=test&Submit=Submit\r\n"
)
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 les 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 l'ensemble du processus d'exploitation étape par étape, en suivant la méthodologie utilisée lors du développement d'exploits SEH réels.
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 workflow complet utilisé pour exploiter cette CVE, comprenant :