
2 de enero de 2018 (CVE-2017-5753 y CVE-2017-5715) exploit de la vulnerabilidad 'Spectre'
2 de enero de 2018 (CVE-2017-5753 y CVE-2017-5715) Ejemplo de explotación de la vulnerabilidad "Spectre"
Colocamos el texto "The Magic Words are Squeamish Ossifrage." en la memoria, y luego intentamos leerlo explotando la vulnerabilidad. Si el sistema es vulnerable, verás el mismo texto en la salida estándar.
En este código, si las instrucciones de compilación en victim_function() se ejecutan en orden estricto del programa, la función solo lee de array1[0..15] porque array1 size = 16. Sin embargo, es posible que el tiempo de ejecución supere el tiempo de lectura. La función read_memory_byte() entrena a victim_function() múltiples veces para que el predictor de saltos espere valores válidos de x, y luego llama a x fuera de límites. El salto condicional no se predice, y la ejecución especulativa posterior lee un byte misterioso usando x fuera de límites. Luego, el código predicho lee de array2[array1[x] * 512], filtrando el valor de array1[x] en la caché. Para completar el ataque, se usa un simple flush+reload para identificar en qué línea de caché se encuentra array2, revelando el contenido de la memoria. El ataque se repite muchas veces, por lo que incluso si el byte objetivo no está inicialmente en caché, la primera iteración lo traerá a la caché. En un i7 Surface Pro 3, el código optimizado lee a aproximadamente 10 KB/s.