O vulnerabilitate a fost identificată în API-ul Filesystem Context furnizat de nucleul Linux (CVE-2022-0185), care permite unui utilizator local să obțină drepturi root în sistem. Cercetătorul care a descoperit problema a publicat o demonstrație a exploatului care permite executarea codului cu drepturi root pe Ubuntu 20.04 în configurația implicită. Codul exploatat este planificat să fie plasat pe GitHub în decurs de o săptămână, după ce distribuțiile vor lansa o actualizare care să remedieze vulnerabilitatea.
Vulnerabilitatea este prezentă în funcția legacy_parse_param() din VFS și este cauzată de lipsa unei verificări adecvate a mărimii maxime a parametrilor furnizați în sistemele de fișiere care nu suportă API-ul Filesystem Context. Atunci când este transmis un parametru prea mare, se poate produce o depășire a variabilei întregi utilizate pentru calcularea dimensiunii datelor scrise — în cod există o verificare a depășirii limitei buferei „if (len > PAGE_SIZE - 2 - size)”, care nu funcționează dacă valoarea size este mai mare decât 4094 din cauza depășirii întregului prin defectul inferior (integer underflow, deoarece conversia 4096 - 2 - 4095 la unsigned int va da 2147483648).
Această eroare permite, prin accesarea unei imagini FS special concepute, o depășire a buferei și suprascrierea datelor nucleului următoare zonei de memorie alocate. Pentru a exploata vulnerabilitatea, sunt necesare drepturi CAP_SYS_ADMIN, adică privilegii de administrator. Problema este că un utilizator fără privilegii poate obține astfel de drepturi într-un container izolat, dacă sistemul are activată suportul pentru spațiile de nume de identificatori de utilizatori (user namespaces). De exemplu, user namespaces sunt activate implicit în Ubuntu și Fedora, dar nu sunt activate în Debian și RHEL (cu excepția utilizării platformelor de izolare a containerelor).
Problema se manifestă începând cu nucleul Linux 5.1 și a fost rezolvată în actualizările de ieri 5.16.2, 5.15.16, 5.10.93, 5.4.173. Actualizările pachetelor pentru remedierea vulnerabilității au fost deja lansate pentru RHEL, Debian, Fedora, Ubuntu. Remedierea nu este încă disponibilă în Arch Linux, Gentoo, SUSE și openSUSE. Ca o măsură temporară de protecție pentru sistemele care nu folosesc izolare prin containere, se poate seta valoarea sysctl „user.max_user_namespaces” la 0: echo „user.max_user_namespaces=0” > /etc/sysctl.d/userns.conf # sysctl -p /etc/sysctl.d/userns.conf
Sursa: opennet.ro
