Es una vulnerabilidad XSS, pero es bastante difícil de explotar: tome por ejemplo la siguiente URL:
http://anything."><script>xss</script>.example.com/aa/bb
Esta URL llevará una carga útil XSS en el parámetro Host cuando se navegue a, pero:
- DNS tendría que resolver este extraño dominio a la IP con una aplicación vulnerable (por lo tanto, a menos que el DNS sea bastante indulgente, el atacante requeriría un envenenamiento de DNS)
- El navegador tendría que omitir la codificación del nombre de host. Por lo general, el nombre de host está codificado en porcentaje por el navegador (por lo que
<script>
se convierte en %3Cscript%3E
). Por supuesto, podría falsificar la solicitud fuera del navegador.
- El servidor de destino tendría que procesar la solicitud en el contexto del sitio web vulnerable, lo que no es tan simple. Por ejemplo, si esta aplicación se instala como
VirtualHost
en Apache, este encabezado Host
no coincidirá con ningún VirtualHost
y se procesará con un respaldo o el primer VirtualHost
.
Sería mucho más peligroso si este XSS se almacenara y no se reflejara, porque entonces podría omitir los requisitos de codificación (1) DNS y (2). Puede simplemente plantar la carga útil enviando una solicitud HTTP manual fuera del navegador. Esta carga útil sería entonces visible para los visitantes "estándar" basados en navegador del sitio vulnerable.
Entonces, como conclusión, se trata de una vulnerabilidad XSS, pero con una probabilidad de explotación baja. Aún así, la aplicación debería solucionarlo evitando que se muestre el encabezado del Host.