Ett oöverlagt fix resulterade i en ofullständig åtgärd av Spectre-sårbarheten i Linux-kärnan

Utvecklarna av Grsecurity-projektet delade en lärande historia som visar hur tankspritt borttagande av kompilatorvarningar kan leda till sårbarheter i koden. I slutet av maj föreslogs en lösning för den nya exploateringsvektorn av Spectre genom systemanropet ptrace till Linux-kärnan.

Under testningen av patchen noterade utvecklarna att kompilatorn påpekade en varning vid sammanställningen gällande blandning av kod och definitioner (strukturen definierades efter koden med tilldelning av värdet till en befintlig variabel):

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

Linus accepterade fix i sin master-gren, genom att eliminera varningen genom att flytta definitionen av variabeln till if-blocket:

if (n ptrace_bps[index];

I juli portades fixen också till stabila grenar av kärnan 4.4, 4.9, 4.14, 4.19 och 5.2. Underhållarna av de stabila grenarna stötte också på varningen och istället för att kontrollera om den redan hade åtgärdats i Linus master-gren, gjorde de själva en fix. Problemet är att de, utan att tänka på det, helt enkelt flyttade definitionsstrukturen uppåt, så att anropet array_index_nospec, som direkt skyddade mot sårbarheten, slutade användas vid definitionen av strukturen, och istället för variabeln "index" användes alltid variabeln "n":

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

Källa: opennet.ru

Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster