V systému Linux byly odhaleny dvě zranitelnosti, které umožňují využití subsystému eBPF k obcházení ochrany proti útoku Spectre v4 (SSB, Speculative Store Bypass). Pomocí nespouštěné BPF programu může útočník vytvořit podmínky pro spekulativní provádění určitých operací a určit obsah libovolných oblastí paměti jádra. Přidružené subsystémy eBPF v jádře získaly přístup k prototypu exploitu, který demonstruje možnost provádění útoků v praxi. Problémy byly vyřešeny pomocí záplat (1, 2), které budou součástí nejbližší aktualizace jádra Linux. Aktualizace v distribucích zatím nebyla vytvořena (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).
Metoda útoku Spectre 4 se zakládá na obnově dat, která zůstala v procesorovém cache po zahození výsledku spekulativního provádění operací při zpracování střídajících se operací zápisu a čtení s použitím nepřímé adresace. Když operace čtení následuje po operaci zápisu (například, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), může být posun adresy pro čtení již známý díky provádění podobných operací (operace čtení se provádějí výrazně častěji a čtení může být provedeno z cache) a procesor může spekulativně provést čtení dříve než zápis, aniž by čekal na výpočet posunu nepřímé adresace pro zápis.
Pokud po výpočtu posunu dojde k překrývání oblastí paměti pro zápis a čtení, procesor jednoduše zahození již spekulativně získaného výsledku čtení a tuto operaci zopakuje. Tato vlastnost umožňuje instrukci čtení přistupovat ke staré hodnotě na určité adrese, dokud operace zápisu ještě nebyla dokončena. Po zahození neúspěšné spekulativní operace zůstávají v cache stopy jejího provádění, přičemž pro její vytažení může být použit jeden z metod určení obsahu cache na základě analýzy změn času přístupu k cacheovaným a necacheovaným datům.
První zranitelnost (CVE-2021-35477) je způsobena nedostatkem v mechanismu kontroly BPF programů. Aby se zabránilo útoku Spectre 4, přidává ověřovatel po potenciálně problematických operacích ukládání do paměti další instrukci, která ukládá nulovou hodnotu, aby zamaskovala stopy předchozí operace. Předpokládalo se, že operace zápisu nuly proběhne velmi rychle a zablokuje spekulativní vykonávání, protože závisí pouze na ukazateli na rámec zásobníku BPF. Ale ve skutečnosti se ukázalo, že je možné vytvořit podmínky, za kterých se instrukce vedoucí k spekulativnímu vykonávání stihne provést před operací zamaskovaného ukládání.
Druhá zranitelnost (CVE-2021-3455) souvisí s tím, že při zjišťování potenciálně nebezpečných operací ukládání do paměti ověřovatelem BPF se nezohledňují neinitializované oblasti zásobníku BPF, přičemž první operace zápisu není chráněna. Tato zvláštnost umožňuje provádění spekulativní operace čtení závislé na neinitializované oblasti paměti před provedením instrukce ukládání. Nová paměť pro BPF zásobník je alokována bez kontroly obsahu již existujícího v alokované paměti, a před spuštěním BPF programu existuje způsob, jak řídit obsah oblasti paměti, která bude následně alokována pro zásobník BPF.
Zdroj: opennet.ru
