HTTP Response splitting – Un tipo de ataque muy versátil

En lo que respecta a aplicaciones Web, el primer tipo de ataque o vulnerabilidad que se debe analizar es el “HTTP Response splitting” y de hecho es así ya que es el primer ejercicio disponible en la aplicación OWASP WebGoat.

Esta vulnerabilidad se genera en la aplicación Web, al aceptar el uso o ingreso de caracteres potencialmente maliciosos, en este caso particular retorno de carro “CR” y avance de línea “LF”. Al ser una vulnerabilidad generada por la aplicación, es independiente de la plataforma sobre la cual funciona.

Este tipo de vulnerabilidad y/o ataque puede desencadenar en otros tipos de ataques, a saber:

  1. Cross user defacement (Desfiguración cruzada de usuario)
  2. Web cache poisoning (Envenenamiento del Web cache)
  3. Hijacking pages with sensitive user information (Secuestro de páginas con información confidencial del usuario)
  4. Cross-site scripting (XSS)

El ataque de desfiguración cruzada de usuario (Cross user defacement) permitiría al atacante modificarle la página que un usuario recibe como respuesta a una petición realizada al servidor Web. Este tipo de ataque es muy localizado y se afecta a un solo usuario a la vez.

El ataque de envenenamiento de la Web cache (Web cache poisoning), permite modificar una página que se encuentra en el cache del servidor y afectaría a todos los usuarios que utilizan el cache del servidor, por lo que el impacto y el alcance es mayor que el generado por la desfiguración cruzada de usuario.

El secuestro de páginas con información confidencial del usuario (Hijacking pages with sensitive user information) y el Cross site scripting (XSS), permitirían a los atacantes robar información sensible de los usuarios, entre ellas la importante información financiera que tanto nos interesa proteger.

¿Porqué se produce este tipo de vulnerabilidad?

Este tipo de vulnerabilidad generalmente se producen en los procesos de redirección de páginas en las aplicaciones Web al pasar como parámetros en el URL elementos introducidos en campos de entradas de datos sin depurar.

Dicho en cristiano, el atacante puede introducir secuencias de caracteres maliciosos para romper la ejecución “normal” de la aplicación y luego introducir su propia versión de la página, destinada a desfigurar o modificar el cache de la aplicación.

Tomemos como ejemplo el siguiente código:

<% response.sendRedirect(“/by_lang.jsp?lang=”+request.getParameter(“lang“)); %>

Una llamada “normal” en esta página se vería así:

redir_lang.jsp?lang=English

En esta aplicación Web se permite seleccionar el lenguaje utilizado, esperando una entrada en el campo “lang“, dicho parámetro luego es utilizado en el URL. Si la aplicación no contempla la depuración o validación del parámetro “lang” este podría ser explotado de la siguiente forma:

redir_lang.jsp?lang=foobar%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20ok%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2019%0d%0a%0d%0a<html>Shazan</html>

Aquí se ve (resaltado) el uso malicioso de los caracteres “CR” y “LF” (%0d%0a) para romper la ejecución del programa y sustituir la página de respuesta esperada por algo como: <html>Shazan</html>

Este es un ejemplo del menor de los males, la desfiguración cruzada de usuario (Cross user defacement)

¿Cómo prevenir este tipo de ataques?

Como dije anteriormente este tipo de vulnerabilidad es introducida por la aplicación y debe ser solventada en la aplicación. La depuración de las variables de entrada es la solución al problema y debe validar que no sean utilizados caracteres especiales en este caso particular %0d%0a.

Referencia: “Divide and Conquer” white paper by Amit Klein

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s