Ci sono informazioni sull'impatto di CVE-2016-1907 (openSSH)?

3

Ho appena visto la notifica di CVE-2016-1907 questa mattina:

The ssh_packet_read_poll2 function in packet.c in OpenSSH before 7.1p2 allows remote attackers to cause a denial of service (out-of-bounds read and application crash) via crafted network traffic.

Non riesco a trovare altre informazioni al di fuori della nota generale nelle note sulla versione :

SECURITY: Fix an out of-bound read access in the packet handling
code. Reported by Ben Hawkes.

Chromium non mi consente di visualizzare le modifiche nel repository di origine (certificato scaduto più HSTS) quindi non ho ancora provato a cercare la patch stessa.

Qualcuno ha pubblicato qualche analisi di questo difetto? Per lo meno vorrei sapere se interessa il client, il server o entrambi (ad esempio se qualcuno senza un account potrebbe eseguire un server arbitrario).

    
posta drewbenn 25.01.2016 - 20:31
fonte

1 risposta

3

Questa è una buona domanda. Ho esaminato questo problema due settimane fa perché era fuori. Questo bug è apparso per la prima volta in openssh-6.8 in commit refactoring . Fondamentalmente il problema è che è stata sostituita la funzione che ha chiamato exit() con la funzione che restituisce solo il valore di errore.

if (state->packlen < 1 + 4 ||
    state->packlen > PACKET_MAX_SIZE) {
#ifdef PACKET_DEBUG
    sshbuf_dump(state->input, stderr);
#endif
    logit("Bad packet length %u.", state->packlen);
    if ((r = sshpkt_disconnect(ssh, "Packet corrupt")) != 0)
        return r;
    return SSH_ERR_CONN_CORRUPT; /* <-- this line was added */
}
sshbuf_reset(state->incoming_packet);

Come puoi vedere nel contesto di versione corrente (istantanea sopra ), questo ramo gestisce le lunghezze del pacchetto errate (inferiori a 5 B e maggiori di PACKET_MAX_SIZE ). Questa condizione ha generato un messaggio di errore, un pacchetto disconnesso e dovrebbe essere restituito. Ma il sshpkt_disconnect() avrebbe potuto fallire e, a questo punto, l'esecuzione del codice avrebbe continuato a funzionare ulteriormente, gestendo i buffer ricevuti dall'altro peer come validi, senza controlli aggiuntivi. Il codice viene utilizzato sia sul server che sul client.

Come vedi, la gravità CVSS è molto inferiore a altro CVE rilasciato con la stessa versione. Per sfruttare con successo questo bug, dovresti creare un pacchetto che soddisfi le condizioni (lunghezza errata), assicurarti che sshpkt_disconnect() fallisca (chiudi il socket?) E ti aspetti ciecamente che le cose malvagie accadano. La superficie di attacco è molto più limitata e meno investigata rispetto a CVE-2016-0778, dove era persino la prova del concetto con il server creato.

Si noti inoltre che openSSH implementa la separazione dei privilegi sul server, il che darebbe fondamentalmente solo l'eventuale esecuzione di codice nel child net limitato nella sandbox. D'altra parte, è possibile utilizzare l'esecuzione del codice sul lato client utilizzando il server malevolo predisposto, ma al prezzo della disconnessione del client. Probabilmente l'utente sarebbe sospettoso, ma non gli script ( autossh , rsync jobs e simili).

    
risposta data 25.01.2016 - 22:50
fonte

Leggi altre domande sui tag