XUT_ / COURSES / PENETRATION TESTER

HTTP-2 Request Tunneling - Bypassing Frontend Restrictions

Bypassear las Restricciones del Frontend

EN algunos escenarios, verás que el proxy del frontend refuerza restricciones en qué recursos pueden ser accedidos en el backend de la web. Por ejemplo, imagina que tu sitio tiene un panel de administración en /admin, pero no quieres que sea accesible a todo el mundo en Internet. Como solución simple, podrías usar una restricción en el proxy frontend para no permitir ningún intento de acceder a /admin sin requerir cambios en el backend.

Tratemos de acceder a dicho directorio, y obtendremos un mensaje que nos dice que la petición ha sido denegada:

HTTP-2 Request Tunneling - Bypassing Frontend Restrictions

Una vulnerabilidad de request tunneling nos permitiría contrabandear una petición al backend sin que el proxy del frontend se diera cuenta, sobrepasando efectivamente los controles de seguridad del front. Considera la siguiente petición HTTP/2:

HTTP-2 Request Tunneling - Bypassing Frontend Restrictions

NOTE

Estamos usando una petición POST para este escenario. Aunque no es requerido para que este tipo de ataque funcione, hay una diferencia fundamental entre cómo se tratan las peticiones GET y POST por parte del proxy frontend. Si un proxy implementa cacheo, una petición GET puede ser servida desde la caché del proxy, por lo que nada será redireccionado al backend. Por el contrario, una petición POST no es servida normlemente desde la caché.

Cuando el frontend ve la petición HTTP/2, la interpreta como dirigida a /hello, que está permitido por el ACL del proxy. En el backend, sin embargo, la petición HTTP/2 se parte en dos peticiones HTTP/1.1, donde la segunda apunta a /admin. Date cuenta que la segunda petición no está completa, por lo que habrá que mandarla dos veces, como en el ejercicio anterior.

IMPORTANT

El recurso pedido de la petición que engloba a la petición de contrabando debe ser un recurso permitido para la accesibilidad en cuanto al ACL.


Lanzar un Ataque con BurpSuite

Puedes empezar capturando una petición hacia /hello y mandándola al repetidor. Desde ahí, deberías ser capaz de ajustar la petición para implementar el ataque descrito.

CAUTION

Recuerda asegurarte de que la petición sea HTTP/2.

Si Burp te lo pone difícil, puedes copiar y pegar esta petición en una pestaña nueva del Repeater:

shell-session
POST /hello HTTP/2
Host: 10.113.139.77:8100
User-Agent: Mozilla/5.0
Foo: bar
IMPORTANT

Recuerda que una vez insertado el header Foo la petición se quedará en modo kettled.

HTTP-2 Request Tunneling - Bypassing Frontend Restrictions