
Heap overflow pre-autenticazione nel server SFTP Xlight <= 3.9.4.2
Xlight versioni a 32 e 64 bit <= 3.9.4.2
Un attaccante non autenticato con accesso a Xlight SFTP potrebbe ottenere l'esecuzione di codice o causare un denial of service.
Le stringhe inviate attraverso la rete nel protocollo SFTP sono precedute da una lunghezza di quattro byte. La funzione che Xlight utilizza per leggere queste stringhe dal pacchetto di rete presenta un overflow di interi quando convalida la lunghezza e quando alloca la quantità di memoria necessaria. Modificando la lunghezza di quattro byte di una stringa, possiamo innescare un ampio memmove (~4GB) da un buffer controllato dall'attaccante fuori dai limiti verso l'heap.
La funzione vulnerabile viene utilizzata per ricevere stringhe durante l'intero handshake SSH, inclusa la pre-autenticazione quando si ricevono algoritmi supportati, suite di cifratura e un nome utente e una password dal client. Possiamo prendere di mira una qualsiasi di queste stringhe con una lunghezza appositamente predisposta per innescare l'exploit.
È facile da innescare, ma la facilità di sfruttamento dipende dalla bitness del binario Xlight.
Sui sistemi a 32 bit, la copia uscirà dalla fine dell'heap, sovrascrivendo tutto nel processo, prima di causare un crash. È probabile che sia possibile corrompere una struttura adiacente nell'heap e sfruttare la natura multi-thread di questo server per accedere ai dati corrotti, prima che la copia incontrollata faccia crashare il processo.
Sui sistemi a 64 bit, non possiamo ottenere una scrittura OOB, perché l'argomento di dimensione per la chiamata di allocazione della memoria è un size_t (cioè largo 64 bit quando compilato per 64 bit), il che significa che non possiamo causare un overflow di questo valore con la somma di due interi a 32 bit, e invece ci limitiamo ad allocare un grande buffer di ~4GB. Questo bug provoca invece una lettura OOB, che fa crashare il processo.