În subsistemul eBPF, care permite rularea handler-elor pentru urmărirea, analiza funcționării subsistemelor și gestionarea traficului, efectuate în interiorul nucleului Linux într-o mașină virtuală specială cu JIT, a fost descoperită o vulnerabilitate (CVE-2021-29154) care permite unui utilizator local să execute cod la nivel de nucleu. Problema se manifestă până la versiunea 5.11.12 (inclusiv) și nu a fost încă corectată în distribuțiile (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). Corectarea este disponibilă sub formă de patch.
Conform declarațiilor cercetătorilor care au identificat vulnerabilitatea, aceștia au reușit să dezvolte un prototip funcțional de exploit pentru sistemele x86 de 32 și 64 de biți, care poate fi utilizat de utilizatori fără privilegii. În acest context, compania Red Hat menționează că gravitatea problemei depinde de disponibilitatea apelului de sistem eBPF pentru utilizator. De exemplu, în RHEL și în majoritatea altor distribuții Linux, în configurația implicită, vulnerabilitatea poate fi exploatată dacă BPF JIT este activat și utilizatorul dispune de drepturile CAP_SYS_ADMIN. Ca măsură de precauție, se recomandă dezactivarea BPF JIT folosind comanda: echo 0 > /proc/sys/net/core/bpf_jit_enable
Problema este cauzată de o eroare de calcul a deplasării pentru instrucțiunile de branșare în timpul generării codului mașină de către compilatorul JIT. În special, în timpul generării instrucțiunilor de branșare, nu se ia în considerare faptul că deplasarea se poate schimba după etapa de optimizare. Această deficiență poate fi exploatată pentru a genera cod mașină anormal și a-l executa la nivel de nucleu.
Este notabil că aceasta nu este singura vulnerabilitate din subsistemul eBPF în ultima vreme. La sfârșitul lunii martie, în nucleu au fost identificate încă două vulnerabilități (CVE-2020-27170, CVE-2020-27171), care oferă posibilitatea de a folosi eBPF pentru a ocoli protecția împotriva vulnerabilităților de tip Spectre, permițând determinarea conținutului memoriei nucleului ca urmare a creării condițiilor pentru executarea speculativă a anumitor operațiuni. Pentru o atac Spectre este necesară existența unei secvențe specifice de instrucțiuni în codul privilegiat, care conduc la execuția speculativă a instrucțiunilor. În eBPF au fost găsite mai multe modalități de generare a unor astfel de instrucțiuni prin manipularea programelor BPF transmise pentru execuție.
Vulnerabilitatea CVE-2020-27170 este generată de prezența unor manipulări cu pointere în verificatorul BPF, care cauzează operații speculative de acces la zone dincolo de limitele bufferului. Vulnerabilitatea CVE-2020-27171 este legată de o eroare de aritmetică întreagă (integer underflow) în manipularea pointerelor, ceea ce duce la accesul speculativ la date în afara bufferului. Problemele menționate au fost deja remediate în versiunile nucleului 5.11.8, 5.10.25, 5.4.107, 4.19.182 și 4.14.227, iar acestea au fost incluse în actualizările nucleului majorității distribuțiilor Linux. Cercetătorii au pregătit un prototip de exploat care permite unui utilizator fără privilegii să extragă date din memoria nucleului.
Sursa: opennet.ro
