În nucleul Linux au fost identificate două vulnerabilități care permit utilizarea subsistemului eBPF pentru a ocoli protecția împotriva atacului Spectre v4 (SSB, Speculative Store Bypass). Prin intermediul unui program BPF neprivilegiat, un atacator poate crea condiții pentru executarea speculativă a anumitor operațiuni și poate determina conținutul unor zone ale memoriei nucleului. Subsistemele însoțitoare eBPF din nucleu au avut acces la un prototip de exploit care demonstrează posibilitatea de a efectua atacuri în practică. Problemele au fost remediate sub formă de patch-uri (1, 2), care vor fi incluse în următoarea actualizare a nucleului Linux. Actualizările în distribuții încă nu au fost pregătite (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).
Metoda atacului Spectre 4 se bazează pe recuperarea datelor care au fost stocate în cache-ul procesorului după abandonarea rezultatului execuției speculative a operațiunilor în cadrul procesării operațiunilor de scriere și citire alternative, folosind adresare indirectă. Atunci când operația de citire urmează unei operații de scriere (de exemplu, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), decalajul adresei pentru citire poate fi deja cunoscut din executarea unor operațiuni similare (operațiile de citire sunt efectuate semnificativ mai frecvent, iar citirea poate fi efectuată din cache) și procesorul poate să execute speculativ citirea înainte de scriere, fără a aștepta calcularea decalajului adresei indirecte pentru scriere.
Dacă, după calcularea decalajului, se constată o suprapunere a zonelor de memorie pentru scriere și citire, procesorul va abandona pur și simplu rezultatul citirii obținut speculativ și va repeta această operație. Această caracteristică permite instrucțiunii de citire să acceseze valoarea veche de la o anumită adresă în timp ce operația de salvare încă nu s-a finalizat. După abandonarea operației speculative eșuate, cache-ul rămâne cu urmele execuției sale, iar pentru extragerea acestora poate fi utilizată una dintre metodele de determinare a conținutului cache-ului pe baza analizei modificării timpului de acces la datele cache-uite și ne-cache-uite.
Prima vulnerabilitate (CVE-2021-35477) este cauzată de o lacună în mecanismul de verificare al programelor BPF. Pentru a se proteja împotriva atacului Spectre 4, verificatorul adaugă, după operațiunile potențial problematice de salvare în memorie, o instrucțiune suplimentară care salvează o valoare nulă pentru a elimina urmele operației anterioare. S-a presupus că operația de scriere a zero-ului se va executa foarte repede și va bloca executarea speculativă, deoarece depinde doar de pointerul pe cadrul stivei BPF. Dar, în realitate, s-au dovedit a fi posibile condiții în care instrucțiunea ce duce la executarea speculativă poate fi finalizată înainte de operația de salvare de eliminare.
A doua vulnerabilitate (CVE-2021-3455) este legată de faptul că atunci când verificatorul BPF detectează operații periculoase de salvare în memorie, nu se țin cont de zonele neinițializate ale stivei BPF, prima operație de scriere în care nu este protejată. Această particularitate permite realizarea unei operații de citire speculativă care depinde de o zonă de memorie neinițializată, înainte de a se executa instrucțiunea de salvare. Noua memorie pentru stiva BPF este alocată fără a verifica conținutul deja existent în memoria alocată, iar în stadiul anterior rularii programului BPF există o metodă de manipulare a conținutului zonei de memorie ce va fi alocată pentru stiva BPF.
Sursa: opennet.ro
