Re: Analisis de un Bug: 'imlib2' Library 'load()' CVE-2008-5187
Bien estos dias voy a estar algo ocupado con lo del trabajo y eso. Solo veremos una tecnica mas de depuracion.
Este nos sirve mas que nada para cuando, el bug se enecunetra en una libreria, tal y como es nuestro caso:
Este comando nos generara un archivo prueba.truss
Mas informacion sobre truss:
De este lo podemos examinar con:
Pero lo que nos interesa es ver que librerias carga:
Podemos extender la busqueda solo a libredias con "lib" ya que el anterior tambien nos arrojo los archivos que habre como ./prueba.xpm y ./prueba.png que son los uqe nosotros le pasamos.
Filtremos solo xpm y lib
Vemos que si carga el archivo vulnerable, entonces lo mas probable es que si use la funcion load del archivo loaders_xpm.c para cargar la imagen ./prueba.xpm que le pasamos, seria cuestion de depurarlo un poco mas.
A ver me voy volver loco con tantas archivos.
En el direcctorio de src de imlib2 esta la ruta:
src/modules/loaders
Listo los archivos xpm:
Tenemos:
pero el programa carga /usr/local/lib/imlib2/loaders/xpm.so entonces vemos que al instalar la libreria nos menciona lo siguiente:
Bueno seguire buscando.
Este nos sirve mas que nada para cuando, el bug se enecunetra en una libreria, tal y como es nuestro caso:
Citar
%truss -f -d -o prueba.truss ./imlib2_convert ./prueba.xpm ./prueba.png
Este comando nos generara un archivo prueba.truss
Mas informacion sobre truss:
Código:
http://fuse4bsd.creo.hu/localcgi/man-cgi.cgi?truss+1
De este lo podemos examinar con:
Citar
%cat prueba.truss
Pero lo que nos interesa es ver que librerias carga:
Citar
%cat prueba.truss | grep open
27161: 0.000555657 open("/etc/libmap.conf",O_RDONLY,0666) ERR#2 'No such file or directory'
27161: 0.000624940 open("/var/run/ld-elf.so.hints",O_RDONLY,00) = 4 (0x4)
27161: 0.001195124 open("/usr/local/lib/libImlib2.so.5",O_RDONLY,00) = 4 (0x4)
27161: 0.002000254 open("/usr/local/lib/libfreetype.so.9",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.002534400 open("/lib/libz.so.4",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.003249575 open("/usr/local/lib/libX11.so.6",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.003975924 open("/usr/local/lib/libXext.so.6",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.004507276 open("/lib/libm.so.5",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.005050921 open("/lib/libc.so.7",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.005640102 open("/usr/local/lib/libXau.so.6",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.006182070 open("/usr/local/lib/libXdmcp.so.6",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.006825169 open("/usr/lib/librpcsvc.so.4",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.010692141 open("/usr/local/lib/imlib2/loaders",O_NONBLOCK,027757765154) = 4 (0x4)
27161: 0.011528560 open("/usr/local/lib/imlib2/loaders/zlib.so",O_RDONLY,00) = 4 (0x4)
27161: 0.012475049 open("/usr/local/lib/imlib2/loaders/xpm.so",O_RDONLY,00) = 4 (0x4)
27161: 0.013366224 open("/usr/local/lib/imlib2/loaders/tiff.so",O_RDONLY,027757765354) = 4 (0x4)
27161: 0.013917132 open("/usr/local/lib/libtiff.so.4",O_RDONLY,05001126346) = 4 (0x4)
27161: 0.014448764 open("/usr/local/lib/libjpeg.so.9",O_RDONLY,027757765314) = 4 (0x4)
27161: 0.016059583 open("/usr/local/lib/imlib2/loaders/tga.so",O_RDONLY,057765354) = 4 (0x4)
27161: 0.017023113 open("/usr/local/lib/imlib2/loaders/pnm.so",O_RDONLY,027757765354) = 4 (0x4)
27161: 0.017904231 open("/usr/local/lib/imlib2/loaders/png.so",O_RDONLY,027757765354) = 4 (0x4)
27161: 0.018456256 open("/usr/local/lib/libpng.so.5",O_RDONLY,05001126346) = 4 (0x4)
27161: 0.019926275 open("/usr/local/lib/imlib2/loaders/lbm.so",O_RDONLY,057765354) = 4 (0x4)
27161: 0.020819685 open("/usr/local/lib/imlib2/loaders/jpeg.so",O_RDONLY,027757764470) = 4 (0x4)
27161: 0.021755837 open("/usr/local/lib/imlib2/loaders/id3.so",O_RDONLY,027757765354) = 4 (0x4)
27161: 0.022305349 open("/usr/local/lib/libid3tag.so.0",O_RDONLY,05001126346) = 4 (0x4)
27161: 0.023608308 open("/usr/local/lib/imlib2/loaders/gif.so",O_RDONLY,027757764470) = 4 (0x4)
27161: 0.024143571 open("/usr/local/lib/libungif.so.5",O_RDONLY,05001126346) = 4 (0x4)
27161: 0.024733031 open("/usr/local/lib/libSM.so.6",O_RDONLY,027757765314) = 4 (0x4)
27161: 0.025264384 open("/usr/local/lib/libICE.so.6",O_RDONLY,027757765314) = 4 (0x4)
27161: 0.027015165 open("/usr/local/lib/imlib2/loaders/bz2.so",O_RDONLY,01) = 4 (0x4)
27161: 0.027678937 open("/usr/lib/libbz2.so.3",O_RDONLY,05001126346) = 4 (0x4)
27161: 0.028755889 open("/usr/local/lib/imlib2/loaders/bmp.so",O_RDONLY,00) = 4 (0x4)
27161: 0.029659915 open("/usr/local/lib/imlib2/loaders/argb.so",O_RDONLY,027757765354) = 4 (0x4)
27161: 0.030491864 open("./prueba.xpm",O_RDONLY,0666) = 4 (0x4)
27161: 0.031230785 open("./prueba.xpm",O_RDONLY,0666) = 4 (0x4)
27161: 0.031834493 open("./prueba.png",O_WRONLY|O_CREAT|O_TRUNC,0666) = 4 (0x4)
27161: 0.000555657 open("/etc/libmap.conf",O_RDONLY,0666) ERR#2 'No such file or directory'
27161: 0.000624940 open("/var/run/ld-elf.so.hints",O_RDONLY,00) = 4 (0x4)
27161: 0.001195124 open("/usr/local/lib/libImlib2.so.5",O_RDONLY,00) = 4 (0x4)
27161: 0.002000254 open("/usr/local/lib/libfreetype.so.9",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.002534400 open("/lib/libz.so.4",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.003249575 open("/usr/local/lib/libX11.so.6",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.003975924 open("/usr/local/lib/libXext.so.6",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.004507276 open("/lib/libm.so.5",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.005050921 open("/lib/libc.so.7",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.005640102 open("/usr/local/lib/libXau.so.6",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.006182070 open("/usr/local/lib/libXdmcp.so.6",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.006825169 open("/usr/lib/librpcsvc.so.4",O_RDONLY,027757765154) = 4 (0x4)
27161: 0.010692141 open("/usr/local/lib/imlib2/loaders",O_NONBLOCK,027757765154) = 4 (0x4)
27161: 0.011528560 open("/usr/local/lib/imlib2/loaders/zlib.so",O_RDONLY,00) = 4 (0x4)
27161: 0.012475049 open("/usr/local/lib/imlib2/loaders/xpm.so",O_RDONLY,00) = 4 (0x4)
27161: 0.013366224 open("/usr/local/lib/imlib2/loaders/tiff.so",O_RDONLY,027757765354) = 4 (0x4)
27161: 0.013917132 open("/usr/local/lib/libtiff.so.4",O_RDONLY,05001126346) = 4 (0x4)
27161: 0.014448764 open("/usr/local/lib/libjpeg.so.9",O_RDONLY,027757765314) = 4 (0x4)
27161: 0.016059583 open("/usr/local/lib/imlib2/loaders/tga.so",O_RDONLY,057765354) = 4 (0x4)
27161: 0.017023113 open("/usr/local/lib/imlib2/loaders/pnm.so",O_RDONLY,027757765354) = 4 (0x4)
27161: 0.017904231 open("/usr/local/lib/imlib2/loaders/png.so",O_RDONLY,027757765354) = 4 (0x4)
27161: 0.018456256 open("/usr/local/lib/libpng.so.5",O_RDONLY,05001126346) = 4 (0x4)
27161: 0.019926275 open("/usr/local/lib/imlib2/loaders/lbm.so",O_RDONLY,057765354) = 4 (0x4)
27161: 0.020819685 open("/usr/local/lib/imlib2/loaders/jpeg.so",O_RDONLY,027757764470) = 4 (0x4)
27161: 0.021755837 open("/usr/local/lib/imlib2/loaders/id3.so",O_RDONLY,027757765354) = 4 (0x4)
27161: 0.022305349 open("/usr/local/lib/libid3tag.so.0",O_RDONLY,05001126346) = 4 (0x4)
27161: 0.023608308 open("/usr/local/lib/imlib2/loaders/gif.so",O_RDONLY,027757764470) = 4 (0x4)
27161: 0.024143571 open("/usr/local/lib/libungif.so.5",O_RDONLY,05001126346) = 4 (0x4)
27161: 0.024733031 open("/usr/local/lib/libSM.so.6",O_RDONLY,027757765314) = 4 (0x4)
27161: 0.025264384 open("/usr/local/lib/libICE.so.6",O_RDONLY,027757765314) = 4 (0x4)
27161: 0.027015165 open("/usr/local/lib/imlib2/loaders/bz2.so",O_RDONLY,01) = 4 (0x4)
27161: 0.027678937 open("/usr/lib/libbz2.so.3",O_RDONLY,05001126346) = 4 (0x4)
27161: 0.028755889 open("/usr/local/lib/imlib2/loaders/bmp.so",O_RDONLY,00) = 4 (0x4)
27161: 0.029659915 open("/usr/local/lib/imlib2/loaders/argb.so",O_RDONLY,027757765354) = 4 (0x4)
27161: 0.030491864 open("./prueba.xpm",O_RDONLY,0666) = 4 (0x4)
27161: 0.031230785 open("./prueba.xpm",O_RDONLY,0666) = 4 (0x4)
27161: 0.031834493 open("./prueba.png",O_WRONLY|O_CREAT|O_TRUNC,0666) = 4 (0x4)
Podemos extender la busqueda solo a libredias con "lib" ya que el anterior tambien nos arrojo los archivos que habre como ./prueba.xpm y ./prueba.png que son los uqe nosotros le pasamos.
Filtremos solo xpm y lib
Citar
%cat prueba.truss | grep open |grep lib | grep xpm
27161: 0.012475049 open("/usr/local/lib/imlib2/loaders/xpm.so",O_RDONLY,00) = 4 (0x4)
27161: 0.012475049 open("/usr/local/lib/imlib2/loaders/xpm.so",O_RDONLY,00) = 4 (0x4)
A ver me voy volver loco con tantas archivos.
En el direcctorio de src de imlib2 esta la ruta:
src/modules/loaders
Listo los archivos xpm:
Citar
%ls -l | grep xpm
-rw-r--r-- 1 1000 1000 28911 Dec 5 10:55 loader_xpm.c
-rw-r--r-- 1 root 1000 344 Dec 5 10:55 loader_xpm.lo
-rw-r--r-- 1 root 1000 20032 Dec 5 10:55 loader_xpm.o
-rw-r--r-- 1 root 1000 882 Dec 5 10:55 xpm.la
-rw-r--r-- 1 1000 1000 28911 Dec 5 10:55 loader_xpm.c
-rw-r--r-- 1 root 1000 344 Dec 5 10:55 loader_xpm.lo
-rw-r--r-- 1 root 1000 20032 Dec 5 10:55 loader_xpm.o
-rw-r--r-- 1 root 1000 882 Dec 5 10:55 xpm.la
Tenemos:
- loader_xpm.c
- loader_xpm.lo
- loader_xpm.o
- xpm.la
pero el programa carga /usr/local/lib/imlib2/loaders/xpm.so entonces vemos que al instalar la libreria nos menciona lo siguiente:
Citar
Libraries have been installed in:
/usr/local/lib/imlib2/loaders
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
/bin/sh ../../../libtool --mode=install /usr/bin/install -c 'xpm.la' '/usr/local/lib/imlib2/loaders/xpm.la'
/usr/bin/install -c .libs/xpm.lai /usr/local/lib/imlib2/loaders/xpm.la
/usr/bin/install -c .libs/xpm.a /usr/local/lib/imlib2/loaders/xpm.a
chmod 644 /usr/local/lib/imlib2/loaders/xpm.a
ranlib /usr/local/lib/imlib2/loaders/xpm.a
----------------------------------------------------------------------
/usr/local/lib/imlib2/loaders
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
/bin/sh ../../../libtool --mode=install /usr/bin/install -c 'xpm.la' '/usr/local/lib/imlib2/loaders/xpm.la'
/usr/bin/install -c .libs/xpm.lai /usr/local/lib/imlib2/loaders/xpm.la
/usr/bin/install -c .libs/xpm.a /usr/local/lib/imlib2/loaders/xpm.a
chmod 644 /usr/local/lib/imlib2/loaders/xpm.a
ranlib /usr/local/lib/imlib2/loaders/xpm.a
----------------------------------------------------------------------
Bueno seguire buscando.
Comentarios