În subsistemul eBPF, care permite rularea handler-elor în cadrul nucleului Linux într-o mașină virtuală specială cu JIT, a fost descoperită o vulnerabilitate (CVE-2021-4204) care le permite utilizatorilor locali fără privilegii să obțină creșterea privilegiilor și să execute codul lor la nivelul nucleului Linux. Problema apare începând cu nucleul Linux 5.8 și rămâne nerezolvată (afectează de asemenea versiunea 5.16). Starea actualizărilor pentru remedierea problemei în distribuții poate fi urmărită pe aceste pagini: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. S-a raportat crearea unui exploit funcțional, care se preconizează că va fi publicat pe 18 ianuarie (utilizatorii și dezvoltatorii au primit 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 corectitudine este verificată de un validator specializat. Unele funcții necesită transmiterea valorii PTR_TO_MEM ca argument, iar pentru a preveni posibilele depășiri de buffer, validatorul trebuie să cunoască dimensiunea memoriei asociate argumentului. Pentru funcțiile bpf_ringbuf_submit și bpf_ringbuf_discard, informațiile despre dimensiunea memoriei transmise nu au fost comunicate validatorului, ceea ce ar putea fi folosit pentru a suprascrie regiuni de memorie în afara bufferului în timpul executării unui cod eBPF special conceput.
Pentru a desfășura un atac, utilizatorul trebuie să aibă capacitatea de a încărca propria sa programă BPF, iar multe distribuții Linux recente blochează implicit această posibilitate (de asemenea, accesul fără privilegii la eBPF este acum interzis implicit în nucleu, începând cu versiunea 5.16). De exemplu, vulnerabilitatea poate fi exploatată în configurația implicită în Ubuntu 20.04 LTS, dar în medii precum Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 și Fedora 33 se manifestă doar dacă administratorul a setat parametrul kernel.unprivileged_bpf_disabled la 0. Ca o soluție de contornare a blocării vulnerabilității, se poate interzice execuția programelor BPF de către utilizatorii fără privilegii cu comanda „sysctl -w kernel.unprivileged_bpf_disabled=1”.
Sursa: opennet.ro
