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:

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:

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.
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.
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:
POST /hello HTTP/2 Host: 10.113.139.77:8100 User-Agent: Mozilla/5.0 Foo: bar
Recuerda que una vez insertado el header Foo la petición se quedará en modo kettled.

