"utocit" je ponekud silne slovo, ale budiz.
Zranitelnost se spekulativni vykonavani kodu umozni zjistit, zda na adrese X se nachazi hodnota Y. Kdyz to udelate v cyklu, pro Y=0..255, tak muzete rict, ze dokazete precist pamet na adrese X.
A ted pozor: adresa X je z mnoziny VA, virtualnich adres procesu, ve kterem bezi "utocici" kod. Takze dokazete precist pouze to, co by jste precetl v unsafe skrze (char*)(adresa) - zadne tajemstvi tam nebyva* - pokud se nejedna treba o single-process browser, coz je to, co se patchovalo a stranky bezi ve vlastnich procesech na modernim browseru. Proste vlakno muze cist pamet jinych vlaken.. a k tomu nepotrebuji zranitelnost (konecne si to uvedomili i v sshd a bude rozdelen na ruzne casti s oddelenymi procesy).
A ted k te * - z duvodu vykonove optimalizace, je pamet pouzivana v kernelu porad mapovana do VA (proto napr. historicky na 32bit OS bylo rozdeleni 2GB/2GB nebo 3GB/1GB). V teto oblasti se uz muze nachazet neco zajimaveho - rekneme pri worst case neco jako klic k sifrovani disku. Pokud jste v user-mode, tak (char*)(adresa) na tyhle regiony nefunguje, protoze procesor pracuje spravne s izolaci co se tyce urovni opravneni, u spekulativniho vykonavani tohle nebylo kontrolovano a tak muze proces cist pamet jadra na kterem bezi.
A tu pamet jadra si to jadro vystavilo/zpristupnilo samo - a resi to patch pro KPTI/PTI - page table isolation, kdyz uz tedy procesor je deravy.
Ale zpet k problemu - ceho si myslite ze dosahnete, pokud budete mit neomezenou moznost pamet cist? Jak jsem zminoval, rezidentni bude klic k sifrovani disku.
Co by jste z pameti procesu/jadra precetl a jak toho vyuzil k nejake eskalaci prav ci RCE??