Sono state scoperte due vulnerabilità nel kernel Linux. Queste vulnerabilità sono simili alla vulnerabilità Copy Fail, resa pubblica alcuni giorni fa, ma interessano sottosistemi differenti: xfrm-ESP e RxRPC. Questa serie di vulnerabilità è stata denominata Dirty Frag (anche nota come Copy Fail 2). Tali vulnerabilità consentono a un utente non privilegiato di ottenere i privilegi di root sovrascrivendo i dati di processo nella cache di pagina. È disponibile un exploit che funziona su tutte le distribuzioni Linux attuali. La vulnerabilità è stata resa pubblica prima del rilascio delle patch, ma è disponibile una soluzione alternativa.
Dirty Frag copre due diverse vulnerabilità: la prima nel modulo xfrm-ESP, utilizzato per accelerare le operazioni di crittografia IPsec tramite il protocollo ESP (Encapsulating Security Payload), e la seconda nel driver RxRPC, che implementa la famiglia di socket AF_RXRPC e l'omonimo protocollo RPC, operante su UDP. Ciascuna vulnerabilità, considerata separatamente, consente di ottenere privilegi di root. La vulnerabilità di xfrm-ESP è presente nel kernel Linux da gennaio 2017, mentre quella di RxRPC da giugno 2023. Entrambi i problemi sono causati da ottimizzazioni che consentono scritture dirette nella cache di pagina.
Per sfruttare la vulnerabilità xfrm-ESP, l'utente deve disporre dell'autorizzazione per creare namespace, mentre per sfruttare la vulnerabilità RxRPC è necessario caricare il modulo del kernel rxrpc.ko. Ad esempio, in Ubuntu, le regole di AppArmor impediscono agli utenti non privilegiati di creare namespace, ma il modulo rxrpc.ko viene caricato di default. Alcune distribuzioni non dispongono del modulo rxrpc.ko, ma non bloccano la creazione di namespace. Il ricercatore che ha scoperto il problema ha sviluppato un exploit combinato in grado di attaccare il sistema attraverso entrambe le vulnerabilità, rendendo possibile lo sfruttamento del problema su tutte le principali distribuzioni. È stato confermato che l'exploit funziona su Ubuntu 24.04.4 con kernel 6.17.0-23, RHEL 10.1 con kernel 6.12.0-124.49.1, openSUSE Tumbleweed con kernel 7.0.2-1, CentOS Stream 10 con kernel 6.12.0-224, AlmaLinux 10 con kernel 6.12.0-124.52.3 e Fedora 44 con kernel 6.19.14-300.
Analogamente alla vulnerabilità Copy Fail, i problemi in xfrm-ESP e RxRPC sono causati dalla decrittazione dei dati in loco tramite la funzione splice(), che trasferisce i dati tra descrittori di file e pipe senza copiarli, passando riferimenti a elementi nella cache di pagina. Gli offset di scrittura venivano calcolati senza controlli adeguati per tenere conto dell'uso di riferimenti diretti a elementi nella cache di pagina, consentendo a richieste appositamente create di sovrascrivere 4 byte a un dato offset e modificare il contenuto di qualsiasi file nella cache di pagina.
Tutte le operazioni di lettura dei file recuperano prima il contenuto dalla cache di pagina. Se i dati nella cache di pagina vengono modificati, le operazioni di lettura dei file restituiranno dati sostituiti, non le informazioni effettivamente memorizzate sull'unità. Lo sfruttamento della vulnerabilità si riduce alla modifica della cache di pagina per un file eseguibile con il flag suid root. Ad esempio, per ottenere i privilegi di root, si potrebbe leggere il file eseguibile /usr/bin/su per inserirlo nella cache di pagina e quindi sostituire il proprio codice nel contenuto di questo file caricato nella cache di pagina. La successiva esecuzione dell'utility "su" comporterà il caricamento in memoria della copia modificata dalla cache di pagina, non del file eseguibile originale presente sull'unità.
La divulgazione della vulnerabilità e il rilascio coordinato delle patch erano previsti per il 12 maggio, ma a causa di una fuga di notizie, le informazioni sulla vulnerabilità dovettero essere pubblicate prima del rilascio delle patch. Alla fine di aprile, le patch per rxrpc, ipsec e xfrm furono inviate alla mailing list pubblica di netdev senza menzionare che erano correlate alla vulnerabilità. Il 5 maggio, il manutentore del sottosistema IPsec accettò una modifica al repository Git di netdev con una soluzione proposta per il modulo xfrm-esp. La descrizione della modifica era sostanzialmente identica alla descrizione del problema che aveva portato alla vulnerabilità Copy Fail nel modulo algif_aead. Un ricercatore di sicurezza si interessò a questa soluzione, riuscì a creare un exploit funzionante e lo pubblicò, ignaro del fatto che fosse stato imposto un embargo sulla divulgazione di informazioni sul problema fino al 12 maggio.
Gli aggiornamenti con correzioni per il kernel Linux e i pacchetti del kernel nelle distribuzioni non sono ancora stati pubblicati, ma sono disponibili patch che risolvono i problemi: xfrm-esp e rxrpc. Non sono stati assegnati identificatori CVE, il che complica il monitoraggio degli aggiornamenti dei pacchetti nelle distribuzioni. Come soluzione temporanea, è possibile bloccare il caricamento dei moduli del kernel esp4, esp6 e rxrpc: sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"
Fonte: opennet.ru
