
Buffer overflow basato su stack in Sync Breeze Enterprise 10.0.28 raggiungibile attraverso il gestore /login, dimostrando come una lunghezza di input non controllata possa corrompere la memoria dello stack.
Buffer overflow basato su stack in Sync Breeze Enterprise 10.0.28 raggiungibile tramite il gestore /login, che dimostra come una lunghezza di input non controllata possa corrompere la memoria dello stack.
Questo repository fa parte del materiale che utilizzo quando insegno lo sfruttamento della corruzione della memoria (oltre al mio lavoro regolare, insegno anche in diversi corsi di cybersecurity in cui aiuto a formare la prossima generazione di reverse engineer).
CVE-2017-14980 è un caso che utilizzo quando voglio che gli studenti sperimentino una sovrascrittura EIP semplice su HTTP piuttosto che su un protocollo TCP grezzo. Sembra semplice all'inizio, un modulo di login, una password lunga, un crash, ma il contesto HTTP introduce una serie di caratteri dannosi che non sono immediatamente ovvi e che costringono gli studenti a pensare a come i dati vengono elaborati prima di raggiungere il buffer vulnerabile. Capire perché %, &, + e = sono caratteri dannosi qui richiede la comprensione della codifica URL, che è una lezione utile di per sé.
Sync Breeze Enterprise è un'applicazione Windows di sincronizzazione file che espone un'interfaccia di gestione web. La vulnerabilità risiede nel gestore di login, che copia il campo password in un buffer dello stack di dimensione fissa senza validazione della lunghezza. Ciò che rende questo caso utile per l'insegnamento:
Sync Breeze Enterprise è uno strumento di sincronizzazione file per Windows che include un server web integrato per la gestione remota. L'interfaccia web ascolta sulla porta TCP 80 quando abilitata ed espone un modulo di login su /login. La vulnerabilità risiede nel gestore POST che elabora il campo password.
Dettagli tecnici chiave:
Sync Breeze elabora il modulo di login leggendo il corpo POST ed estraendo il campo password. Il valore viene copiato in un buffer dello stack di dimensione fissa senza controllarne la lunghezza. Una versione semplificata della logica vulnerabile si presenta così:
char password_buffer[256];
strcpy(password_buffer, password_field);
Il corpo POST viene decodificato URL prima che avvenga la copia, il che significa che caratteri come %25 vengono decodificati in % prima di raggiungere il buffer. Questo è anche il motivo per cui alcuni caratteri speciali URL agiscono come caratteri dannosi, vengono interpretati dal livello HTTP prima che i dati raggiungano l'operazione di copia vulnerabile. Inviare un valore della password sufficientemente lungo fa sì che la copia scriva oltre la fine del buffer, sovrascrivendo l'indirizzo di ritorno salvato. Quando la funzione ritorna, la CPU carica il valore controllato dall'attaccante dallo stack in EIP e vi salta.
Il crash può essere riprodotto inviando una password sovradimensionata in una richiesta POST a /login. Non è richiesta alcuna autenticazione. Esempio usando Python:
import socket
HOST = '127.0.0.1'
PORT = 80
payload = b"A" * 600
body = b"username=admin&password=" + payload
request = (
b"POST /login HTTP/1.1\r\n"
b"Host: 127.0.0.1\r\n"
b"Content-Type: application/x-www-form-urlencoded\r\n"
b"Content-Length: " + str(len(body)).encode() + b"\r\n"
b"Connection: close\r\n"
b"\r\n" +
body
)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
Quando eseguito sotto un debugger, il crash mostra EIP sovrascritto con dati controllati dall'utente:
EIP = 41414141
confermando che l'indirizzo di ritorno salvato è stato corrotto dall'overflow.
L'obiettivo di questo repository non è solo dimostrare il crash, ma anche illustrare l'intero processo di sfruttamento passo dopo passo, dal fuzzing a una reverse shell funzionante.
Per mantenere pulito il README principale, le note dettagliate di sfruttamento, gli script e i passaggi del debugger sono inseriti nella cartella Vulnerability 📂 di questo repository.
Lì troverai il flusso di lavoro completo utilizzato per sfruttare questa CVE, tra cui: