
Buffer overflow basato su SEH in Easy File Sharing Web Server 7.2 che dimostra come un parametro autenticato di una richiesta HTTP POST possa corrompere la catena degli exception handler.
Overflow del buffer basato su SEH in Easy File Sharing Web Server 7.2 che dimostra come un parametro HTTP POST autenticato possa corrompere la catena dei gestori di eccezioni.
Questo repository fa parte del materiale che utilizzo quando insegno lo sfruttamento delle corruzioni di memoria (oltre al mio lavoro regolare, insegno anche in diversi corsi di cybersecurity dove aiuto a formare la prossima generazione di reverse engineer).
CVE-2018-18912 è il caso che uso per fare il salto dalla sovrascrittura classica di EIP allo sfruttamento basato su SEH. Una volta che gli studenti capiscono come funziona la sovrascrittura diretta dell'indirizzo di ritorno, il passo successivo è capire cosa succede quando lo stack è così corrotto che il programma genera un'eccezione prima di ritornare, e come quella catena di gestori di eccezioni diventi la superficie d'attacco alternativa. Questa CVE dimostra chiaramente questa transizione: l'overflow è abbastanza profondo da raggiungere la catena SEH, e il percorso di sfruttamento segue la classica tecnica POP POP RETN che ogni sviluppatore di exploit deve comprendere. Il bypass facoltativo del DEP tramite ROP è lasciato come estensione per gli studenti che vogliono andare oltre: lo stesso overflow, una diversa strategia di gadget, un problema molto più difficile.
Questa vulnerabilità interessa Easy File Sharing Web Server 7.2, un'applicazione leggera di web server per Windows ampiamente utilizzata per la semplice condivisione di file. Il software è stato scritto senza tenere conto delle mitigazioni di sicurezza moderne. Ciò che rende questo caso particolarmente interessante dal punto di vista didattico è la combinazione di fattori coinvolti:
Questa combinazione rende CVE-2018-18912 un caso eccellente per insegnare tecniche di sviluppo exploit oltre le basi.
Easy File Sharing Web Server 7.2 è un'applicazione Windows che consente agli utenti di condividere file tramite HTTP. Include funzionalità come l'esplorazione dei file, l'autenticazione degli utenti e un sistema di forum integrato.
La funzionalità del forum accetta richieste POST per creare nuove discussioni. Uno dei campi del modulo gestiti da questo endpoint è il parametro author. Internamente, l'applicazione copia questo valore controllato dall'utente in un buffer dello stack di dimensioni fisse senza validarne la lunghezza.
La vulnerabilità è stata scoperta e segnalata nel 2018. Il PoC originale è stato pubblicato poco dopo, dimostrando sia il crash che una catena di exploit funzionante, inclusi i gadget ROP del modulo ImageLoad.dll incluso nel pacchetto.
Dettagli tecnici principali:
Easy File Sharing Web Server elabora le richieste HTTP POST dirette a /forum.ghp quando un utente crea una nuova discussione nel forum. Uno dei parametri accettati è author, che viene copiato in un buffer locale dello stack senza alcun controllo di lunghezza.
Quando si esegue il reversing del binario, si può osservare che l'handler per questo campo del modulo utilizza un buffer di dimensioni fisse e un'operazione di copia non sicura. Una versione semplificata della logica vulnerabile è la seguente:
char author_buffer[64];
strcpy(author_buffer, user_input);
Poiché il buffer di destinazione ha una dimensione fissa e la lunghezza dell'input non viene validata, l'invio di una stringa sufficientemente lunga nel campo author fa sì che la copia scriva oltre la fine del buffer.
Con l'aumentare dei dati scritti, la struttura dello stack si corrompe. A differenza di una semplice sovrascrittura dell'indirizzo di ritorno, l'overflow raggiunge la catena dello Structured Exception Handler (SEH) memorizzata sullo stack. Quando viene generata un'eccezione a causa dello stack corrotto, il sistema operativo percorre la catena SEH e trasferisce il controllo all'indirizzo dell'handler controllato dall'attaccante.
Il flusso di sfruttamento segue quindi la tecnica di sovrascrittura SEH:
Ciò rende la vulnerabilità più complessa da sfruttare rispetto a una semplice sovrascrittura di EIP, ma anche più rappresentativa degli scenari del mondo reale.
Il crash può essere riprodotto inviando una stringa lunga nel parametro author di una richiesta POST a /forum.ghp dopo aver effettuato l'autenticazione con credenziali valide. Esempio utilizzando 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()
Quando viene eseguito sotto un debugger, il crash mostra una catena SEH corrotta e una violazione di accesso, confermando che i dati controllati dall'utente hanno sovrascritto il puntatore al gestore di eccezioni.
L'obiettivo di questo repository non è solo dimostrare il crash, ma anche guidare attraverso l'intero processo di sfruttamento passo dopo passo, seguendo la metodologia utilizzata nello sviluppo di exploit reali basati su SEH.
Per mantenere pulito il README principale, le note dettagliate sullo sfruttamento, gli script e i passaggi del debugger sono inseriti nella cartella Vulnerability 📂 di questo repository.
Qui troverai il flusso di lavoro completo utilizzato per sfruttare questa CVE, tra cui: