• Saltar al contenido principal
  • Saltar a la barra lateral principal
  • Saltar al pie de página

Una al Día

Boletín de noticias de Seguridad Informática ofrecido por Hispasec

Usted está aquí: Inicio / Vulnerabilidades / Vulnerabilidad en el kernel Linux permite elevación de privilegios

Vulnerabilidad en el kernel Linux permite elevación de privilegios

15 mayo, 2013 Por Hispasec 3 comentarios

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:
[114607.069257] BUG: unable to handle kernel paging request at
0000000383c35328
[114607.070003] IP: [] sw_perf_event_destroy+0x30/0x90

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:
static int perf_swevent_init(struct perf_event *event)
{
    int event_id = event->attr.config;
    if (event->attr.type != PERF_TYPE_SOFTWARE)
        return –ENOENT;
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:
static void sw_perf_event_destroy(struct perf_event *event)
{
        u64 event_id = event->attr.config;
        WARN_ON(event->parent);
        static_key_slow_dec(&perf_swevent_enabled[event_id]);
        swevent_hlist_put(event);
}
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.
El parche fue añadido al repositorio del kernel el mismo mes. Básicamente consiste en promover la variable ‘event_id‘ al tipo ‘u64‘, evitando así la falta de una comprobación apropiada:
static int perf_swevent_init(struct perf_event *event)
 {
–   int event_id = event->attr.config;
+   u64 event_id = event->attr.config;
    if (event->attr.type != PERF_TYPE_SOFTWARE)
        return –ENOENT;
El fallo fue reportado en abril, y pasó un poco de puntillas por la lista de desarrolladores, sin levantar demasiado revuelo. Pero parece que no pasó tan desapercibido para todo el mundo. Un poco más tarde, en mayo, un tercero hizo público un exploit para aprovechar la vulnerabilidad. Este hecho es el que realmente ha sacado a la luz que el fallo, es en realidad un grave problema de seguridad.
El CVE asignado es el CVE-2013-2094. Afectaría 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.
Más información:
Trinity
http://codemonkey.org.uk/projects/trinity/
Linux kernel oops
http://en.wikipedia.org/wiki/Linux_kernel_oops
Performance counter subsystem
https://perf.wiki.kernel.org/index.php/Main_Page
CVE-2013-2094 kernel: perf_swevent_enabled array out-of-bound access
https://bugzilla.redhat.com/show_bug.cgi?id=962792#c16
Commit del parche en el repositorio del kernel Linux
http://bit.ly/1833rsM
Exploit
http://fucksheep.org/~sd/warez/semtex.c
David García
dgarcia@hispasec.com

@dgn1729

Acerca de Hispasec

Hispasec Ha escrito 6939 publicaciones.

  • View all posts by Hispasec →
  • Blog

Compártelo:

  • Twitter
  • Facebook
  • LinkedIn
  • Reddit
  • Telegram
  • WhatsApp

Publicaciones relacionadas

Publicado en: Vulnerabilidades

Interacciones con los lectores

Comentarios

  1. Largonet dice

    16 mayo, 2013 a las 9:08 pm

    Hola!
    En el bugtrack de RH dice que es para 32 bits pero no hay exploits ni parches aun…. Sabrian algo de eso?

    Responder
  2. Anónimo dice

    17 mayo, 2013 a las 11:21 am

    En «Más información» aparece el exploit para x86_64:
    Exploit
    http://fucksheep.org/~sd/warez/semtex.c

    Responder
  3. Anónimo dice

    18 mayo, 2013 a las 5:19 pm

    Segun segu-info es para 64 bits , voy a leer bugtrack para ver de que se trata

    Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Buscar

Síguenos

siguenos en twitter

UAD360 EDICIÓN 2022

https://www.youtube.com/watch?v=go_CSWK56yU

Populares de UAD

  • Evasión de CloudTrail en AWS a través de API no documentada
  • Parches de enero 2023: Microsoft corrige 98 vulnerabilidades
  • Campañas de phishing utilizan Flipper Zero como cebo
  • USB Killer, el enchufable que puede freir tu equipo
  • Tamagotchi para hackers: Flipper Zero

Entradas recientes

  • Evasión de CloudTrail en AWS a través de API no documentada
  • Parches de enero 2023: Microsoft corrige 98 vulnerabilidades
  • UAD se abre a la comunidad
  • Campañas de phishing utilizan Flipper Zero como cebo
  • Vulnerabilidades críticas en productos de Synology
  • Más de dos docenas de errores de WordPress explotados por un nuevo malware de Linux
  • Descubierta una nueva campaña de malware que se propagaba a través de los anuncios de Google
  • Correo electrónico
  • Facebook
  • LinkedIn
  • RSS
  • Twitter

Footer

UAD

UAD nació a raíz de un inocente comentario en un canal IRC hace 24 años. A través de los archivos, un lector curioso puede ver cómo ha cambiado (o no) la seguridad de la información desde entonces.

Aviso Legal

  • Aviso Legal
  • Términos y Condiciones
  • Política de Privacidad
  • Política de Cookies

Copyright © 2023 · Hispasec Sistemas, S.L. Todos los derechos reservados

Este sitio web utiliza cookies propias y de terceros para fines analíticos y para mostrarte publicidad (tanto general como personalizada) relacionada con tus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación (por ejemplo, páginas visitadas), para optimizar la web y para poder valorar las opiniones de los servicios consultados por los usuarios. Para administrar o deshabilitar estas cookies haz clic en: Configurar Cookies


Rechazar todo Aceptar Todo
Configurar Cookies

Resumen de privacidad

Este sitio web utiliza cookies para mejorar su experiencia mientras navega por el sitio web. De estas, las cookies que se clasifican como necesarias se almacenan en su navegador, ya que son esenciales para el funcionamiento de las funcionalidades básicas del sitio web. También utilizamos cookies de terceros que nos ayudan a analizar y comprender cómo utiliza este sitio web. Estas cookies se almacenarán en su navegador solo con su consentimiento. También tiene la opción de optar por no recibir estas cookies. Pero la exclusión voluntaria de algunas de estas cookies puede afectar su experiencia de navegación.
Necesaria
Siempre activado
Las cookies necesarias son absolutamente esenciales para que el sitio web funcione correctamente. Estas cookies garantizan funcionalidades básicas y características de seguridad del sitio web, de forma anónima.
CookieDuraciónDescripción
cookielawinfo-checkbox-analytics11 monthsEsta cookie está configurada por el complemento de consentimiento de cookies de GDPR. La cookie se utiliza para almacenar el consentimiento del usuario para las cookies en la categoría "Análisis".
cookielawinfo-checkbox-functional11 monthsLa cookie está configurada por el consentimiento de cookies de GDPR para registrar el consentimiento del usuario para las cookies en la categoría "Funcional".
cookielawinfo-checkbox-necessary11 monthsEsta cookie está configurada por el complemento de consentimiento de cookies de GDPR. Las cookies se utilizan para almacenar el consentimiento del usuario para las cookies en la categoría "Necesario".
cookielawinfo-checkbox-others11 monthsEsta cookie está configurada por el complemento de consentimiento de cookies de GDPR. La cookie se utiliza para almacenar el consentimiento del usuario para las cookies en la categoría "Otro.
cookielawinfo-checkbox-performance11 monthsEsta cookie está configurada por el complemento de consentimiento de cookies de GDPR. La cookie se utiliza para almacenar el consentimiento del usuario para las cookies en la categoría "Rendimiento".
viewed_cookie_policy11 monthsLa cookie está configurada por el complemento de consentimiento de cookies de GDPR y se utiliza para almacenar si el usuario ha dado su consentimiento o no para el uso de cookies. No almacena ningún dato personal.
Analítica
Las cookies analíticas se utilizan para comprender cómo interactúan los visitantes con el sitio web. Estas cookies ayudan a proporcionar información sobre métricas, el número de visitantes, la tasa de rebote, la fuente de tráfico, etc.
GUARDAR Y ACEPTAR