miércoles, 9 de septiembre de 2009

Microsoft Windows SMB 2.0 SRV2.SYS Negotiate Request BSoD

Hola!,

Bueno, ayer se han publicado los parches para este mes de Microsoft y mas alla del parche que arregla un problema en la implementacion del protocolo TCP que varios, no solo MS, tuvieron que salir a subsanar, lo mas interesante esta semana sin duda fue el BSoD publicado el lunes que afecta a Windows Vista y Windows 7.

El advisory de MS aqui.



El bug esta en el header de SMB, v2, de la nueva implementacion que nos provee MS a partir de Windows Vista.

La funcion vulnerable es _Smb2ValidateProviderCallback() que mediante un dereferenced call nos permite controlar un short proveniente de un array. El campo problematico es el Process ID High del header de SMB en el SMB_NEGOTIATE:

SMB_Header

{

UCHAR Protocol[4];

UCHAR Command;

SMB_ERROR Status;

UCHAR Flags;

USHORT Flags2;

USHORT PIDHigh; // este es el problema cuando se le pasa "&"

UCHAR SecurityFeatures[8];

USHORT Reserved;

USHORT TID;

USHORT PIDLow;

USHORT UID;

USHORT MID;

}

Cuando en ese campo se introduce un "&", produce un BSoD. La explotacion no es trivial pero si existe una posibilidad.

Ya hay un PoC publico para demostrar el fallo aqui.

Para mas informacion pueden visitar las siguientes paginas:

1- http://blog.48bits.com/?p=510#comments
2- http://reversemode.com/
3- http://www.securityfocus.com/bid/36299/

Solo como comentario les digo que he probado el PoC en un Windows 7 Ultimate x64 RTM y no ha pasado nada, el SMB_NEGOTIATE se hace efectivamente con el "&" en el campo PIDHigh, pero no hay BSoD, el SMB_NEGOTIATE Response llega.

UPDATE1:
Metasploit acaba de sacar un exploit (no PoC) para esta vuln.

http://metasploit.com/svn/framework3/trunk/modules/exploits/windows/smb/smb2_negotiate_func_index.rb

Saludos.

No hay comentarios: