El investigador de seguridad Julien Voisin (@jvoisin) ha compartido en su blog el ańálisis de un exploit funcional que aprovecha Spectre para extraer información sensible de sistemas Linux y Windows.

Ambos aprovechan la ya conocida vulnerabilidad CVE-2017-5753 para realizar un ataque compuesto por varias etapas para conseguir que un usuario sin privilegios pueda «volcar» el contenido de un archivo específico. En el caso de Windows, los hashes LM/NT de los usuarios o el fichero /etc/shadow para los sistemas basados en Linux.

A continuación se describe el proceso que sigue el exploit:

  1. En primer lugar el exploit tratará de extraer la información del superbloque. Lo que le permitirá conocer el tamaño de las distintas partes que componen el sistema de archivos.
  2. A continuación se intentará encontrar el inode del fichero del que se pretende hacer el volcado. Esto le permitirá conocer la dirección física del archivo.
  3. Determina la dirección de memoria correspondiente.
  4. Realiza el volcado del contenido del fichero.

En el caso del fichero ‘/etc/shadow‘ (la opción por defecto), el contenido del fichero se guarda en la memoria utilizando el comando:

return system("echo "whatevern" | su - 2> /dev/null")

Este comando se ejecuta en segundo plano y en las pruebas realizadas logró extraer la información del fichero ‘shadow‘ en cuestión de minutos.

El exploit tiene algunos mecanismos de defensa. En concreto abortará su ejecución si detecta que está activo el modo SMAP (Supervisor Mode Access Prevention). Una característica de seguridad presente en algunas implementaciones de CPU.

El punto crucial del exploit se encuentra en la dirección ‘0x4092f0’, en donde se utilizan las instrucciones: ‘cpuid‘, como instrucción de serialización, ‘rdtsc‘ para la sincronización, y ‘mfence/lfenc‘ como barrera, como se describe en el ‘paper’ referente al ataque Spectre (https://spectreattack.com/spectre.pdf).

También se utilizan algunas técnicas para minimizar el número de lecturas y optimizar la ejecución. Por ejemplo limitando la ejecución de algunas funciones distinguiendo el tipo de dato que se utiliza.

Por otro lado, el exploit utiliza una técnica ya conocida que permite saltar la protección KASLR. Esta protección aleatoriza la ubicación del código del propio kernel en memoria. Sin a día de hoy aún puede saltarse en distribuciones que permitan a un usuario no privilegiado acceder a /proc/kallsym. En caso contrario, el exploit utilizará offsets predefinidos para evitar la protección. De momento solo están soportadas las distribuciones de Fedora, ArchLinux y Ubuntu, aunque existen funciones en el código para Debian y CentOS.

Se tienen evidencias de que el exploit pertenece a la herramienta Canvas de la empresa Immnunity, un kit de herramientas de explotación utilizado por pentesters y hackers éticos.

Según el análisis realizado por Voisin, el exploit no funcionará en sistemas parcheados. Sin embargo por la naturaleza de la vulnerabilidad deberíamos asumir que aquellos usuarios con CPU anteriores a 2015 podrían ser vulnerables a cualquier ataque basado en Spectre.

Más información:

Spectre exploits in the “wild”

La entrada Descubiertos varios exploits «in-the-wild» basados en Spectre se publicó primero en Una al Día.