Boletines de Vulnerabilidades

Vulnerabilidad en el kernel Linux permite elevación de privilegios


Información sobre el sistema

   
Software afectado Afecta a todos los kernels (de 64 bits) desde la versión 2.6.37 a la 3.8.8 que hayan sido compilados con la opción CONFIG_PERF_EVENTS.

Descripción

El pasado mes de abril, un mensaje en la lista del kernel Linux alertaba de un fallo de seguridad en la función 'sw_perf_event_destroy' de kernel/events/core.c. Su autor, Tommi Rantala, comentaba que lo había encontrado ejecutando una versión de Trinity modificada por él mismo. Se trata de una herramienta para emplear técnicas de fuzzing en las llamadas al sistema que proporciona el kernel Linux.

El fallo se encuentra en el subsistema 'perf' que permite obtener métricas de rendimiento del hardware. Al ejecutar un conjunto de llamadas con parámetros aleatorios, Rantala consiguió provocar un "kernel Oops" (una especie de excepción en el kernel). En la salida de registro de Trinity podían observarse las líneas que contenían la sospecha de un problema de seguridad.

Básicamente, antes de la llamada a 'sw_perf_event_destroy' existe una llamada a 'perf_swevent_init', donde se inicializa un entero con signo al valor de event->attr.config, procedente del puntero a la estructura *event.

Posteriormente, se hace una llamada a 'sw_perf_event_destroy' y aquí ese valor entero con signo es tratado como un entero sin signo de 64 bits.

Como en 'perf_swevent_init' el entero es tratado con signo, solo es comprobado en su límite superior, dejando abierta la posibilidad de que se introduzca un entero negativo que posteriormente en 'sw_perf_event_destroy', al ser "convertido" en u64, nos dará un entero positivo.

Debido a que el valor de event->attr.config es controlable por el usuario, cuando se efectua la llamada al sistema correspondiente mediante la estructura 'perf_event_attr', es posible mapear una zona de memoria y obtener el control de la misma haciendo que se apunte a esa dirección. Si se llega a ejecutar nuestra zona de memoria con un shellcode instalado allí, este se ejecutaría con permisos de root.

Petr Matousek da una explicación completa y de recomendable estudio en la lista de bugzilla de Red Hat.

Identificadores estándar

Propiedad Valor
CVE CVE-2013-2094

Histórico de versiones

Versión Comentario Fecha
1.0 Aviso remitido 2013-05-16

Miembros de

Ministerio de Defensa
CNI
CCN
CCN-CERT