A Google közzétett néhány prototípust az exploitokhoz, amelyek bemutatják a Spectre osztályú sebezhetőségek kihasználásának lehetőségét JavaScript kód futtatásakor a böngészőben, a korábban bevezetett védelmi módszerek megkerülésével. Az exploitok hozzáférést biztosíthatnak a webtartalmat feldolgozó folyamat memóriájához az aktuális fülön. Az exploit működésének tesztelésére a leaky.page weboldalt indították el, a logikai működésről pedig a GitHub-on található a kód.
A javasolt prototípus arra van tervezve, hogy támadást hajtson végre az Intel Core i7-6500U processzorral rendelkező rendszereken Linux és Chrome 88 környezetében. Más környezetekhez az exploit alkalmazásához változtatásokat kell végrehajtani. A kihasználás módszere nem specifikus az Intel processzorokra — megfelelő alkalmazás után más gyártók CPU-jain is megerősítették az exploit működését, beleértve az ARM architektúrára épülő Apple M1-t is. Kis mértékű módosítások után az exploit más operációs rendszerekben és Chromium alapú böngészőkben is működőképes.
Az alapértelmezett Chrome 88 és Intel Skylake processzorokra épülő környezetben sikerült adatokat kiszivárogtatni a Chrome aktuális fülén a webtartalom feldolgozásáért felelős folyamatból (renderer process) 1 kilobájt másodpercenként. Továbbá alternatív prototípusokat is kidolgoztak, például egy exploitot, amely a stabilitás csökkentése árán lehetővé teszi a kiszivárgás sebességének 8 kB/s-ra történő növelését a performance.now() 5 mikrosecond pontos időzítő használatával (0,005 milliszekundum). Készült egy változat is, amely másodperces időzítőpontossággal működött, és körülbelül 60 bájt másodpercenkénti memóriához való hozzáférést tett lehetővé egy másik folyamatban.
A közzétett demonstrációs kód három részből áll. Az első rész a timer kalibrálására szolgál, hogy felmérje a műveletek végrehajtásának idejét, amelyek szükségesek az CPU spekulatív végrehajtásának eredményeként a processzor cache-ben megmaradt adatok helyreállításához. A második rész meghatározza a memória elrendezését, amely a JavaScript tömb elhelyezésére szolgál.
A harmadik rész közvetlenül kihasználja a Spectre sebezhetőséget a текущ процесс memória tartalmának meghatározására, olyan körülmények létrehozása révén, amelyek spekulatív végrehajtást tesznek lehetővé bizonyos műveletek esetében, amelyeknek az eredményét a processzor elveti a sikertelen előrejelzés meghatározása után, de a végrehajtás nyomai a közös cache-ben maradnak, és helyreállíthatók a cache tartalmának külső csatornákon történő meghatározásával, amelyek elemzik a hozzáférési idő változását a cache-elt és a nem cache-elt adatokhoz.
A javasolt kihasználási technika lehetővé teszi, hogy ne legyen szükség pontos időzítőkre, amelyeket a performance.now() API-n keresztül lehet elérni, és nem igényli a SharedArrayBuffer típust, amely lehetővé teszi a megosztott memóriában tárolt tömbök létrehozását. Az exploit tartalmazza a Spectre gadgetot, amely kontrollált spekulatív kódvégrehajtást idéz elő, és egy csatornaelemzőt, amely meghatározza a spekulatív végrehajtás során a cache-be került adatokat.
A gadget egy JavaScript tömb segítségével valósul meg, amely megpróbál hozzáférni a puffertartomány határain kívüli területhez, befolyásolva a branch prediction végeredményét a fordító által hozzáadott pufferméret-ellenőrzés miatt (a processzor spekulatívan végrehajtja a hívást, de az állapotot visszaállítja az ellenőrzés után). A cache tartalmának elemzésére, a nem pontos időzítő körülményei között, egy módszert javasoltak, amely kijátssza a processzorokban használt adatkihúzási stratégiát, a Tree-PLRU-t, és lehetővé teszi a ciklusok számának növelésével jelentős időbeli eltérés növelését a cache-ből származó érték visszaadásakor és amikor az érték nem található a cache-ben.
Megjegyzendő, hogy a Google publikált egy exploit prototípust, hogy bemutassa a Spectre osztályú sebezhetőségek kihasználásának realitását, és ösztönözze a webfejlesztőket, hogy olyan technikákat alkalmazzanak, amelyek minimalizálják az ilyen támadások kockázatait. A Google úgy véli, hogy a javasolt prototípus jelentős átdolgozása nélkül nem lehet általános exploitokat létrehozni, amelyek nemcsak demonstrálásra, hanem széleskörű alkalmazásra is alkalmasak.
A webmasters are advised to use recent headers such as Cross-Origin Opener Policy (COOP), Cross-Origin Embedder Policy (COEP), Cross-Origin Resource Policy (CORP), Fetch Metadata Request, X-Frame-Options, X-Content-Type-Options, and SameSite Cookie to reduce risks. These mechanisms do not directly protect against attacks but help isolate website data from leaking into processes where malicious JavaScript code may be executed (leakage occurs from the memory of the current process, which may handle data from another site open in the same tab alongside the attacker's code). The main idea is to separate the execution of the website's code in different processes from third-party code obtained from unreliable sources, such as that included via iframe.

Forrás: opennet.ru
