Vulnerabilità nel sotto-sistema pidfd di Linux che consente di leggere file non accessibili all'utente

Nel kernel di Linux è stata identificata una quinta vulnerabilità critica (1, 2, 3) nelle ultime due settimane, che consente a un utente di elevare i propri privilegi nel sistema. Sono stati pubblicati due exploit funzionanti: sshkeysign_pwn permette a un utente non privilegiato di leggere il contenuto delle chiavi SSH host protette in /etc/ssh/ssh_host_*_key, mentre chage_pwn consente di leggere il contenuto del file /etc/shadow con gli hash delle password degli utenti.

Le informazioni sulla vulnerabilità non erano pianificate per la divulgazione, ma uno dei ricercatori sulla sicurezza è riuscito a identificare la natura della vulnerabilità basandosi su una patch proposta per il kernel, la quale permette di leggere file accessibili solo all'utente root, come ad esempio /etc/shadow. Nella modifica apportata al kernel è stata corretta la logica di utilizzo della funzione get_dumpable() in ptrace durante la determinazione del livello di accesso nella funzione ptrace_may_access().

La vulnerabilità è direttamente causata da una condizione di race che consente l'accesso non privilegiato a un descrittore di file pidfd dopo aver aperto un file dal processo suid root. Nel momento tra l'apertura del file e il ripristino dei privilegi nel programma suid (ad esempio, tramite la funzione setreuid), si verifica una situazione in cui l'applicazione che ha avviato il programma suid root può accedere, tramite il descrittore pidfd, a un file aperto nel programma suid, anche se i diritti di accesso sul file non lo consentono.

La finestra per l'esploitazione si presenta perché la funzione "__ptrace_may_access()" salta il controllo della possibilità di accesso al file se il campo task->mm è impostato su NULL dopo l'esecuzione di exit_mm(), ma prima della chiamata a exit_files(). In quel momento la chiamata di sistema pidfd_getfd assume che l'identificatore utente (uid) del processo chiamante corrisponda all'identificatore a cui è consentito l'accesso al file. È interessante notare che il problema era stato già segnalato nel 2020, ma è rimasto irrisolto.

Nell'exploit che ottiene il contenuto di /etc/shadow, l'attacco consiste nel lanciare ciclicamente tramite fork+execl l'applicazione /usr/bin/chage con il flag suid root, che legge il contenuto di /etc/shadow. Dopo che il processo è stato biforcato, viene eseguita la chiamata di sistema pidfd_open e viene attuato un ciclo di scansione dei descrittori pidfd disponibili tramite la chiamata di sistema pidfd_getfd e la loro verifica tramite /proc/self/fd. Nell'exploit sshkeysign_pwn manovre simili vengono effettuate con il programma suid root ssh-keysign.

Al momento non è stato assegnato identificatore CVE al problema, e non sono stati pubblicati aggiornamenti del kernel e dei pacchetti nelle distribuzioni. Nei kernel rilasciati poche ore fa, 7.0.7, 6.18.30 e 6.12.88, la vulnerabilità non è stata risolta. Al momento della scrittura dell'ultimo aggiornamento, è possibile utilizzare solo una patch. Sono in discussione possibili soluzioni per bloccare la vulnerabilità, come impostare sysctl kernel.yama.ptrace_scope=3 o rimuovere il flag suid root dai file eseguibili nel sistema (almeno per gli strumenti ssh-keysign e chage utilizzati negli exploit).

Aggiornamento: La vulnerabilità ha ricevuto l'identificatore CVE-2026-46333. Sono stati formati aggiornamenti del kernel Linux 7.0.8, 6.18.31, 6.12.89, 6.6.139, 6.1.173, 5.15.207 e 5.10.256 con la vulnerabilità corretta. Lo stato della correzione delle vulnerabilità nelle distribuzioni può essere valutato su queste pagine: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch, Fedora.

Fonte: opennet.ru

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