lunes, 24 de julio de 2017

HPP Http Parameter Pollution | Contaminación de Parámetros HTTP

HTTP Parameter Pollution (HPP)



En la mayoría de las paginas web que los usuarios visitan, estos deben de proporcionar datos de entrada a dicha pagina web, por medio de parámetros quienes se encargan de enviar dichos datos a la aplicacion web, para que esta funcione adecuadamente, esto lo podemos ver por ejemplo en formularios de loggin, para enviar correos electrónicos, para comentar, llenar encuestas, hacer busquedas de informacion, etc. 

Ejemplo:

El siguiente codigo HTML es de un formulario muy simple, para ejemplificar la parte de parametros.

<html>
<body>
<form action="drok3r.php">
Numero de tarjeta de credito:<br>
<input type="text" name="NumT">
<br>
NIP (codigo de seguridad):<br>
<input type"text" name="NIP">
<br><br>
<input type="submit" value="Enviar">
</form>
</body>
</html>

El resultado de este codigo es:


Cuando llenemos los campos, damos clic en el boton enviar, teniendo en cuenta que mandaremos la informacion, a un archivo .php (drok3r.php) en el servidor.

Por ejemplo si llenamos el campo "Numero de tarjeta de credito:" con el dato 11223344556677 y el campo "NIP" con el dato 666, al dar clic en el boton enviar se mandaría los siguiente a nuestro archivo  .php almacenado en nuestro servidor "NumT=11223344556677&NIP=666".

Con este formulario se esperan obtener valores para los parámetros, con los cuales la aplicacion web, puede trabajar, incluso puede ser un loggin.

La forma en que los parámetros son llenados dependerán del lenguaje de programación y del servidor. Teniendo en cuenta, que un parámetro puede tener mas de un valor. 

OWASP - HPP 


HPP Http Parameter Pollution

Consiste en la inyección de delimitadores de query string codificados en otros parámetros existentes. Si el parámetro en el que se ha realizado la inyección no se valida correctamente y se utiliza decodificado para generar una URL, el atacante puede insertar uno o más parámetros en dicha URL. Proveer varios parámetros con el mismo nombre pueden hacer que una aplicacion interprete los valores de maneras erróneas.

Se debe tener en cuenta que proveer varios parametros con el mismo nombre no es un vulnerabilidad, pero partiendo de esto, un atacante lo puede aprovechar, el funcionamiento de dicha aplicacion, para poder atacar.

Consecuencias de este ataque

Este tipo de ataque depende de muchos factores, entre los que se encuentran principalmente la lógica de la aplicacion, el tipo o función de la aplicacion, partiendo de estos factores es la gravedad del impacto de aprovechar este "error".

Consecuencias de HPP:
  • Sobre escritura de parámetros.
  • Modificación del comportamiento de la aplicacion.
  • Evitar la validación de entrada.
  • Desencadenar errores de aplicacion.
  • Modificar valores de variables internas.
  • Acceso no autorizado.
  • Acceso y posible explotación de variables fuera del alcance directo.
  • Ataques del lado del cliente y del servidor
En cuanto a los ataques del lado del servidor, es posible burlar los sistemas de protección WAF's. 


Un ejemplo de HPP en una aplicación

Por ejemplo, consideremos una aplicación web de votaciones que permite a los usuarios participar en diferentes elecciones y votar a su candidato favorito. La aplicación está escrita en JSP. En caso de múltiples instancias de un parámetro, el método Request.getParameter("par") de JSP devuelve el primer valor del parámetro. 

La aplicación recibe un parámetro (“eleccion_id”) que es el identificador de la elección concreta en la que está participando el usuario. En función de los valores del parámetro, la aplicación genera una página que contiene un enlace para cada uno de los candidatos de la elección correspondiente.

Por ejemplo, en este fragmento se muestra una página de una elección con dos candidatos en la que el usuario puede votar a su candidato pinchando en el enlace deseado: 

Url : http :// servidor / eleccion . jsp ? eleccion_id =4568
Enlace1 : <a href =" votar . jsp? eleccion_id =4568& candidato = white ">
Voto para Mr. White </a>
Enlace2 : <a href =" votar . jsp? eleccion_id =4568& candidato = green ">
Voto para Mrs. Green </a> 

Supongamos que Pedro, que es un seguidor de Mrs. Green, quiere modificar el resultado de las elecciones. Analizando la página se da cuenta de que la aplicación no valida correctamente el parámetro “eleccion_id”. Por tanto, utiliza la vulnerabilidad HPP para inyectar el parámetro “candidato”en el parámetro “eleccion_id”, de la siguiente forma:

http://servidor/eleccion.jsp?eleccion_id=4568%26candidato%4Dgreen

Pedro envía esta URL a Alicia. Cuando Alicia pincha en el enlace, es dirigida al sitio original de las elecciones donde puede votar a su candidato para esa elección. Sin embargo, como la aplicación utiliza el parámetro “eleccion_id” para formar los enlaces, cuando Alicia visita la página, el valor inyectado para el candidato se incluye en las URLs:

http :// servidor / eleccion . jsp? eleccion_id =4568%26candidato%3Dgreen

Enlace 1: <a href = votar . jsp ? eleccion_id =4568&candidato=green&candidato =white >
Voto para Mr. White </a>

Enlace 2: <a href = votar . jsp ? eleccion_id=4568&candidato=green& candidato =green >
Voto para Mrs. Green </a> 

No importa en qué enlace pinche Alicia, el script “votar.jsp”recibirá dos instancias del parámetro “candidato”. El primer valor del parámetro siempre es “green”. Si el desarrollador de la aplicación utiliza la funcionalidad básica de Java para obtener un solo valor para el parámetro “candidato”, sólo se obtendrá el primer valor del parámetro (es decir, “green”) y el segundo valor (que tiene el voto de Alicia) es descartado.


Bypass de Autenticación

De entre todas las paginas web, que tenian este problema, uno de los que mas destaco fue Blogger, el error le permitio a los atacantes tomar el control del blog objetivo, mediante la siguiente peticion HTTP:

POST /add-authors.do HTTP/1.1
security_token=attackertoken&blogID=attackerblogidvalue&blogID=victimblogidvalue&authorsList=goldshlager19test%40gmail.com(attacker email)&ok=Invite
El error fue encontrado en mecanismo de autenticación utilizado por la aplicación web, ya que la comprobación de seguridad se realizó en el primer blogIDparámetro, mientras que la operación real utilizó la segunda ocurrencia.

Detectar HPP

Actualmente muchos, scanner de vulnerabilidades web, no detectan este tipo de "vulnerabilidades" en las aplicaciones web. Sin embargo existe una extensión para Google Chrome llamada HPP Finder.



HPP Finder es una extensión de Chrome diseñada para detectar potenciales vectores de ataque HPP. HPP Finder puede detectar URLs y formularios HTML que podrían ser susceptibles a la contaminación de parámetros, pero no es una solución completa contra HPP.



Por otro lado, tenemos la tool de OWASP, ZAP [ https://github.com/zaproxy/zap-extensions ]

Se debe tener en cuenta, que dar con este tipo de fallos, es mas lógico ya que las pocas herramientas automáticas, pueden dar falsos positivos, incluso pueden no indicarnos los fallos.




-----[ FUENTES ]-----
Ejemplo - www.elladodelmal.com
Imagen - OWASP

0 comentarios:

Publicar un comentario