Vulnerabilitatea în subsistemul eBPF care permite executarea codului la nivel de kernel Linux

O vulnerabilitate (CVE-2021-4204) a fost identificată în subsistemul eBPF, care vă permite să rulați handlere în interiorul nucleului Linux într-o mașină virtuală specială cu JIT, permițând unui utilizator local neprivilegiat să obțină escaladarea privilegiilor și să își execute codul la Nivelul nucleului Linux. Problema apare de la kernel-ul Linux 5.8 și rămâne nerezolvată (inclusiv versiunea 5.16). Starea actualizărilor care rezolvă problema în distribuții poate fi urmărită pe aceste pagini: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. S-a anunțat că a fost creat un exploit de lucru, care este planificat să fie publicat pe 18 ianuarie (utilizatorii și dezvoltatorii au avut o săptămână pentru a remedia vulnerabilitatea).

Vulnerabilitatea este cauzată de verificarea incorectă a programelor eBPF transmise pentru execuție. Subsistemul eBPF oferă funcții auxiliare, a căror utilizare corectă este verificată de un verificator special. Unele funcții necesită trecerea unei valori PTR_TO_MEM ca argument și pentru a preveni posibile depășiri ale buffer-ului, verificatorul trebuie să cunoască dimensiunea memoriei asociată cu argumentul. Pentru funcțiile bpf_ringbuf_submit și bpf_ringbuf_discard, datele despre dimensiunea memoriei transferate nu au fost raportate verificatorului, care ar putea fi utilizate pentru a suprascrie zonele de memorie dincolo de limita bufferului atunci când se executa codul eBPF special conceput.

Pentru a efectua un atac, utilizatorul trebuie să poată încărca propriul său program BPF, iar multe distribuții recente Linux blochează această capacitate în mod implicit (inclusiv accesul neprivilegiat la eBPF este acum interzis implicit în nucleul însuși, începând cu versiunea 5.16). De exemplu, vulnerabilitatea poate fi exploatată în configurația implicită în Ubuntu 20.04 LTS, dar în mediile Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 și Fedora 33 apare doar dacă administratorul a setat parametrul kernel.unprivileged_bpf_disabled la 0. Ca o soluție pentru blocarea vulnerabilității, puteți împiedica executarea programelor BPF de către utilizatorii neprivilegiați cu comanda „sysctl -w kernel.unprivileged_bpf_disabled=1”.

Sursa: opennet.ru

Adauga un comentariu