Nehodné opravy vedly k neúplnému odstranění zranitelnosti Spectre v jádře Linux

Vývojáři projektu Grsecurity se podělili o poučný příběh, který ilustruje, jak nepromyšlené odstranění varování kompilátoru může vést k vzniku zranitelností v kódu. Na konci května bylo pro jádro Linux navrženo opravení nového exploitačního vektoru zranitelnosti Spectre prostřednictvím systémového volání ptrace.

Během testování opravy se vývojáři zaměřili na to, že při sestavení kompilátor vypisuje varování o míchání kódu a definic (struktura byla definována po kódu, který přiřazuje hodnotu existující proměnné):

int index = n;
if (n ptrace_bps[index];

Linus přijal oprava do své master-větve, zbavil se varování přemístěním definice proměnné do bloku if:

if (n ptrace_bps[index];

V červenci bylo opravení také portováno do stabilních větví jádra 4.4, 4.9, 4.14, 4.19 a 5.2. Správci stabilních větví se také setkali s varováním a místo toho, aby zkontrolovali, zda již bylo odstraněno v Linusově master-větvi, sami provedli opravu. Problém je v tom, že se bez hlubokého zamyšlení jednoduše přemístili definici struktury nahoru, takže volání array_index_nospec, které přímo zajišťuje ochranu proti zranitelnosti, již nebylo použito při definici struktury a místo proměnné „index“ se vždy používala proměnná „n“:

int index = n;
if (n ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster