Una vulnerabilità è stata individuata nel kernel di Linux, simile alle vulnerabilità Copy Fail, Dirty Frag e Fragnesia, che consente a un utente non privilegiato di ottenere diritti di root sovrascrivendo i dati nella cache di pagina. La vulnerabilità è stata codificata con il nome DirtyDecrypt (il problema è anche conosciuto come DirtyCBC). È disponibile un prototipo di exploit.
Nell'annuncio dell'exploit non è menzionato alcun identificatore CVE, si indica solo che i ricercatori hanno scoperto il problema il 9 maggio, dopo di che hanno informato gli sviluppatori del kernel, che hanno risposto che la loro scoperta duplicava un'altra segnalazione su una vulnerabilità già corretta. Poiché la patch correttiva è già stata inclusa nel kernel, i ricercatori hanno deciso di pubblicare l'exploit che hanno sviluppato. A giudicare dalla descrizione all'interno dell'exploit, sembra utilizzare la vulnerabilità CVE-2026-31635, la cui correzione è stata accettata nel kernel ad aprile ed è inclusa nella versione 7.0.0 e nella release 6.18.23 formata il 18 aprile. Il problema si manifesta a partire dal kernel 6.16.
Come nel caso della serie di vulnerabilità Dirty Frag, la nuova vulnerabilità è presente nel driver RxRPC, che implementa la famiglia di socket AF_RXRPC e il protocollo RPC omonimo, che opera sopra UDP. Il problema è causato da un errore nel controllo della dimensione dei dati nella funzione rxgk_verify_response() — invece di controllare "if (auth_len > len)", il codice ha scritto "if (auth_len < len)", portando a passare alla funzione rxgk_decrypt_skb() dati di dimensioni superiori a quelle consentite. Durante l'esecuzione della funzione rxgk_decrypt_skb(), la decrittazione dei dati avveniva sostituendo le modifiche direttamente nella cache di pagina per evitare ulteriore buffering. A causa del controllo errato della dimensione, era possibile sovrascrivere i dati nella cache di pagina a uno spostamento scelto.
Sfruttare la vulnerabilità implica leggere il file di un programma con il flag suid root (per collocarlo nella cache di pagina) e sostituire parte del codice del programma nella cache di pagina con codice per eseguire \/usr\/bin\/sh. L'esecuzione successiva del programma porterà a caricare in memoria non il file eseguibile originale dal supporto, ma una copia modificata dalla cache di pagina. Come programmi suid, nell'exploit è prevista la possibilità di utilizzare "\/usr\/bin\/su", "\/bin\/su", "\/usr\/bin\/mount", "\/usr\/bin\/passwd" e "\/usr\/bin\/chsh".
Per sfruttare la vulnerabilità, l'opzione CONFIG_RXGK deve essere attiva durante la compilazione del kernel, e il modulo del kernel rxrpc.ko deve essere disponibile per l'avvio automatico (in alcuni sistemi potrebbe non essere compilato). Lo stato della correzione delle vulnerabilità nei vari distribuzioni può essere valutato sulle seguenti pagine: Debian, Ubuntu, SUSE/openSUSE, RHEL, Arch, Fedora. Come soluzione temporanea di protezione, è possibile bloccare il caricamento del modulo del kernel rxrpc:
sh -c "printf 'install rxrpc /bin/false\n' > /etc/modprobe.d/dirtydecrypt.conf; rmmod rxrpc 2>/dev/null; true"
Inoltre, si può notare la pubblicazione sulla mailing list degli sviluppatori del kernel Linux di patch che disabilitano completamente nel crypto API (AF_ALG) le ottimizzazioni che utilizzano l'accesso diretto alla cache delle pagine durante la decrittazione utilizzando gli algoritmi "skcipher" e "aead". Le ottimizzazioni escludono una buffering eccessiva dei dati, ma creano rischi di gravi vulnerabilità. Si presume che la loro disattivazione porterà solo a una lieve diminuzione delle prestazioni a causa dell'aggiunta di un'operazione di copia in un buffer separato. I patch sono stati accettati dal mantenitore del sottosistema crypto API e sono stati inclusi nel ramo "cryptodev", dove si stanno sviluppando le possibilità per l'inclusione nelle versioni future del kernel Linux.
Fonte: opennet.ru
