
Prueba de concepto para CVE-2021-33624
compilar con
gcc -pthread -o bpf_spectre_type_confusion bpf_spectre_type_confusion.c -Wall -ggdb -std=gnu99
ejecutar con
(sudo) ./bpf_spectre_type_confusion 1 2 ffffffffa4925620 0x10
donde 1 y 2 son hilos de CPU que se ejecutan en dos núcleos de hardware distintos, ffffffffa4925620 es la memoria de destino que queremos filtrar y 0x10 es el número de bytes a filtrar. El exploit está corregido pero aún es posible observar los resultados ejecutando el código como sudo, ya que las contramedidas solo se aplican en el caso sin sudo.
La dirección de ejemplo para la filtración se puede obtener con sudo cat /proc/kallsyms | grep core_pattern y el resultado esperado se ve con cat /proc/sys/kernel/core_pattern
El uso de instrucciones DIV (parcheadas internamente para incluir una rama, para evitar excepciones de división por cero) para engañar al predictor de ramas fue descubierto por Piotr durante su investigación. Referencia https://www.openwall.com/lists/oss-security/2021/06/21/1
Agradecimientos especiales a Jann Horn, quien desarrolló los fundamentos de este código de exploit en su investigación inicial (https://bugs.chromium.org/p/project-zero/issues/detail?id=1711)