James Kettle proporciona una buena reseña sobre Ataques de encabezado de host HTTP prácticos . Se resumen a continuación con una descripción de la estrategia ALLOWED_HOSTS de Django.
Vulnerabilidades
Vector de restablecimiento de contraseña
La vulnerabilidad del correo electrónico de restablecimiento de contraseña a la que alude la documentación es el resultado de que Django y / o sus aplicaciones utilizan y confían en el valor del Host HTTP, que proporciona el cliente (¿suena como una mala idea?). El valor del Host se copia directamente en los correos electrónicos de restablecimiento de contraseña, lo que proporciona un vector de inyección práctico.
Envenenamiento de caché
La variación del envenenamiento de caché se basa en este comportamiento, y también en las diferencias en la forma en que los servidores y las soluciones de almacenamiento en caché manejan el encabezado HOST.
HTTP_SERVER vs HTTP ['HOST']
Como describe Kettle, debido a RFC2616, es posible que los servidores compatibles usen una discrepancia entre HTTP_SERVER y HTTP ['HOST'] para entregar cadenas de host arbitrarias.
Análisis de host
Al explotar diferentes formatos y usar caracteres especiales, un atacante puede hacer que un Host 'permitido' sea interpretado maliciosamente en diferentes contextos. Esto es nuevamente un error en la aplicación que confiaba en la cadena del Host.
Solución Django
Como las notas de la versión proporcionadas por En resumen, la solución de Django es que el usuario ponga los hosts permitidos directamente en el código del proyecto. Al prohibir cualquier otro host que no coincida con ALLOWED_HOSTS
, el vector de inyección se elimina (un enfoque de "lista blanca").
Esto es algo así como una solución torpe, como señala James, pero también es bastante eficaz.
Ten en cuenta
Es posible usar comodines en la configuración de un proyecto, en cuyo caso esta función no ayuda a proteger nada.
Un desarrollador de aplicaciones seguro evitará usar el valor de HTTP Host de cualquier manera significativa.
Referencias
Carlos Bueno, Cache Poisoning (2008)