Es una familia de vulnerabilidades basadas en la ejecución especulativa:

  • Para maximizar performance, se trata de predecir la dirección de un salto y se adelanta su ejecución (sin leer realmente la dirección).
  • Los procesos comparten los predictores de saltos y otras unidades de cada núcleo. Antes no lo hacían, pero cambiaron algunos supuestos, no lo vieron.
  • El predictor de saltos indexa por la dirección virtual del salto, por lo que pueden provocarse colisiones. Es decir, que dos procesos salten a la misma dirección virtual
  • Las instrucciones ejecutadas por error dejan trazas en el caché, por lo que se puede acceder a información sensible.

Hay varias formas de mitigar este tipo de ataque:

  • Los saltos indirectos son susceptibles a ataques del tipo spectre. Se puede simular un return al colocar la dirección del salto en el stack, y realizar un return.
  • Utilizar instrucciones para prevenir la ejecución especulativa.

Para más información, ver CWE-200 y Spectre Attacks: Exploiting Speculative Execution.