Qué es un Ataque HTTP Verb Tampering
Qué es un Ataque HTTP Verb Tampering

Qué es un Ataque HTTP Verb Tampering

HTTP Verb Tampering es un tipo de ataque web en el que se utiliza una petición HTTP que no debería producirse normalmente dentro del protocolo. Esto puede permitir a un atacante robar información, modificar datos o realizar otra actividad maliciosa. Para proteger a tus usuarios y a ti mismo de tales ataques, debes entender qué es HTTP Verb Tampering y cómo mitigar los ataques.


Concepto de datos del sistema HTTP
Concepto de datos del sistema HTTP

Descripción de HTTP Verb Tampering

La HTTP Verb Tampering (o manipulación de verbos HTTP) es un ataque que aprovecha las vulnerabilidades de los mecanismos de autenticación y control de acceso de los verbos HTTP (también conocidos como métodos HTTP).

Muchos mecanismos de autenticación sólo limitan el acceso a los métodos HTTP más comunes, permitiendo así el acceso no autorizado a recursos restringidos por otros métodos HTTP.

Contexto de los Métodos HTTP

Como mencionaba anteriormente, esta vulnerabilidad tiene que ver con el error de configuración del control de acceso para los métodos del protocolo HTTP. La autenticación contundente no está habilitada para todos los métodos de servidor web HTTP permitidos.

Veamos algunos métodos HTTP:

  • GET – se utiliza para recuperar información de un servidor en un URI determinado.
  • HEAD – igual que GET, pero el servidor sólo envía las cabeceras y la cadena de estado sin el cuerpo del mensaje HTTP.
  • POST – se utiliza para enviar datos a un servidor.
  • PUT – se utiliza para descargar el contenido de la solicitud a un URI determinado.
  • DELETE – elimina el recurso especificado en el URI.
  • CONNECT – convierte la conexión existente en un túnel.
  • OPTIONS – se utiliza para obtener los parámetros de la conexión HTTP actual.
  • TRACE – crea un bucle de retorno por el que el cliente puede ver lo que está pasando con el mensaje en todos los nodos de transmisión.

Hay otros como PATCH, PROPFIND, PROPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, SEARCH, POLL, NOTIFY y otros. Seguramente habrá más novedades en el futuro.

Descripción del Ataque

Ilustración de un ataque HTTP Verb Tampering
Ilustración de un ataque HTTP Verb Tampering

Explicación

En la imagen, Ted (derecha) le pregunta su nombre a Barney (izquierda). Éste último le dice su nombre real y su “acceso es restringido”. Sin embargo, cuando proporciona otro “método de entrada” como un nombre ficticio, su ingreso queda concedido.

Muchos mecanismos de autenticación del servidor web utilizan controles de acceso y autenticación basados en verbos. Dichos mecanismos de seguridad incluyen reglas de control de acceso para solicitudes con métodos HTTP específicos. Por ejemplo, un administrador puede configurar un servidor web para permitir el acceso sin restricciones a una página web mediante peticiones HTTP GET, pero restringir las peticiones POST sólo a los administradores. Sin embargo, muchas implementaciones de mecanismos de seguridad basados en verbos aplican las reglas de seguridad de manera insegura, permitiendo el acceso a recursos restringidos mediante métodos HTTP alternativos (como HEAD) o incluso cadenas de caracteres arbitrarias.

Por ejemplo, Java Platform Enterprise Edition (Java EE) admite la autenticación basada en verbos y el control de acceso a través del archivo web.xmlconfiguration. En Java EE, se puede limitar el acceso a los directorios admin/ para los usuarios “admin” añadiendo lo siguiente a web.xml:

<security-constraint>
<web-resource-collection>
<url-pattern>/admin/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>

Estas reglas de seguridad garantizan que las peticiones GET o POST a los directorios /admin por parte de usuarios que no son administradores serán bloqueadas. Sin embargo, las peticiones HTTP a los directorios admin/ que no sean GET o POST no se bloquearán. Mientras que una petición GET de un usuario no administrador será bloqueada, una petición HEAD del mismo usuario no lo será. A menos que el administrador configure explícitamente el servidor web para denegar todos los métodos que no sean GET y POST, el mecanismo de control de acceso se puede eludir simplemente utilizando métodos diferentes que sean compatibles con el servidor.

Alerta

Otros ejemplos de servidores web afectados por este problema son IIS 6.0, Apache 2.2.8 y TomCat 6.0.

En algunos servidores web -por ejemplo, Apache 2.2/PHP- es incluso posible saltarse el mecanismo de control de acceso utilizando cadenas de caracteres arbitrarias para los métodos HTTP. Estos servidores web implementan gestores por defecto para las peticiones que no están vinculadas a un método HTTP específico. A diferencia de un Servlet HTTP en el que una petición GET sólo se gestiona si se define un doGet(), algunos servidores web intentan procesar todos y cada uno de los métodos, incluidos los desconocidos. Así, sustituyendo un método legítimo por uno arbitrario (MPRV en lugar de GET), el atacante puede aprovechar las vulnerabilidades de la lógica de procesamiento interna y saltarse el mecanismo de control de acceso.

Control de SeguridadPermite verbos HTTP en la políticaHEAD puede estar en la políticaPolítica Eludible
All Java EE (web.xml)
APP.NET AuthzSí (no usar deny all)
SiteMinderNo (posiblemente si la protección de recursos por defecto = unprotected)
.htaccessSí (si no se utiliza <LimitExcept>)

Ejemplo y Desafío CTF: HTTP Verb Tampering

Para ejemplificar el ataque HTTP Verb Tampering, utilizaremos el desafío en root-me.org, llamado “HTTP – Verb tampering“. Da 15 puntos por resolver el puzzle, que es un poco más difícil que el nivel de entrada. Puedes encontrar otros desafíos en +100 Sitios web que te enseñan cómo hackear legalmente.

Desafío HTTP - Verb tampering en root-me
Desafío HTTP – Verb tampering en root-me

Solución

Ir a la página de empleo:

http://challenge01.root-me.org/web-serveur/ch8/

El sistema de autenticación se activa y pide un nombre de usuario y una contraseña.

Reto ch8 solicita usuario y contraseña
Reto ch8 solicita usuario y contraseña

No hay nada más que podamos hacer aquí. Abre una línea de comandos y utiliza curl para enviar una solicitud al servidor.

curl http://challenge01.root-me.org/web-serveur/ch8/

Por defecto, curl envía la petición utilizando el método GET. La respuesta que obtenemos es un 401 Authorization Required. Al mismo tiempo, vemos que el servidor utiliza un servidor web Apache.

Desafío con 401 Authorization Required
Desafío con 401 Authorization Required

Cambia el método a POST.

curl -X POST http://challenge01.root-me.org/web-serveur/ch8/

El resultado es el mismo. 401 Authorization Required.

Método POST con 401 Authorization Required
Método POST con 401 Authorization Required

Comprueba si el administrador ha configurado la autenticación para todos los métodos. Cambia el método a OPTIONS.

curl -X OPTIONS http://challenge01.root-me.org/web-serveur/ch8/

El resultado es el contenido de la página.

Método OPTIONS usado en el desafío de root-me
Método OPTIONS usado en el desafío de root-me

Aquí está la bandera: a23e$dme96d3saez$$prap

Valídalo.

Desafío HTTP - Verb tampering validado con éxito
Desafío HTTP – Verb tampering validado con éxito

Si la bandera encaja, ganamos 15 puntos. ¡Bien hecho!

Prevención del Ataque HTTP Verb Tampering

Los ataques de manipulación de verbos aprovechan los fallos de configuración en el mecanismo de control de acceso o las vulnerabilidades en el código de los gestores de peticiones. Como se presenta en el ejemplo anterior, bloquear las peticiones que utilizan métodos HTTP no estándar no es suficiente porque en muchos casos un atacante puede utilizar un método HTTP legítimo como HEAD.

Entonces:

  • Limita la lista de métodos HTTP disponibles en el servidor web.
  • Si configuras la autenticación, asegúrate de que está activada para todos los métodos HTTP disponibles.

El servidor web también debe manejar correctamente los métodos HTTP inexistentes. Por ejemplo, vamos a especificar el método ES_GEEKS:

curl -X ES_GEEKS http://challenge01.root-me.org/web-serveur/ch8/
Seguridad para HTTP Verb Tampering
Seguridad para HTTP Verb Tampering

En el caso de Apache + .htaccess, no utilices las restricciones verbales de HTTP ni uses LimitExcept.

Consulta la referencia de OWASP para obtener más información sobre cómo solucionar este problema en otras plataformas.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda