domingo, 3 de mayo de 2015

Actualización de seguridad para Google Chrome

Google ha publicado una actualización de seguridad para su navegador Google Chrome para todas las plataformas (Windows, Mac y Linux) que se actualiza a la versión 42.0.2311.135 para corregir cinco nuevas vulnerabilidades.

Como es habitual, Google solo proporciona información sobre los problemas solucionados reportados por investigadores externos o las consideradas de particular interés. De igual forma Google retiene información si algún problema depende de una librería de terceros que aun no ha sido parcheada. En esta ocasión, aunque se han solucionado cinco vulnerabilidades, se facilita información de una de ellas.

Se corrige una vulnerabilidad de gravedad alta, con CVE-2015-1243, de uso después de liberar en DOM. Por otra parte, también del trabajo de seguridad interno, varias correcciones procedentes de auditoría interna, pruebas automáticas y otras iniciativas (CVE-2015-1250).

Esta actualización está disponible a través de Chrome Update automáticamente en los equipos así configurados.

Más información:

Stable Channel Update


Antonio Ropero
Twitter: @aropero


sábado, 2 de mayo de 2015

La extensión de Chrome contra phishings de Google, todavía evadible

Hace unos días Google lanzó una extensión open source para Google Chrome, "Password Alert", que busca principalmente mitigar los ataques de phishing dirigidos a obtener cuentas de Google.

Además de comprobar si cada página visitada "parece" un phishing de cuentas de Google (comprobando el código HTML en busca de patrones), compara lo que escribes en ésta con tu contraseña de Google, que la extensión almacena localmente de forma segura. Concretamente, guarda parte (37 bits) del SHA1 salteado, lo que evita recuperar la contraseña original en un ataque de fuerza bruta. Ya que se almacenan pocos bits del hash, habría muchas entradas de la función hash cuya salida coincidiese con el hash parcial que se almacena, evitando la fácil recuperación de la contraseña original.

Esto último tendría relevancia en el caso de que el atacante pudiese obtener el hash parcial almacenado localmente, lo que sería una grave vulnerabilidad. Pero no se conoce que sea posible realizar un ataque de estas características. Lo que sí es posible es evitar que la extensión sea completamente efectiva. Tan pronto como publican un parche que corrige una forma de evasión, se publica otra. Y en el momento de publicación de esta noticia, vuelve a ser posible evitar que funcione correctamente la extensión.

Paul Moore, un consultor de seguridad informática publicó en menos de 24 horas tras la publicación de la extensión, la primera forma de evitar el aviso que genera la extensión cuando se detecta un phishing de Google. El problema residía en que el aviso se ejecutaba en el mismo contexto que el código JavaScript de la página, y bastaba con ejecutar cada 5 milisegundos una función que buscase el aviso por 'id' y lo eliminase. Ésta era la prueba de concepto, a incluir en cualquier parte del HTML de la página que quisiese evadir la extensión:

**** CÓDIGO:

<!-- BYPASS GOOGLE'S PASSWORD ALERT "PROTECTION" -->
<script type="text/javascript">
  setInterval(function() {
    if(document.getElementById("warning_banner")) {
      document.getElementById("warning_banner").remove();
    }
}, 5);
<script>

****

La respuesta de Google no se hizo esperar. El mismo día (30 de abril) se publicó un parche que corregía esta forma de evasión, trasladando el aviso a una nueva pestaña, evitando así que fuese eliminado por el código JavaScript de la web sospechosa al estar en un contexto distinto. La versión 1.4 de la extensión veía la luz.

El día siguiente (1 de mayo), Moore desarrolló otra prueba de prueba de concepto que evitaba que se detectase el tecleo de la contraseña. Esta vez lo consiguió registrando una función para el evento 'keypress', que refrescase la página cada vez que se registrase una pulsación de teclado. Este método no es tan estable como el anterior, ya que requiere que el usuario teclee la contraseña a una velocidad moderada o alta, para que no le dé tiempo a la extensión a ejecutarse entre actualizaciones de la página. En cualquier caso, Moore afirma que funciona la mayoría de las veces. Pero se publica la versión 1.6 de la extensión y deja de hacerlo.

Tal y como hemos podido comprobar desde Hispasec, la última versión de la extensión disponible en la Chrome Web Store en el momento de escribir esta publicación (la 1.6) sigue siendo evadible. Basta con incluir la página que se quiere disimular en un 'iframe' con el atributo 'sandbox="allow-forms"'. Esto hará que se desactive JavaScript para ese 'iframe' (entre otras cosas) y por ese atributo, permitirá formularios, que es lo que usan típicamente los phishings para robar credenciales. Y si además se quiere evitar el aviso inicial consecuencia de la búsqueda de patrones en la página web, se puede aprovechar que la extensión sólo comprueba los primeros 100 kilobytes de la página. Repetir cualquier etiqueta 'meta' al principio para rellenar, por ejemplo, es suficiente.

A pesar de que esta extensión está cubierta por el programa de Google que recompensa por encontrar vulnerabilidades en sus productos, lo cierto es que Google nunca se ha pillado los dedos con esta extensión. Antes de anunciarse ésta públicamente, ya especificaron en el SECURITY.md en GitHub que ninguna forma de evitar la detección de phishings iba a estar cubierta por el programa. Y que de hecho esperaban tener que jugar al gato y al ratón según los atacantes fuesen desarrollando formas de evasión. Y que si los atacantes se esforzasen con ahínco en ello, se pensarían el meter la funcionalidad directamente en Chrome, para complicarlo aún más.

Más información:

Protect your Google Account with Password Alert (Anuncio oficial)

Código fuente relacionado con guardar la contraseña

Behold: the drop-dead simple exploit that nukes Google’s Password
Alert (Primeraprueba de concepto)

Google’s new version of Password Alert blocking bypass is bypassed
(Segunda prueba de concepto)

Conversación en Twitter sobre la última prueba de concepto para la versión 1.6

Elemento HTML 'iframe'



Carlos Ledesma