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:

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)

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)

;) 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:
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


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
----------------------------------------------------------------------

Bueno seguire buscando.

Comentarios

Entradas populares de este blog

Clave WPA2 por Defecto de equipos TotalPlay (Huawei HG8245H)

Cable modem Ubee - WPA2 y WPS por defecto