Parche no oficial y workaround para la vulnerabilidad VML de Internet Explorer

El pasado día 19 comenté que Internet Explorer sufría una grave vulnerabilidad.

Ese día comenté que no había remedio, ya que ni existía parche, ni existía workaround conocido para contener la vulnerabilidad. Hoy me he topado con un mensaje de Grohl, de hace un par de días, en el que me comenta que los del Zeroday Emergency Response Team (ZERT) se han currado un parche para el problema (parche que obviamente no es oficial, el oficial a saber cuando lo podéis instalar)

No es una noticia fresca fresca, pero seguro que más de un lector del blog ni ha parcheado ni ha ejecutado algún workaround para este gravísimo problema, con lo que nunca está de más ponerlo. Gracias por la información, Grohl ;)

El parche es inocuo y fiable, con código fuente disponible para verificarlo de cabo a rabo. Se puede descargar aquí. Es un ejemplo que os aconsejo a todos para aprender a inspeccionar código, por su sencillez. Eso sí, para compilarlo os hará falta Visual Studio .NET, ya que es un proyecto Visual C.

Si abrís el fichero main.h, veréis una nota comentada en la que se dice que

////// Patching Steps: //////
// 1) look for the function we want to patch (using a binary signature).
// 2) patch the vulnerable function, this patch won’t block the function but rather really fix it.
//

El proceso es sencillo: se hace una búsqueda del código a parchear, ya que el componente vulnerable es una DLL llamada vgx.dll. Para ello define una firma binaria, declarada en unsigned char original_32bits[0x23], unsigned char patched_32bits[88], unsigned char original_64bits[429] y unsigned char patched_64bits[337]. Una vez localizada la secuencia a parchear mediante el bucle unsigned char* pos = binStrStr(buf, size, original_32bits, sizeof(original_32bits));, se procede al parcheo. El código tiene bastantes subrutinas de manejo de error, pero si todo va bien, finalmente se invocará return PATCH_SUCCESS; y el proceso habrá terminado, eso sí, habiendo pasado de la DLL vulnerable (WCHAR suffix[] = L»\\Microsoft Shared\\vgx\\vgx.dll»;) a la DLL parcheada (WCHAR newFile[] = L»\\Microsoft Shared\\vgx\\patchedvgx.dll»;)

Es posible también aplicar métodos de mitigación que no requieran parchear. Para ello, echad un ojo a lo que nos cuenta Securiteam. Se trata, a fin de cuentas, de desregistrar esa DLL vulnerable:

regsvr32 /u «%CommonProgramFiles%\Microsoft Shared\VGX\vgx.dll»

De todos modos, creo que lo más sensato es no utilizar Internet Explorer. Es un producto demasiado conocido por las redes organizadas de crimeware, y sus deficientes características son una invitación en bandeja de plata para que sea explotado de una manera prácticamente continua. Existiendo alternativas mejores y gratuítas, como Opera o Firefox, no tiene ningún sentido emplear Internet Explorer.

Saludos y buen domingo :)

2 comentarios sobre “Parche no oficial y workaround para la vulnerabilidad VML de Internet Explorer

  1. Mmm se agradece la información, aunque apenas use IE seguro que es utilísima a los muchos usuarios que tiene. Ahmmm precisamente andaba leyendo esta entrada relacionada: http://www.kriptopolis.org/node/2927

    Me intrigaba el fallo en Cpanel que se menciona y que parece ser fue utilizado para fastidiar a mucha gente. Es algo grave si tenemos en cuenta que la licencia de Cpanel cuesta un pastón. :-(

    Saludos. :-)

Comentarios cerrados.