PDA

Просмотр полной версии : Необдуманное исправление привело к неполному устранению уязвимости Spectre в ядре Linux


Suicide
04.09.2019, 20:16
Разработчики проекта Grsecurity поделились (https://grsecurity.net/teardown_of_a_failed_linux_lts_spectre_fix.php) поучительной историей, демонстрирующей как необдуманное устранение предупреждений компилятора может привести к появлению уязвимостей в коде. В конце мая для ядра Linux было предложено исправление нового вектора эксплуатации уязвимости Spectre через системный вызов ptrace.

В процессе тестирования патча разработчики обратили внимание, что при сборке компилятор выводит предупреждение о смешивании кода и определений (структура была определена после кода с присвоением значения существующей переменной):

int index = n;

if (n ptrace_bps[index];

Линус принял исправление (https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/arch/x86/kernel/ptrace.c?id=31a2fbb390fee4231281b939e1979e810f9454 15) в свою master-ветку, избавившись (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=223cea6a4f0552b86fb25e3b8bbd00469816cd7a) от предупреждения путём переноса определения переменной в блок if:

if (n ptrace_bps[index];

В июле исправление также было портировано в стабильные ветки ядра 4.4, 4.9, 4.14, 4.19 и 5.2. Сопровождающие стабильных веток также столкнулись с предупреждением и вместо того, чтобы проверить, не устранено ли оно уже в master-ветке Линуса, собственноручно внесли исправление. Проблема в том, что они, особо не задумываясь, просто перенесли (https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/arch/x86/kernel/ptrace.c?h=v5.2.11&id=d1ba61ae4be5e5a5727e303c827591517b6188bb) определение структуры вверх, так, что вызов array_index_nospec, непосредственно обеспечивающий защиту от уязвимости, перестал использоваться при определении структуры, и вместо переменной "index" всегда использовалась переменная "n":

int index = n;

if (n ptrace_bps[index];

index = array_index_nospec(n, HBP_NUM);

4.09.2019

http://www.opennet.ru/opennews/art.shtml?num=51419​

user100
04.09.2019, 20:43
Интересно, что по данному поводу сказал Линус?