Buscar este blog

martes, 21 de septiembre de 2010

Error de regresión en el kernel Linux

El investigador de seguridad Ben Hawkes dio con algo que llamó su atención: En el 2007 fue publicada una vulnerabilidad que permitía elevar privilegios en el kernel Linux de 64 bits. El problema residía en el archivo 'arch/x86_64/ia32/ia32entry.S', dentro de un procedimiento para emular las llamadas de la arquitectura de 32 bits.

Este procedimiento usa el registro eax como índice a una tabla donde están las llamadas del sistema correspondientes a IA32 y comprueba que eax está dentro de los límites de la tabla llamando a la macro
IA32_ARG_FIXUP que realizará una conversión de registros de 64 bits a registros de 32.

Esta falla descubierta por Wojciech Purczynski, fue corregida añadiendo la macro LOAD_ARGS32 para cargar de manera segura los registros previniendo su explotación. En su momento fue publicado el exploit correspondiente y se asignó el CVE-2007-4573 a la vulnerabilidad.

Lo que Ben Hawkes encontró fue que en las nuevas versiones del kernel, los desarroladores habían eliminado una linea concreta de la macro LOAD_ARGS32: "movl \offset+72(%rsp),%eax". Lo curioso es que se trata de la que efectuaba una asignación segura del valor de 'eax'.

La falla ha sido nuevamente corregida y asignada el CVE-2010-3301.

Si quieren más información pueden visitar: http://www.hispasec.com/unaaldia/4348

No hay comentarios:

Publicar un comentario