Una corrección imprudente llevó a una eliminación incompleta de la vulnerabilidad Spectre en el núcleo de Linux

Los desarrolladores del proyecto Grsecurity compartieron comparten una historia didáctica que muestra cómo eliminar advertencias del compilador sin pensar puede llevar a vulnerabilidades en el código. A finales de mayo, se propuso una corrección para un nuevo vector de explotación de la vulnerabilidad Spectre a través de la llamada al sistema ptrace.

Durante el proceso de prueba del parche, los desarrolladores notaron que al compilar, el compilador emitía una advertencia sobre la mezcla de código y definiciones (la estructura fue definida después del código que asignaba un valor a una variable existente):

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

Linus aceptó la corrección en su rama master, eliminando la advertencia moviendo la definición de la variable dentro del bloque if:

if (n ptrace_bps[index];

En julio, la corrección también fue portado a las ramas estables del núcleo 4.4, 4.9, 4.14, 4.19 y 5.2. Los mantenedores de las ramas estables también se encontraron con la advertencia y, en lugar de comprobar si ya se había solucionado en la rama master de Linus, hicieron la corrección por su cuenta. El problema es que, sin pensarlo mucho, simplemente moverá la definición de la estructura hacia arriba, de tal manera que la llamada a array_index_nospec, que proporciona protección contra la vulnerabilidad, dejó de utilizarse al definir la estructura, y en lugar de la variable "index", se utilizó siempre la variable "n":

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

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster