
Un ricercatore di sicurezza ha scoperto e pubblicato un exploit per OpenBSD che sfrutta una falla nel kernel risalente a 37 anni fa, combinata con un difetto più recente. L'attacco permette l'escalation dei privilegi a root, aggirando le protezioni di sistema.
Un'analisi approfondita condotta da ricercatori di sicurezza ha portato alla luce una vulnerabilità critica nel sistema operativo OpenBSD, che consente a un attaccante locale di ottenere privilegi di root. L'exploit sfrutta una combinazione di due difetti nel kernel, uno dei quali affonda le sue radici in un bug presente nel codice sorgente originale di BSD, risalente a ben 37 anni fa.
La vulnerabilità principale deriva da un integer overflow in un contatore chiamato shm_nattch, utilizzato per gestire i segmenti di memoria condivisa. Questo contatore, definito come un intero a 16 bit con segno fin dal 1988, poteva contenere un valore massimo di 32.767. OpenBSD ha ereditato questa definizione senza modificarla. Un attaccante può manipolare questo contatore portandolo oltre il suo limite, ad esempio creando 127 segmenti di memoria condivisa e avviando 259 processi tramite fork. Quando il contatore supera il valore massimo, va in overflow e assume un valore negativo. Questo scenario, in combinazione con una race condition, porta a una vulnerabilità di tipo use-after-free: il kernel tenta di liberare memoria che è ancora in uso da altri processi.
Il secondo difetto, che si innesta sul primo, consiste in una scrittura fuori dai limiti (out-of-bounds write) che sovrascrive i contatori di appartenenza multicast nel kernel. Quando il socket interessato viene chiuso, le modifiche ai contatori alterano le voci della page table, consentendo a un utente non privilegiato di accedere alla memoria del kernel con privilegi elevati. Questo meccanismo aggira le protezioni hardware come SMAP (Supervisor Mode Access Prevention) e SMEP (Supervisor Mode Execution Prevention), sfruttando errori nella gestione della memoria del kernel piuttosto che attaccando direttamente l'hardware.
L'exploit è particolarmente insidioso perché riesce a bypassare alcune delle difese più robuste di OpenBSD, tra cui la randomizzazione degli indirizzi del kernel (KARL) e le già citate protezioni hardware SMAP e SMEP. KARL, che dovrebbe rendere imprevedibili gli indirizzi delle funzioni e dei dati nel kernel ad ogni avvio, non è sufficiente in questo caso. I ricercatori hanno scoperto che, nonostante la randomizzazione del kernel, gli allocatori di memoria del kernel rimangono deterministici. Ciò significa che le allocazioni all'inizio del processo di avvio avvengono in posizioni prevedibili, specialmente sull'hardware.
L'exploit sfrutta questa prevedibilità prendendo di mira i gestori delle interfacce lo0 e enc0. Queste strutture sono posizionate dal kernel sempre negli stessi indirizzi, permettendo all'attaccante di sovrascrivere un puntatore per ottenere l'esecuzione del codice e utilizzarne un altro per ripristinare il puntatore sovrascritto in modo pulito. È importante notare che questo attacco non richiede alcuna vulnerabilità di information disclosure per funzionare.
I ricercatori hanno utilizzato metriche di allocazione della memoria del kernel, accessibili tramite sysctl, per monitorare le allocazioni in tempo reale e identificare la creazione di nuove pagine, effettuando di fatto un'analisi del layout dell'heap dalla userland. Hanno poi allineato le allocazioni dei socket IP e impostato un'opzione TTL multicast per posizionare una struttura dati persistente nel punto desiderato, vincendo la race condition tramite l'invio di IPC_RMID in un processo mentre un processo ausiliario agganciava un segmento di memoria condivisa con dimensioni errate.
Fortunatamente, OpenBSD ha già rilasciato le patch per entrambe le vulnerabilità a settembre. La correzione per l'integer overflow è stata distribuita con l'errata 018 il 14 settembre, mentre quella per la use-after-free è arrivata con l'errata 026 il 30 settembre. Entrambe sono disponibili tramite il comando syspatch e coprono tutte le architetture.
I ricercatori di Calif hanno anche suggerito quattro miglioramenti di sicurezza che potrebbero rendere attacchi simili molto più difficili o impossibili:
Al momento della pubblicazione, non ci sono prove che queste specifiche falle siano state sfruttate attivamente in natura, e non è stato ancora assegnato un numero CVE a nessuna delle due problematiche.
Contenuto generato automaticamente da intelligenza artificiale a partire da fonti pubbliche. Non garantiamo l'accuratezza assoluta delle informazioni: consulta sempre la fonte originale. I diritti sui contenuti originali appartengono ai rispettivi editori.