Společnost Google zveřejnila několik prototypů exploitů, které ukazují možnost zneužití zranitelností třídy Spectre při vykonávání JavaScriptového kódu v prohlížeči, obcházející dříve přidané ochranné mechanismy. Exploty mohou být použity k získání přístupu k paměti procesu, který zpracovává webový obsah na aktuální kartě. Pro testování funkcionality exploitu je spuštěna stránka leaky.page a kód s popisem logiky fungování je k dispozici na GitHubu.
Navrhovaný prototyp je určen k provedení útoku na systémy s procesory Intel Core i7-6500U v prostředí s Linuxem a Chrome 88. K použití exploitu v jiných prostředích je potřeba provést úpravy. Metoda zneužití není specifická pro procesory Intel — po příslušné adaptaci byla potvrzena funkčnost exploitu na systémech s CPU od jiných výrobců, včetně Apple M1 na bázi architektury ARM. Po drobných úpravách je exploit také funkční v dalších operačních systémech a v jiných prohlížečích založených na enginu Chromium.
V prostředí založeném na standardním Chrome 88 a procesorech Intel Skylake se podařilo dosáhnout úniku dat z procesu odpovědného za zpracování webového obsahu na aktuální kartě Chrome (renderer process) rychlostí 1 kilobajt za sekundu. Dále byly vyvinuty alternativní prototypy, například exploit, který umožňuje při snížení stability zvýšit rychlost úniku na 8kB/s při použití časovače performance.now() s přesností 5 mikrosekund (0,005 milisekundy). Také byl připraven variant, který funguje při přesnosti časovače na úrovni jedné milisekundy, a který mohl být použit pro organizaci přístupu k paměti jiného procesu rychlostí přibližně 60 bytů za sekundu.
Zveřejněný demonstrační kód se skládá ze tří částí. První část provádí kalibraci časovače pro odhadování času potřebného k dokončení operací, které jsou nezbytné pro obnovu dat, jež zůstala v procesorové cache v důsledku spekulativního vykonávání instrukcí CPU. Druhá část určuje rozložení paměti používané při alokaci pole JavaScript.
Třetí část přímo využívá zranitelnost Spectre k určení obsahu paměti aktuálního procesu tím, že vytváří podmínky pro spekulativní vykonávání určitých operací, jejichž výsledky jsou po určení neúspěšné předpovědi procesorem odmítnuty, ale stopy vykonávání zůstávají v společné mezipaměti a mohou být obnoveny pomocí metod určení obsahu mezipaměti prostřednictvím postranních kanálů, které analyzují změnu doby přístupu k mezipaměťovaným a nemězipaměťovaným datům.
Navrhovaná technika využití umožňuje obejít se bez vysoce přesných časovačů dostupných prostřednictvím API performance.now() a bez podpory typu SharedArrayBuffer, která umožňuje vytvářet pole v sdílené paměti. Exploit zahrnuje gadget Spectre, který vyvolává kontrolované spekulativní vykonávání kódu, a analyzátor úniku prostřednictvím postranních kanálů, který určuje do mezipaměti uložená data získaná během spekulativního vykonávání.
Gadget je realizován pomocí pole JavaScript, ve kterém se pokoušíme přistupovat k oblasti mimo hranice vyrovnávací paměti, což ovlivňuje stav bloku předpovídání přechodů kvůli přidané kontrole velikosti vyrovnávací paměti kompilátorem (procesor spekulativně provádí přístup předčasně, ale po kontrole se vrátí zpět). Pro analýzu obsahu mezipaměti za podmínek nedostatečné přesnosti časovače je navržen postup, který podvádí strategii vyřazování dat z mezipaměti Tree-PLRU použité v procesorech a umožňuje díky zvýšení počtu cyklů výrazně zvýšit rozdíl v čase při vrácení hodnoty z mezipaměti a v případě absence hodnoty v mezipaměti.
Je zmíněno, že společnost Google zveřejnila prototyp exploidu, aby ukázala realistický přístup k útokům využívajícím zranitelnosti třídy Spectre a aby stimulovala webové vývojáře k používání technik, které minimalizují rizika podobných útoků. Google však považuje za nemožné vytvořit univerzální exploity, které by byly připraveny nejen k demonstrování, ale i k širokému použití, bez zásadní přepracování navrženého prototypu.
Aby snížili riziko, se doporučuje majitelům webových stránek využívat v poslední době implementované hlavičky 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 a SameSite Cookie. Tyto mechanismy přímo nechrání před útoky, ale umožňují oddělit data webu od jejich úniku do procesů, ve kterých může být vykonáván JavaScriptový kód útočníka (únik se objevuje z paměti aktuálního procesu, ve kterém může kromě kódu útočníka běžet i data jiného webu otevřeného na stejné záložce). Hlavní myšlenkou je oddělit vykonávání kódu webu od cizího kódu pocházejícího z nedůvěryhodných zdrojů, například načítaného přes iframe.

Zdroj: opennet.ru
