Vulnerabilitatea în subsistemul Linux Netfilter kernel

O vulnerabilitate (CVE-2021-22555) a fost identificată în Netfilter, un subsistem al nucleului Linux utilizat pentru filtrarea și modificarea pachetelor de rețea, care permite unui utilizator local să obțină privilegii de root pe sistem, inclusiv în timp ce se află într-un container izolat. Un prototip funcțional al unui exploit care ocolește mecanismele de protecție KASLR, SMAP și SMEP a fost pregătit pentru testare. Cercetătorul care a descoperit vulnerabilitatea a primit o recompensă de 20 USD de la Google pentru identificarea unei metode de a ocoli izolarea containerelor Kubernetes într-un cluster kCTF.

Problema există încă de la kernel-ul 2.6.19, lansat în urmă cu 15 ani, și este cauzată de o eroare în handlerele IPT_SO_SET_REPLACE și IP6T_SO_SET_REPLACE care provoacă o depășire a memoriei tampon la trimiterea unor parametri special formatați printr-un apel setsockopt în modul compat. În circumstanțe normale, numai utilizatorul rădăcină poate efectua un apel la compat_setsockopt(), dar privilegiile necesare pentru a efectua atacul pot fi obținute și de un utilizator neprivilegiat pe sisteme cu suport pentru spații de nume de utilizator activat.

Un utilizator poate crea un container cu un utilizator root separat și poate exploata vulnerabilitatea de acolo. De exemplu, „spațiile de nume de utilizator” este activată implicit pe Ubuntu și Fedora, dar nu este activată pe Debian și RHEL. Patch-ul care remediază vulnerabilitatea a fost adoptat în nucleul Linux pe 13 aprilie. Actualizările pachetelor au fost deja generate de proiectele Debian, Arch Linux și Fedora. În Ubuntu, RHEL și SUSE, actualizările sunt în pregătire.

Problema apare în funcția xt_compat_target_from_user() din cauza unui calcul incorect al dimensiunii memoriei la salvarea structurilor kernelului după conversia de la reprezentarea de 32 de biți la 64 de biți. Bug-ul permite scrierea a patru octeți nuli în orice poziție dincolo de buffer-ul alocat delimitat de offset 0x4C. Această caracteristică s-a dovedit a fi suficientă pentru a crea un exploit care a permis obținerea drepturilor root - prin ștergerea indicatorului m_list->next din structura msg_msg, au fost create condiții pentru accesarea datelor după eliberarea memoriei (use-after-free), care a fost apoi folosit pentru a obține informații despre adrese și modificări ale altor structuri prin manipularea apelului de sistem msgsnd().

Sursa: opennet.ru

Adauga un comentariu