En uovervejet rettelse førte til en ufuldstændig eliminering af Spectre-sårbarheden i Linux-kernen

Udviklerne af Grsecurity-projektet delt har delt en lærerig historie, der viser, hvordan uovervejet fjernelse af compilervarsler kan føre til sårbarheder i koden. I slutningen af maj blev der foreslået en løsning til Linux-kernen for en ny udnyttelsesvektor af Spectre-sårbarheden gennem systemkaldet ptrace.

Under testningen af patchen bemærkede udviklerne, at compileren gav et varsel om blanding af kode og definitioner (strukturen blev defineret efter koden, der tildelte værdien til en eksisterende variabel):

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

Linus accepterede rettelse i sin master-gren, ved at fjerne advarslen ved at flytte variabeldefinitionen ind i if-blokken:

if (n ptrace_bps[index];

I juli blev løsningen også porteret til de stabile grene af kernen 4.4, 4.9, 4.14, 4.19 og 5.2. Vedligeholdere af de stabile grene stødte også på advarslen, og i stedet for at tjekke, om den allerede var blevet rettet i Linus' master-gren, lavede de rettelsen selv. Problemet var, at de, uden at tænke nærmere over det, bare flyttede strukturdefinitionen op, så kaldet til array_index_nospec, som direkte sikrede beskyttelsen mod sårbarheden, ikke længere blev brugt i forbindelse med strukturdefinitionen, og i stedet for variabelen "index" blev der altid brugt variabelen "n":

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

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster