È stata svelata una tecnica per sfruttare una vulnerabilità nel sottosistema tty del kernel Linux

I ricercatori del team di Google Project Zero hanno pubblicato un metodo per sfruttare una vulnerabilità (CVE-2020-29661) nell'implementazione del gestore ioctl TIOCSPGRP dal sottosistema tty del kernel Linux, e hanno anche esaminato in dettaglio i meccanismi di protezione che potrebbero bloccare tale vulnerabilità.

Il bug che causava il problema è stato risolto nel kernel Linux già il 3 dicembre dello scorso anno. Il problema appare nei kernel fino alla versione 5.9.13, ma la maggior parte delle distribuzioni ha risolto il problema negli aggiornamenti dei pacchetti del kernel proposti lo scorso anno (Debian, RHEL, SUSE, Ubuntu, Fedora, Arch). Una vulnerabilità simile (CVE-2020-29660) è stata trovata contemporaneamente nell'implementazione della chiamata ioctl TIOCGSID, ma è stata anche risolta ovunque.

Il problema è causato da un bug di blocco che provoca una race condition nel codice drivers/tty/tty_jobctrl.c, che potrebbe essere utilizzato per creare condizioni di accesso alla memoria use-after-free sfruttate dallo spazio utente tramite ioct-chiamando TIOCSPGRP. È stato dimostrato un exploit funzionante per l'escalation dei privilegi su Debian 10 con il kernel 4.19.0-13-amd64.

Allo stesso tempo, nell'articolo pubblicato, l'enfasi non è tanto sulla tecnica per creare un exploit funzionante, ma su quali strumenti esistono nel kernel per proteggersi da tali vulnerabilità. La conclusione non è incoraggiante, metodi come la segmentazione della memoria nell'heap e il controllo dell'accesso alla memoria dopo che è stata liberata non vengono utilizzati nella pratica, in quanto portano a una diminuzione delle prestazioni, e la protezione basata su CFI (Control Flow Integrity), bloccando gli exploit nelle fasi successive dell'attacco, necessita di miglioramenti.

Quando si considera cosa potrebbe fare la differenza nel lungo periodo, l'uso di analizzatori statici avanzati o l'uso di linguaggi sicuri per la memoria come Rust e dialetti C con annotazioni ricche (come Checked C) nella fase di costruzione dei controllori di stato spiccano serrature, oggetti e puntatori. Tra i metodi di protezione si citano anche l'attivazione della modalità panic_on_oops, il trasferimento delle strutture del kernel in modalità di sola lettura e la restrizione dell'accesso alle chiamate di sistema mediante meccanismi come seccomp.

Fonte: opennet.ru

Aggiungi un commento