Dos nuevas vulnerabilidades en eBPF permiten eludir la protección contra Spectre 4

agosto 02, 2021 , 0 Comments

Spectre logo

Hace poco se dio a conocer la noticia de que fueron identificadas dos vulnerabilidades en el kernel de Linux que permiten usar el subsistema eBPF para eludir la protección contra el ataque Spectre 4 (SSB, Speculative Store Bypass). Se menciona que usando un programa BPF sin privilegios, un atacante puede crear condiciones para la ejecución especulativa de ciertas operaciones y determinar el contenido de áreas arbitrarias de la memoria del kernel.

El método de ataque Spectre 4 se basa en restaurar los datos atrapados en la caché del procesador después de descartar el resultado de la ejecución especulativa de operaciones al procesar operaciones de lectura y escritura intercaladas utilizando direccionamiento indirecto.

Cuando una operación de lectura sigue a una operación de escritura, es posible que el desplazamiento de la dirección de lectura ya se conozca debido a operaciones similares (las operaciones de lectura se realizan mucho más a menudo y la lectura se puede hacer desde la caché) y el procesador puede leer especulativamente antes de escribir, sin esperar a que se calcule el desplazamiento de la dirección indirecta de escritura.

Si, después de calcular el desplazamiento, se detecta una intersección de áreas de memoria para escritura y lectura, el procesador simplemente descartará el resultado de lectura ya obtenido especulativamente y repetirá esta operación. Esta función permite que la instrucción de lectura acceda al valor anterior en alguna dirección mientras la operación de guardado aún está pendiente.

Después de descartar una operación especulativa fallida, los rastros de su ejecución permanecen en la caché, después de lo cual uno de los métodos para determinar el contenido de la caché se puede usar para recuperarlo en función del análisis de los cambios en el tiempo de acceso a caché y  datos almacenados en caché.

Tenga en cuenta que se puede abusar de cada tema independientemente del otro, confiando en errores que no se superponen.

Los PoC se han compartido de forma privada con los mantenedores del subsistema BPF para ayudar con el desarrollo de arreglos.

La primera vulnerabilidad CVE-2021-35477: es causada por una falla en el mecanismo de validación del programa BPF. Para protegerse contra el ataque de Spectre 4, el verificador agrega una instrucción adicional después de operaciones de guardado potencialmente problemáticas en la memoria, almacenando un valor cero para desplazar los rastros de la operación anterior.

Se asumió que la operación de escritura cero sería muy rápida y bloquearía la ejecución especulativa, ya que depende solo del puntero del marco de pila BPF. Pero, de hecho, resultó posible crear condiciones en las que la instrucción que conduce a la ejecución especulativa tenga tiempo de ejecutarse antes de la operación de guardado preventivo.

La segunda vulnerabilidad CVE-2021-3455: está relacionada con el hecho de que cuando el verificador de BPF detecta operaciones de guardado potencialmente peligrosas en la memoria, no se tienen en cuenta las áreas no inicializadas de la pila de BPF, la primera operación de escritura en la que no está protegida.

Esta característica conduce a la posibilidad de realizar una operación de lectura especulativa, dependiendo del área de memoria no inicializada, antes de ejecutar la instrucción de almacenamiento. La nueva memoria para la pila BPF se asigna sin verificar el contenido que ya está en la memoria asignada, y en la etapa antes de que comience el programa BPF, hay una manera de administrar el contenido del área de memoria, que luego se asignará a la pila BPF.

La solución disponible vuelve a implementar las técnicas de mitigación para seguir recomendado por los proveedores de CPU y está disponible en el kernel de la línea principal repositorio de git.

Finalmente se menciona que los mantenedores de los subsistemas eBPF en el kernel obtuvieron acceso a un prototipo de exploit que demuestra la posibilidad de realizar ataques en la práctica.

Los problemas se solucionan en forma de parches, que se incluirán en la próxima actualización del kernel de Linux, por lo que las actualizaciones para las diferentes distribuciones estarán comenzando a llegar durante los próximos dias.

Fuente: https://www.openwall.com/


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.