Cómo eludir el filtro antiXSS en Chrome y Safari (descubierto por Eleven Paths)

lunes, 20 de enero de 2014

Los navegadores modernos cuentan con un filtro antiXSS que protege a los usuarios de algunas de las consecuencias de este tipo de ataques. Normalmente, bloquean la ejecución de cross site scriptings de forma que el código inyectado (normalmente JavaScript o HTML) no se ejecuta en el navegador de la víctima. Chrome llama a este filtro XSSAuditor. Nuestro compañero Ioseba Palop descubrió una manera de eludirlo hace meses. Puesto que ya se ha resuelto en la versión principal de Chrome, publicamos los detalles técnicos.

En ElevenPaths, hemos encontrado una forma de eludir el filtro antiXSS de Chrome. Esto significa que si la víctima visita una web con un problema de XSS del que se está intentando aprovechar un atacante, no estaría totalmente protegido. El fallo se basa en un uso incorrecto del atributo srcdoc de la etiqueta IFRAME, incluido en la definición de HTML5. Para realizar un ataque XSS en el navegador Google Chrome usando este fallo, la web debe incluir un IFRAME y debe ser capaz de leer cualquier atributo de este elemento desde parámetros HTTP (GET o POST) sin aplicar filtrado de caracteres. Después, en el parámetro IFRAME, el atributo srcdoc se puede incluir con código JavaScript. Chrome no lo filtra y se ejecutará.

Para reproducir la PoC, debería haber una página con un IFRAME como este.

Y la inyección HTML en el parámetro src sería:


y el filtro antiXSS fallaría y dejaría correr el script.


Google derivó el problema a Chromium, que no trata estas elusiones como problemas de seguridad, puesto que  XSSAuditor se considera una línea de defensa secundaria.

El problema se reportó el 23 de octubre. Lo arreglaron dos días después, haciendo que XSSAuditor cazara las propiedades reflejadas de srcdoc incluso sin una inyección en la etiqueta "IFRAME",. Chrome lo ha corregido en su versión 32.0.1700.76.

Otro fallo

Hace unas semanas, en este post, alguien se fijó en nuestra PoC como inspiración y desarrolló otra forma de eludir el filtro. Este fallo todavía no está corregido. El truco es inyectar una etiquesta "script" de apertura en un parámetro que se escriba directamente en el stream de salida de la respuesta HTTP (es decir, sin filtrar ningún carácter al igual que en el caso anterior). Bajo esta escritura debe existir contenido dentro de etiquetas scripts que pertenezcan a la propia página.


El comportamiento del navegador será incluir nuestra inyección (recordemos que sin cierre de etiqueta), obviar la apertura de "script" de la propia web, y ahora sí, utilizar el cierre de la propia web para generar un script bien formado y ejecutarlo sin ningún tipo de problema, consiguiendo así un bypass de XSSAuditor.



Safari, todavía vulnerable

Safari para Mac e iPhone también son vulnerables. Confirmaron la recepción del correo, y nos dijero que estaban trabajando en ello. Parece que todavía lo están, puesto que el programa aún es vulnerable. Cada vez que se ha intentado contactar con ellos, la respuesta que no había novedades y que estaban trabajando en ello. El filtro de Internet Explorer impide la ejecución, y Firefox no implementa ningún filtro anti XSS.

8 comentarios:

  1. ¿Nadie ha pensado en dar los créditos pertinentes al descubridor de la segunda POC? "En vez de alguien" ¿Qué tal poner sus datos? ¿Quizá estamos atribuyéndonos méritos que no nos pertenecen? (OTRA VEZ)

    ResponderEliminar
  2. Hola @Anónimo. La página del descubridor del segundo PoC está enlazada y el descubrimiento acreditado. Su nick en el blog es mramydnei, no hay mucha más información.

    No nos consta que nos hayamos acreditado méritos que no nos pertenecen ni en esta ni otras ocasiones. ¿Nos indicas en qué entrada para poder arreglarlo si hemos cometido un error? Gracias.

    ResponderEliminar
  3. si cierto. Bonita curiosidad. Catalogado de fallo crítico. Cierto?

    ResponderEliminar
  4. Hola @Anónimo. No es una vulnerabilidad crítica (solo las que permiten ejecución de código sin intervención del usuario se consideran así, y afortunadamente en Chrome son muy raras), pero sí podrían ser más que una curiosidad en páginas que usen iframes. Como dicen en ThreatPost sobre el ataque (https://threatpost.com/xss-filter-bypass-bug-found-in-chrome-and-safari/103761):

    "Robert Hansen, a security researcher and director of product management at WhiteHat Security, said the attack could be a problem, although it’s not the most common XSS attack scenario. The attack does rely on being injected into an existing iframe tag. That does happen, but it somewhat rare compared to the more common HTML or parameter injection variants..."

    ¡Gracias!

    ResponderEliminar
  5. Disculpa,a mi varias veces al dia al desbloquear mi móvil me aparece la ventana q dice como dirección chrome://srcdoc/ que hago?? como lo desaparezco?? La verdad no tengo idea y agradecería muchísimo su ayuda!! Gracias

    ResponderEliminar
    Respuestas
    1. Buenos días!

      Aun siendo un poco molesto y laborioso y con el fin de eliminar no solo este fallo, sino cualquier otro tipo de amenaza que pudiese tener en su SmartPhone, nuestra recomendación es restaurar el terminal a fábrica (sin guardar y mucho menos restaurar copia de seguridad alguna), configurándolo desde cero. Dependiendo del terminal del que disponga se realizará de una u otra manera.
      Por supuesto le recomendamos no utilizar fuentes externas (que no sean Google Store, o Apple Store, o Marketplace de Microsoft) para la instalación de aplicaciones en su Smartphone.

      Saludos cordiales del equipo de Eleven Paths.

      Eliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar