Vulnerabilità critica nell'implementazione della funzione memcpy per ARMv7 di Glibc

Ricercatori sulla sicurezza Cisco scoperto Dettagli vulnerabilità (CVE-2020-6096) nell'implementazione della funzione memcpy() fornita da Glibc per la piattaforma ARMv32 a 7 bit. Il problema è causato da un'errata gestione dei valori negativi del parametro che determina la dimensione dell'area copiata, dovuta all'utilizzo di ottimizzazioni di assembly che manipolano interi a 32 bit con segno. La chiamata a memcpy() su sistemi ARMv7 con una dimensione negativa comporta un confronto errato dei valori e scrive in un'area esterna ai limiti del buffer specificato.

La vulnerabilità può essere sfruttata per eseguire codice in una situazione in cui l'aggressore può organizzare la formazione di un valore negativo della variabile attraverso la quale viene trasmessa la dimensione dei dati copiati (ad esempio, diventerà negativo quando si trasferiscono più di 2 GB di dati dati, ma durante l'attacco, per oltrepassare i limiti del buffer, è necessario trasferirne almeno 4GB). La funzione memcpy() è ampiamente utilizzata nelle applicazioni e i processori ARMv7 sono comuni nei sistemi automobilistici, mobili, industriali, di consumo, di comunicazione e nei dispositivi integrati, che sono potenzialmente soggetti ad attacchi tramite Bluetooth, radio HD/DAB, USB, bus CAN, Wi-Fi Fi e altre fonti di dati esterne (ad esempio, possono essere attaccati servizi e applicazioni accessibili in rete che accettano dati in ingresso senza limiti di dimensione).

Un esempio è la creazione di un exploit funzionante per attaccare un server HTTP integrato nei sistemi informativi automobilistici, accessibile tramite la rete Wi-Fi dell'automobile. Un utente malintenzionato esterno potrebbe sfruttare una vulnerabilità memcpy su questo server inviando una richiesta GET di grandi dimensioni e ottenendo l'accesso root al sistema.

Vulnerabilità critica nell'implementazione della funzione memcpy per ARMv7 di Glibc

Sui sistemi x32 a 86 bit, il problema non si presenta, poiché l'implementazione memcpy per questa architettura interpreta correttamente la variabile size come un valore intero senza segno di tipo size_t (in linguaggio assembly implementazione per ARMv7 viene trattato come intero con segno anziché size_t). La correzione è attualmente disponibile come toppa, che sarà incluso nell'aggiornamento Glibc 2.32 di agosto.
La correzione si riduce alla sostituzione dell'uso delle istruzioni di assembly che operano su operandi con segno (bge e blt) con controparti senza segno (blo e bhs).

Il problema non è stato ancora risolto Debian 9 e 10 (non visibile in Debian 8), Fedora, Ubuntu, OpenEmbedded, Tizen (utilizzato da glibc). RHEL и SUSE Il problema non è interessato perché non supportano i sistemi ARMv32 a 7 bit. Android non è interessato dalla vulnerabilità perché utilizza la propria implementazione libc (Bionic). IN OpenWRT Per impostazione predefinita, la maggior parte delle build utilizza Musl, ma nel repository è disponibile anche glibc.

Fonte: opennet.ru

Aggiungi un commento