A Linux kernelben két sebezhetőséget azonosítottak, amelyek lehetővé teszik az eBPF alrendszer használatát a Spectre v4 (SSB, Speculative Store Bypass) támadások védelmének megkerülésére. Egy nem privilegizált BPF-program segítségével a támadó olyan körülményeket teremthet, amelyek kedveznek bizonyos műveletek spekulatív végrehajtásának, és meghatározhatja a kernel véletlenszerű memóriahelyeinek tartalmát. Az eBPF alrendszerek a kernelben hozzáfértek egy exploid prototípusához, amely megmutatja a valóságos támadások lehetőségét. A problémákat javító javításokat (1, 2) készítettek, amelyek a legközelebbi Linux kernel frissítés részeként kerülnek bevezetésre. A disztribúciókban az aktualizálások még nem készültek el (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).
A Spectre 4 támadási módszer azon alapul, hogy helyreállítja a CPU cache-be került adatokat a spekulatív végrehajtás eredményének elvetése után, amikor váltakozó írási és olvasási műveletek végrehajtásakor közvetett címzést használnak. Amikor az olvasási művelet megelőzi az írási műveletet (például: mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), az olvasásra vonatkozó cím eltolása már ismert lehet a hasonló műveletek végrehajtása miatt (az olvasási műveletek jelentősen gyakrabban történnek, így az olvasás a cache-ből is végrehajtható), és a processzor spekulatívan végre tudja hajtani az olvasást az írás előtt, anélkül, hogy megvárná a közvetett címzés eltolásának kiszámítását az írásra.
Ha az eltolás kiszámítása után átfedést észlelnek az írási és olvasási memóriahelyek között, a processzor egyszerűen elveti a már spekulatívan nyert olvasási eredményt, és megismétli ezt a műveletet. Ez a jellemző lehetővé teszi, hogy az olvasási utasítás hozzáférjen egy korábbi értékhez egy adott címen, amíg a mentési művelet még nem zárult le. A sikertelen spekulatív művelet elvetése után a cache-ben bizonyítékok maradnak a végrehajtásról, ezért a cache tartalmának meghatározására alkalmazható egy olyan módszer, amely az elérések időbeli változásának elemzésére épül, a cache-elt és nem cache-elt adatok között.
Az első sebezhetőség (CVE-2021-35477) a BPF programok ellenőrzésének mechanizmusában tapasztalt hiányosságból adódik. A Spectre 4 támadás ellen a verifikáló egy nullértékű írási utasítást ad hozzá a potenciálisan problémás memóriába írási műveletek után, hogy elnyomja az előző művelet maradványait. Feltételezték, hogy a nullázási művelet nagyon gyorsan végrehajtható, és blokkolja a spekulatív végrehajtást, mivel csak a BPF veremkeret mutatójától függ. Valójában azonban létrejött olyan környezet, amely lehetővé tette, hogy az előre spekulatív végrehajtásra vezető utasítások végrehajtódjanak a háttérmentés művelete előtt.
A második sebezhetőség (CVE-2021-3455) abból adódik, hogy a BPF verifikáló által azonosított potenciálisan veszélyes memóriába írási műveletek esetén nem veszik figyelembe a nem inicializált BPF veremterületeket, ahol az első írási művelet nincs védve. Ez a jellemző lehetővé teszi, hogy spekulatív olvasási művelet történjen, amely a nem inicializált memória területtől függ, mielőtt a mentési utasítás végrehajtódna. Az új memória a BPF veremhez ellenőrzés nélkül kerül kiosztásra, a már meglévő tartalomra vonatkozóan, és a BPF program elindítása előtt van mód a memória terület tartalmának befolyásolására, amelyet később a BPF verem számára fognak kiosztani.
Forrás: opennet.ru
