În kernelul Linux a fost identificată a cincea vulnerabilitate critică în ultimele două săptămâni, care permite unui utilizator să își crească privilegii în sistem. Au fost publicate două exploit-uri funcționale: sshkeysign_pwn permite unui utilizator fără privilegii să citească conținutul cheilor SSH private ale gazdelor din /etc/ssh/ssh_host_*_key, iar chage_pwn — să citească conținutul fișierului /etc/shadow cu hash-urile parolelor utilizatorilor.
Informațiile despre vulnerabilitate nu erau planificate pentru dezvăluire, dar un cercetător în securitate, pe baza patch-ului propus pentru kernel, a reușit să identifice natura vulnerabilității, care permite citirea fișierelor accesibile doar utilizatorului root, de exemplu, /etc/shadow. În modificarea adăugată în kernel, a fost corectată logica utilizării funcției get_dumpable() în ptrace la determinarea nivelului de acces în funcția ptrace_may_access().
Vulnerabilitatea este cauzată de o condiție de competiție, care duce la posibilitatea accesului neprivilegiat la descriptorul de fișier pidfd după accesarea fișierului dintr-un proces suid root. În momentul dintre deschiderea fișierului și resetarea privilegiilor în programul suid (de exemplu, prin funcția setreuid), apare o situație în care aplicația care a lansat programul suid root poate accesa fișierul deschis în programul suid prin descriptorul pidfd, chiar dacă drepturile de acces la fișier nu permit acest lucru.
Feronologarea exploatării apare deoarece funcția «__ptrace_may_access()» sări verificarea capacității de acces la fișier, dacă câmpul task->mm este setat la NULL după execuția exit_mm(), dar înainte de apelul exit_files(). În acel moment, apelul de sistem pidfd_getfd consideră că identificatorul de utilizator (uid) al procesului apelant corespunde identificatorului care are permisiunea de a accesa fișierul. Este remarcabil că problema a fost semnalată și în 2020, dar a rămas nerezolvată.
În exploit-ul care obține conținutul /etc/shadow, atacul constă în lansarea ciclică prin fork+execl a aplicației /usr/bin/chage cu flag-ul suid root, care citește conținutul /etc/shadow. După ce procesul este bifurcat, se execută apelul de sistem pidfd_open și se realizează o iterație ciclică a descriptorilor pidfd disponibili prin apelul de sistem pidfd_getfd și verificarea acestora prin /proc/self/fd. În exploit-ul sshkeysign_pwn, manevre similare sunt realizate cu programul suid root ssh-keysign.
CVE identificatorul problemei nu a fost încă atribuit, actualizările pentru kernel și pachete în distribuții nu au fost publicate. În kernel-urile lansate acum câteva ore, 7.0.7, 6.18.30 și 6.12.88, vulnerabilitatea nu a fost remediată. La momentul redactării acestei știri, se poate folosi doar un patch. Se discută despre posibile soluții pentru blocarea vulnerabilității, cum ar fi setarea sysctl kernel.yama.ptrace_scope=3 sau eliminarea etichetei suid root de pe fișierele executabile din sistem (cel puțin de la utilitarele ssh-keysign și chage, folosite în exploate).
Actualizare: Vulnerabilității i-a fost atribuit identificatorul CVE-2026-46333. Au fost formulate actualizări pentru kernel-ul Linux 7.0.8, 6.18.31, 6.12.89, 6.6.139, 6.1.173, 5.15.207 și 5.10.256 cu remedierea vulnerabilității. Statutul remedierii vulnerabilităților în distribuții poate fi evaluat pe aceste pagini: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch, Fedora.
Sursa: opennet.ro
