È stata identificata una quinta vulnerabilità critica (1, 2, 3) nel kernel Linux 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 private /etc/ssh/ssh_host_*_key, mentre chage_pwn consente di leggere il contenuto del file /etc/shadow contenente gli hash delle password degli utenti.
Le informazioni sulla vulnerabilità non erano programmate per essere rivelate, ma uno dei ricercatori di sicurezza è stato in grado di identificare la natura della vulnerabilità, basandosi sulla patch proposta per il kernel, la quale consente di leggere file accessibili solo all'utente root, come /etc/shadow. Nella modifica apportata al kernel, è stata corretta la logica sull'uso della funzione get_dumpable() in ptrace per determinare il livello di accesso nella funzione ptrace_may_access().
La vulnerabilità è causata da una condizione di competizione, che porta a una possibilità di accesso non privilegiato a un file descriptor pidfd dopo aver aperto un file da un processo suid root. Nel momento fra l'apertura del file e il ripristino dei privilegi nel programma suid (ad esempio, tramite la funzione setreuid), si crea una situazione in cui l'applicazione che ha avviato un programma suid root può accedere, tramite il descriptor pidfd, a un file aperto nel programma suid, anche se ciò non è consentito dai diritti di accesso al file.
La finestra per lo sfruttamento si presenta perché la funzione "__ptrace_may_access()" salta il controllo della capacità 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 questo momento, la syscall pidfd_getfd ritiene che l'identificatore utente (uid) del processo chiamante corrisponda a quello a cui è consentito l'accesso al file. È interessante notare che in precedenza, questa problematica era stata sollevata nel 2020, ma non è stata mai risolta.
Nell'exploit che ottiene il contenuto di /etc/shadow, l'attacco si riduce a eseguire ciclicamente l'applicazione /usr/bin/chage con il flag suid root, che legge il contenuto di /etc/shadow. Dopo che il processo è stato forkato, viene effettuata una chiamata di sistema pidfd_open e viene eseguita una scansione ciclica dei descrittori pidfd disponibili tramite la chiamata di sistema pidfd_getfd e il loro controllo attraverso /proc/self/fd. Nell'exploit sshkeysign_pwn, manipolazioni simili vengono effettuate con il programma suid root ssh-keysign.
Al momento non è stato assegnato alcun identificatore CVE al problema e non sono state pubblicate aggiornamenti del kernel e dei pacchetti per le distribuzioni. Negli aggiornamenti rilasciati poche ore fa, nelle versioni 7.0.7, 6.18.30 e 6.12.88, la vulnerabilità non è stata corretta. Al momento della scrittura di questa notizia, è possibile utilizzare solo una patch. Sono in discussione possibili workaround 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 usati negli exploit).
Nota: La vulnerabilità ha ricevuto l'identificativo CVE-2026-46333. Sono stati rilasciati 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 per risolvere la vulnerabilità. 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
