O vulnerabilitate a fost identificată în nucleul Linux (CVE-2021-33624), care permite utilizarea subsistemului eBPF pentru ocolirea protecției împotriva vulnerabilităților de tip Spectre, oferind posibilitatea de a determina conținutul memoriei în urma creării de condiții pentru executarea speculativă a anumitor operațiuni. Atacul Spectre necesită existența într-un cod privilegiat a unei secvențe specifice de comenzi care conduc la executarea speculativă a instrucțiunilor. Prin manipularea programelor BPF transmise pentru executare, se poate genera astfel de instrucțiuni în eBPF, ceea ce poate duce la scurgeri de conținut al memoriei nucleului și al unor zone arbitrare ale memoriei fizice prin canale externe.
Vulnerabilitatea este cauzată de lacunele din verificatorul utilizat pentru identificarea erorilor și activității inacceptabile în programele BPF. Verificatorul evaluează posibilele căi de execuție ale codului, dar omite variantele de ramificare care sunt inacceptabile din punctul de vedere al semanticii arhitecturii setului de comenzi. În timpul execuției unui program BPF, astfel de variante de ramificare, neidentificate de verificator, pot fi greșit prezise de procesor și executate în mod speculativ. De exemplu, în analiza operației „load”, verificatorul presupune că instrucțiunea folosește un registru cu o adresă al cărei valoare se află întotdeauna în limitele specificate, însă un atacator poate crea condiții în care procesorul va încerca să execute speculativ operația cu o adresă care nu corespunde condițiilor de verificare.
Problema se manifestă începând cu lansarea nucleului 4.15 și a fost remediată sub formă de patch-uri (1, 2, 3, 4). În distribuțiile de sistem, vulnerabilitatea rămâne nerezolvată (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).
În plus, merită menționată observația asupra impactului asupra performanței soluțiilor de protecție împotriva vulnerabilităților de tip Spectre. Nota rezumă rezultatele optimizării debuggerului rr (Record and Replay), creat inițial în Mozilla pentru a depana erorile difícil de reprodus în Firefox. Cache-ul apelurilor de sistem utilizate pentru a verifica existența directoarelor a permis reducerea timpului de execuție al operației „rr sources” pentru un proiect de testare de la 3 minute 19 secunde la 36 de secunde.
Autorul optimizării a decis să verifice cât de mult va crește performanța după dezactivarea protecției împotriva Spectre. După încărcarea sistemului cu parametrul „mitigations=off”, timpul de execuție „rr sources” fără optimizare a fost de 2 minute și 5 secunde (de 1,6 ori mai rapid), iar cu optimizare — 33 de secunde (cu 9% mai rapid). Interesant este că dezactivarea protecției împotriva Spectre nu doar că a redus timpul de execuție a codului la nivel de nucleu de 1,4 ori (de la 2m9s la 1m32s), ci și a înjumătățit timpul de execuție în spațiul utilizatorului (de la 1m9s la 0m33s), probabil din cauza scăderii eficienței muncii cache-ului CPU și a resetărilor TLB când protecția împotriva Spectre este activată.
Sursa: opennet.ro
