To kernelet Linux er der identificeret to sårbarheder, der gør det muligt at udnytte eBPF-subsystemet til at omgå beskyttelsen mod Spectre v4-angreb (SSB, Speculative Store Bypass). Ved hjælp af et privilegeret BPF-program kan en angriber skabe betingelserne for spekulativ udførelse af bestemte operationer og bestemme indholdet af vilkårlige dele af kernelens hukommelse. De tilhørende eBPF-subsystemer i kernen har fået adgang til en eksploiteringsprototype, der demonstrerer muligheden for at udføre angreb i praksis. Problemerne er blevet løst i form af patches (1, 2), der vil blive inkluderet i den kommende opdatering af Linux-kernen. Opdateringer i distributionerne er endnu ikke blevet dannet (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).
Spectre 4-angrebsmethoden er baseret på at genoprette data, der er blevet gemt i processorens cache, efter at resultatet af den spekulative udførelse af operationer er blevet kasseret, når der behandles vekslende skrive- og læseoperationer ved hjælp af indirekte adressering. Når en læseoperation følger efter en skriveoperation (f.eks. mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), kan adressens offset til læsningen allerede være kendt som følge af udførelsen af lignende operationer (læseoperationerne udføres betydeligt oftere, og læsning kan udføres fra cachen), og processoren kan spekulativt udføre læsningen før skrivningen, uden at vente på, at offsettet til den indirekte adressering for skrivningen beregnes.
Hvis der efter beregningen af offsettet opdages et overlap mellem hukommelsesområderne for skrivning og læsning, vil processoren blot kassere det allerede spekulativt opnåede læseresultat og gentage denne operation. Denne egenskab gør det muligt for læseinstruktionen at få adgang til den gamle værdi ved en given adresse, mens skrivningen stadig ikke er afsluttet. Efter at have kasseret den mislykkede spekulative operation, vil der være spor af dens udførelse i cachen, hvorefter en af metoderne til at bestemme indholdet af cachen kan anvendes baseret på analysen af ændringer i adgangstiden til cachede og ikke-cachede data.
Den første sårbarhed (CVE-2021-35477) skyldes en mangel i kontrolmekanismen for BPF-programmer. For at beskytte mod Spectre 4 tilføjer kontrolleren efter potentielt problematiske operationslagring i hukommelsen en ekstra instruktion, der gemmer en nulværdi for at eliminere sporene fra den tidligere operation. Det var antaget, at nulskriveoperationen ville blive udført meget hurtigt og blokere for spekulativ udførelse, da den kun afhænger af pointeren til BPF-stack-rammen. Men i praksis viste det sig muligt at skabe betingelser, hvor instruktionen, der fører til spekulativ udførelse, når at blive udført før eliminationslagringen.
Den anden sårbarhed (CVE-2021-3455) relaterer til, at når BPF-verificatoren identificerer potentielt farlige operationslagringer i hukommelsen, tages der ikke højde for ikke-initialiserede områder af BPF-stakken, hvor den første skrivning ikke er beskyttet. Denne egenskab muliggør en spekulativ læseoperation, der er afhængig af det ikke-initialiserede hukommelsesområde, før instruktionen til lagring udføres. Ny hukommelse til BPF-stakken tildeles uden at kontrollere indholdet, der allerede findes i den tildelte hukommelse, og på stadiet før BPF-programmet køres er der en måde at styre indholdet af det hukommelsesområde, som senere vil blive tildelt til BPF-stakken.
Kilde: opennet.ru
