Vulnerabilità nel sottosistema io_uring che consente di ottenere privilegi di root

Nel'interfaccia di input/output asincrono io_uring fornita dal kernel Linux è stata identificata una vulnerabilità (CVE-2024-0582) che consente a un utente non privilegiato di ottenere diritti di root sul sistema. Per sfruttare questa vulnerabilità è sufficiente un accesso locale comune al sistema, senza la necessità di manipolazioni degli spazi dei nomi. Attualmente è disponibile pubblicamente un exploit funzionante, e una seconda tecnica di sfruttamento della vulnerabilità è descritta dettagliatamente.

La vulnerabilità è causata dall'accesso a un blocco di memoria già liberato (use-after-free) nel sottosistema io_uring, che si verifica durante la registrazione e la liberazione di un buffer circolare creato con il flag IORING_REGISTER_PBUF_RING. Quando si applica un'operazione mmap() sul buffer, esso rimane riflesso nello spazio utente dopo l'esecuzione della sua liberazione (IORING_UNREGISTER_PBUF_RING). Utilizzando questa caratteristica, un attaccante può leggere e scrivere dati nelle pagine di memoria restituite dal sistema di allocazione della memoria del kernel.

Il problema si manifesta a partire dalla versione del kernel Linux 6.4 ed è stato risolto nelle versioni 6.7 e 6.6.5, nonché nel pacchetto del kernel 6.5.0-21, preparato per Ubuntu 22.04 e 23.10. È interessante notare che nel kernel principale il problema è stato corretto a dicembre 2023, il progetto Google Zero ha reso accessibile il messaggio di errore che segnala la vulnerabilità l'8 gennaio, e il pacchetto con il kernel corretto 6.5 per Ubuntu è stato creato solo il 22 febbraio 2024. Negli altri distribuzioni, la correzione e la vulnerabilità possono essere seguite sulle pagine: Debian, Gentoo, RHEL, SUSE, Fedora, Arch.

Il primo exploit manipola la creazione di un gran numero di pagine di memoria controllate dall'attaccante per determinare la disposizione della memoria nel kernel e accedere alle pagine fisiche di memoria adiacenti, utilizzando come segnali il contenuto di strutture di socket di rete riempite in un certo modo. Per eseguire il codice nell'exploit si utilizza un "gadgetto" (una sequenza di istruzioni esistenti nel kernel) che porta all'esecuzione della funzione call_usermodehelper_exec, destinata a avviare processi nello spazio utente dal kernel.

Il secondo exploit si basa sul fatto che, quando tutti i blocchi slab nella cache sono esauriti (ad esempio, quando un file viene aperto più volte), le pagine di memoria libere, a cui l'attaccante ha ancora accesso, vengono utilizzate dal sistema di allocazione della memoria per creare un nuovo blocco slab e tutte le nuove strutture di file iniziano a essere allocate in quel blocco. Di conseguenza, alcune strutture di file finiranno nelle pagine di memoria che l'attaccante può leggere e scrivere. L'exploitation si riduce quindi a organizzare l'ingresso del file desiderato nella cache dei file e a sostituire, nelle strutture di file correlate, il campo f_mode, che determina i diritti di accesso, consentendo di rendere scrivibile un file di sistema necessario, ad esempio, /etc/passwd.

Fonte: opennet.ru

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster