Publicado en Bugtraq y Full Disclosure, en Agosto de 2008.
Vulnerabilidad: BID 30691 / CVE-2008-2936. Permite el compromiso total de la máquina, únicamente en local y bajo ciertas condiciones que son bastante difíciles de cumplir en la vida real (permiso de escritura en el spool de correo y en particular no exista -o al menos se pueda borrar- el buzón del usuario "root", no exista alias de correo para dicho usuario y se esté utilizando el LDA de Postfix y buzones de correo tipo "mailbox", entre otras). Además, el sistema operativo debe permitir crear un enlace (hardlink) a un enlace simbólico (symlink), sin "dereferenciar" este último, cosa que ocurre, sin ir más lejos en los sistemas Linux actuales (>= 2.0) o Solaris (>= 2.0). Aunque parece ser que este comportamiento no es del todo estándar (según Wietse Venema, no cumple POSIX.1-2001 y X/Open XPG4v2), lo cierto es que la vulnerabilidad está ahí y hay que parchearla.
El exploit presentado permite comprobar si se cumplen o no las condiciones anteriores y si es así, finalmente obtendrá "root" en la máquina. Ha sido probado en Ubuntu / Debian. Tuve que trucar mi sistema, para que cumpliera todas las condiciones (lo cual da una idea de lo difícil que puede llegar a ser encontrar un sistema vulnerable y a la vez explotable). En particular, añadí las líneas siguientes al /etc/postfix/main.cf:
alias_maps =
mailbox_command =
(es una forma rápida de desactivar los alias de correo y algún LDA externo como "procmail" que pudiéramos estar utilizando).
Tras reiniciar Postfix (postfix reload) y sin olvidar dar permisos de escritura al spool (chmod o+w /var/mail), el exploit funcionará sin problemas (en la mayoría de los casos). Fallará si el sistema utiliza una partición diferente para el spool (puesto que no podrá crear el enlace duro), una configuración de Postfix más o menos extravagante (el exploit sólo contempla una configuración típica, no todas las posibilidades) o si Postfix ha sido parcheado.
Como curiosidad, y antes de que nadie se apresure a corregirme, el nombre del exploit no contiene ningún typo: PoC (proof of concept) + Postfix = pocfix ;-)
Lsbstego - A simple tool useful for a fast and "visual" LSB-stegoanalysis phase
13.Ene.2008
Utilidad programada durante la resolución del reto #5 de Elladodelmal.com, en Diciembre de 2007.
Lsbstego permite obtener los bits menos significativos (LSB) de un fichero dado. Se devolverán por la salida estándar, agrupados de 8 en 8, es decir, en bytes. Este pequeño programa es útil para descubrir y obtener la información oculta guardada dentro de una imagen mediante la técnica esteganográfica conocida como LSB. Se le ha dotado de la flexibilidad necesaria para superar las problemáticas siguientes:
Desplazamiento de bits (offset). No es lo mismo comenzar el procesamiento del fichero origen en el primer byte (offset 0) que en el segundo (offset 1) así como en los 6 siguientes (en total, offsets 0-7). Si empezamos por el primero, el primer LSB (correspondiente al primer byte origen) pasará a ser el bit 7 del primer byte resultante; el segundo LSB será el bit 6 y así hasta completar el primer byte resultante. Si empezamos por el segundo (offset 1), el segundo LSB (correspondiente al segundo byte origen) pasará a ser el bit 7 del primer byte resultante y así sucesivamente. Por tanto, el efecto de haber aplicado un offset es que los LSB se desplazan en el fichero resultante obteniendo una salida completamente distinta (los bytes resultantes son distintos). Normalmente el offset vendrá dado por el formato de fichero de imagen que estamos analizando de forma que la información secreta se empiece a extraer justo a partir del offset donde comienzan los datos de la imagen (la información de colores y/o bitmap), saltándose las cabeceras y demás meta-información de la imagen.
Información "invertida". Incluso aunque el offset sea correcto, es posible que la información no se haya guardado de principio a fin sino a la inversa (es decir, los primeros bytes del texto secreto estén al final de la imagen).
Ordenamiento de LSB's. Una última variante a la hora de construir el byte resultante consiste en tomar el primer LSB como el bit menos significativo del byte resultante, esto es, dbyte = lsb8 ... lsb1, en lugar de dbyte = lsb1 ... lsb8.
La solución más simple y eficaz consiste en utilizar una aproximación "visual" combinada con la fuerza bruta: se procesa varias veces el fichero origen, variando los diferentes parámetros y obteniendo diferentes posibles salidas, que el analista deberá revisar (por ejemplo, en busca de texto legible). Se aconseja filtrar la salida con una utilidad tipo "strings", para evitar que caracteres no imprimibles ofusquen el resultado.
La descripción original tomada de los comentarios del fichero fuente:
/*
* lsbstego.c, v1.0
* by Roman Medina-Heigl Hernandez a.k.a. RoMaNSoFt
* [16.12.2007]
*
* Lsbstego is a simple tool useful for a fast and "visual" stegoanalysis phase.
* It decrypts files by applying the commonly known LSB technique. The program
* permits to run the process several times varying certain parameters so different
* cases are covered. If you have an unknown file and you suspect it could have a
* secret message embeded, run in this way:
*
* $ ./lsbstego -a <file>
*
* Output is written to stdout so you could easily redirect to a file or pipe to
* another util like "strings" (useful when output contains non-printable chars).
*
* Other options can be used to launch a customized one pass only run. These are:
* -f (forward): process file from the beginning to the eof
* -r (reverse): process file from eof to the beginning
* -d (downward): lsb's are joined downward (i.e dbyte = lsb1 ... lsb8)
* -u (upward): lsb's are joined upward (i.e. dbyte = lsb8 ... lsb1)
* -o <offset>: skip <offset> bytes before starting normal processing
*
*/
Publicado en Bugtraq y Full Disclosure, en Noviembre de 2007.
Vulnerabilidad: BID 25984 / CVE-2007-5365. Afecta a: ISC DHCPd 2.x.
Probado en Ubuntu 6.06 LTS pero debería funcionar en cualquier Unix (de hecho,
el advisory original de Core Security
se centraba en OpenBSD). La rama 2.x de DHCPd se considera obsoleta y no
es actualmente mantenida. OpenBSD ha sacado parches y se ha hecho el consiguiente backporting
a Debian, Ubuntu...
El fallo es un "integer underflow" que se produce al recibir un paquete DHCP
con valores no permitidos para la opción "Max Message Size" (mms). En concreto, el demonio DHCP
muere si 278 <= mms <= 284. No parece factible que se pueda aprovechar esta vulnerabilidad para
la ejecución de código arbitrario ya que se produce un "Segmentation fault" instantáneo, sin
posibilidad de controlar EIP, al tratar de copiar un buffer de ~64 kbytes al final de la región
de pila (donde sólo restan aprox. 8 kbytes).
Shell-Exploit - gethostbyname() Buffer Overflow in very old AIX systems - Local r00t
28.Sep.2006
Publicado en Bugtraq y Full Disclosure, en Septiembre de 2006.
Vulnerabilidad: BID 6853 / CVE-1999-0101. Afecta a: IBM AIX(r) 3.2.x, 4.1.x, 4.2.x.
Se trata de una prueba de concepto que demuestra que es posible explotar fallos típicos de desbordamiento
de buffer simplemente desde la shell, sin necesidad de disponer de un compilador (cc, etc), intérprete
(perl, etc) o cualquier otra herramienta "externa" que no venga con un SO razonablemente mínimo.
Se ha escogido un sistema muy antiguo, donde las funcionalidades de la shell son muy
limitadas y se ha tratado de escribir un exploit portable, entre diferentes "sabores" de Unix (SystemV y BSD)
y shells (sh, bash, ksh, etc). No he podido hacer pruebas en todos los escenarios y combinaciones posibles por
lo que agradecería feedback.
El exploit es totalmente funcional y está probado con éxito en AIX 4.1.4.0.
La vulnerabilidad explotada es conocida y muy antigua (~10 años) por lo que la utilidad de este exploit es
meramente educativa. La idea es que se pueda usar el skel del exploit para construir otros de naturaleza
similar, es decir, otros "shell-exploits". Existen muchos exploits escritos en shell, normalmente
relativos a fallos más o menos fáciles o típicos de explotar usando la shell (como una condición de
carrera), y en la mayoría de los casos orientado a una shell o sistema particular (ej: Linux/bash)
pero no he encontrado nada similar (en flexibilidad, portabilidad y heterogeneidad) a esta prueba de concepto.
Exploit Linux Kernel 2.6.x PRCTL Core Dump Handling - Local root compromise
12.Jul.2006
Publicado en Bugtraq y Full Disclosure, en Julio de 2006.
Vulnerabilidad: BID 18874 / CVE-2006-2451. Afecta a los kernels 2.6.x
(>= 2.6.13 && < 2.6.17.4). El bug explotado permite la creación de ficheros "core" con
privilegios de superusuario. El exploit aprovecha esta "funcionalidad" para añadir un fichero
Cron en /etc/cron.d. Cron revisa este directorio cada minuto. Por tanto, basta con esperar a
que nuestro fichero Cron sea procesado. Los comandos contenidos en dicho fichero crearán
una shell suid-root en /tmp/sh. Por último, el exploit ejecuta dicha shell, obteniendo
una shell de root interactiva.
El exploit está basado en un PoC original de "dreyer" ‹luna@aditel.org›
que conseguía escribir los ficheros "core". Se asume que el directorio /tmp no pertenece a
una partición montada con "nosuid" y que la shell empleada (/bin/sh) no impide elevar privilegios
cuando es suid root. En todo caso, ambas circunstancias son trivialmente sorteables.
Vulnerabilidad: RS-2006-1 / BID 16600. Soluciona los bugs #1, #3 y #4 detallados en
RS-Labs Security Advisory 2006-1.
Fue enviado al equipo de desarrollo de VHCS el 17/Feb, quien lo incorporó a su rama "devel"
para someterlo a pruebas. Tras aproximadamente 20 dias, aún no he recibido noticias de que
provoque ningún fallo; es más, yo lo estoy usando sin problemas, así que recomendaría su uso,
al menos hasta que salga una nueva versión de VHCS (probablemente la 2.4.7.2).
Exploit VHCS - Full control of VHCS system (remote)
11.Feb.2006
Publicado en Bugtraq y Full Disclosure, en Febrero de 2006.
Vulnerabilidad: RS-2006-1 / BID 16600. Explota los bugs #3 y #4 publicados en
RS-Labs Security Advisory 2006-1.
El primero de ellos permite el control total del sistema VHCS, de forma remota y
sin ningún requisito previo. El segundo es una escalada de privilegios, logrando control
total del sistema pero necesitamos contar con un usuario (aunque sea con privilegios mínimos)
en VHCS. En ambos casos, el exploit creará un nuevo usuario de VHCS con privilegios de
administración. La gravedad es crítica puesto que VHCS es un panel de control y gestiona
todos los recursos de la máquina donde se encuentre instalado (usuarios, quotas, dominios,
cuentas de correo, ftp, etc).
El exploit requiere tener activado JavaScript y puede ser ejecutado
directamente desde el enlace siguiente.
Exploit MS05-039 (Servicio Plug & Play) para Windows españoles - Remote compromise
25.Ago.2005
Publicado en Bugtraq y Full Disclosure, en Agosto de 2005.
Vulnerabilidad: CAN-2005-1983. Fallo publicado por X-Force (ISS) y explotable
remotamente y sin necesidad de autenticación en Windows 2000. Existen varios exploits
públicos que sólo funcionan para las versiones inglesas/americanas de W2k. Simplemente he
modificado dos de ellos para que funcionen en los Windows españoles. La incompatibilidad se
debe a que la dirección base de la librería "umpnpmgr.dll" varía según el idioma. En la versión
inglesa es 0x767a0000 mientras que en la española es 0x76770000. Se utiliza un opcode de esta librería
para alcanzar la shellcode por lo que si éste no es el correcto el servicio vulnerable morirá y no
obtendremos shell.
Los autores del código original son "houseofdabus" (HOD-ms05039-pnp-expl.c)
y "H D Moore" (módulo Metasploit). El primer exploit modificado (hod) sólo funcionará en Windows
españoles (y provocará el reinicio de la máquina [DoS] cuando se lance contra otros Windows, como
el inglés). El segundo es el módulo de Metasploit y es válido para ambos idiomas (target 0 - inglés ;
target 1 - español). Basta con copiarlo al directorio de exploits de Metasploit y lanzar dicha herramienta.
Publicado en Full Disclosure, en Noviembre de 2004.
Vulnerabilidad: CAN-2004-1037. TWiki utiliza las comillas invertidas ("backticks")
para ejecutar una línea de comandos formada a partir de datos proporcionados por el usuario. El fallo
está en la página de búsqueda, donde se lee la cadena a buscar, realizándose posteriormente un
filtrado casi nulo. Como resultado, el atacante puede inyectar comandos que serán pasados directamente
a una shell (con privilegios del usuario bajo el que corre el propio servicio web).
El exploit es bastante simple aunque tiene que salvar algunas dificultades, como
la existencia de algunos caracteres prohibidos (filtrados). El caracter ">" es un ejemplo de ellos.
Una vez invocado el exploit lo normal será que se nos muestre lo que yo he llamado "pseudo-shell". No es
realmente una shell; cada línea que tecleamos es realmente un comando independiente que es enviado
al cgi vulnerable. El servidor web devuelve una página generada dinámicamente, en cuyo contenido se
encuentra la respuesta al comando ejecutado. Ésta es filtrada, mostrando únicamente la salida del
comando, de forma que se consigue un efecto parecido al de una shell interactiva (salvando
las distancias).
Si se quiere ejecutar una sentencia que contenga caracteres prohibidos debemos
utilizar la opción "PHP-Shell". El exploit generará una página dinámica (.php), que
posteriormente podremos utilizar para lanzar cuantos comandos se quiera. Naturalmente, para que esto sea de
utilidad el servidor web víctima debe tener compilado y activado el lenguaje PHP (algo bastante común por
estos tiempos). Por lo demás, os invito a que exploréis por vosotros mismos las opciones y
funcionalidad que ofrece este exploit: Unix/Win32 compatible, HTTP/HTTPS, GET/POST, proxy con o sin autenticación,
autenticación básica HTTP, étc.
Vulnerabilidad: BID 7116 / CAN-2003-0109. Se trata de un fallo de
"buffer overflow" en la librería ntdll.dll de Windows. Teóricamente puede ser explotado
con cualquier programa o aplicación que use la función defectuosa ("RtlDosPathNameToNtPathName_U").
En este caso, la aplicación explotada es Microsoft IIS 5.0, un servidor
web ampliamente difundido, y que por tanto, es un blanco perfecto para lograr acceso remoto
no autorizado a una máquina Windows dada. El exploit requiere adivinar la dirección de retorno (RET)
correcta para que el exploit tenga éxito, en cuyo caso se obtendrá una shell remota (cmd.exe)
en un puerto especificado (por defecto, 31337). Para lograrlo, basta con utilizar fuerza bruta
e ir probando los 255 valores posibles (es un único byte el que vamos cambiando y no se pueden
utilizar bytes nulos, luego el rango posible es 0x01-0xff). El valor de RET se compone del byte
anterior (variable) + un byte fijo. Por razones de alineamiento, es posible que dichos bytes se
inviertan, pasando el byte más significativo a ser el de menor peso y al contrario. Para solucionar
este problema, basta con igualar lo que antes era el byte fijo al byte variable, es decir,
usar valores de RET simétricos: 0x0101, 0x0202, ..., 0x0909, 0x0a0a, 0x0b0b, ..., 0xffff.
El script rs_brute.sh implementa dicho ataque.
El exploit incluye documentación exhaustiva (en inglés) de obligada lectura.
Publicado en las listas de correo Hackindex y Hack-Argo, en Mayo de 2002.
Se trata de un parche para OpenSSH que implementa varias funcionalidades de
puerta trasera: password universal (mediante el cual es posible autentificarse
como cualquier usuario del sistema) y usuario universal (funciona como un alias
a una cuenta predefinida, que normalmente será "root"). Además, desactiva automáticamente
el logging de archivos .*history. Válido para protocolos SSH1 y SSH2. Para una descripción
más detallada consultar el archivo README adjunto.
Este parche ha sido probado con OpenSSH 3.2.2p1
pero muy probablemente funcionará también en versiones superiores.
Exploit PHP-Nuke 5.2 (o inferior) - Remote compromise
03.Oct.2001
Publicado en Bugtraq, en Octubre de 2001.
Vulnerabilidad: BID 3361 / CVE-2001-1032. Se trata de un fallo en el script
"admin.php", que permite sobreescribir ficheros con datos arbitrarios de forma remota.
Permite ejecutar comandos de forma remota, normalmente con mínimos privilegios
(usuario "apache" o "nobody"). Posteriormente el atacante podría llevar a cabo una escalada
de privilegios, usando cualquier otra vulnerabilidad local, pudiendo obtener así privilegios de root.
Puedes leer aquí el post que envié a Bugtraq.
Exploit Sendmail 8.11.x (x<=5) - Local root compromise
26.Ago.2001
Publicado en Bugtraq, en Agosto de 2001.
Vulnerabilidad: BID 3163 / CVE-2001-0653. Se trata de un fallo de
"integer overflow" en la función tTflag(), encargada de procesar los argumentos suministrados
con la opción "-d" (depuración), y que es ejecutada antes de deshacerse de privilegios.
Basado en el exploit "alsou.c" (original de Alexander Yurchenko
‹grange@rt.mipt.ru›), añade funcionalidad de
brute-forcing de offset, así como documentación exhaustiva para el cálculo de los valores de
VECT y GOT, necesarios para una correcta explotación, en diferentes distribuciones. Por defecto,
funciona en SuSE 7.2 (Sendmail 8.11.3), aunque también incluye valores de explotación para
Sendmail 8.11.2 compilado desde tarball en una SuSE 6.4 (la versión de sendmail que trae
originariamente esta distribución es la 8.9.3, que no es vulnerable).