Es EnableHeaderChecking=true suficiente para evitar el Encabezado Http de los ataques de Inyección?

StackOverflow https://stackoverflow.com/questions/869361

  •  22-08-2019
  •  | 
  •  

Pregunta

Es suficiente tener [System.Web.Configuration.HttpRuntimeSection.EnableHeaderChecking](http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.enableheaderchecking(VS.85).aspx) conjunto para true (valor predeterminado) para evitar totalmente el Encabezado Http de los ataques de Inyección como de División de Respuesta, etc.?

Estoy preguntando, porque un cuadro blanco, herramienta de pruebas de penetración (fortalecer) informes explotable encabezado http de inyección de problemas con HttpResponse.Redirect y las galletas, pero no he encontrado una manera de realizar con éxito un ataque.(editar:..y tenemos EnableHeaderChecking activado..)

¿Fue útil?

Solución

He estado buscando en esto durante algún tiempo y saco la conclusión de que el ajuste de EnableHeaderChecking a true de hecho es lo suficientemente bueno para prevenir los ataques de inyección de encabezado HTTP.

En cuanto a código ASP.NET 'reflejado', encontré que:

  1. Sólo hay una manera de añadir cabeceras HTTP personalizado a una respuesta HTTP, es decir, utilizando el HttpResponse.AppendHeader método
  2. HttpResponse.AppendHeader cualquiera
    • crea instancias de HttpResponseHeader (interna)
    • o llamadas HttpResponseHeader.MaybeEncodeHeader (por IIS7WorkerRequests)
    • o asigna sus propiedades respectivas (para las cabeceras conocidos como RedirectLocation o ContentType )
  3. casos HttpResponseHeader son creados cabeceras antes conocidos como RedirectLocation o ContentType son enviados (HttpResponse.GenerateResponseHeaders )
  4. El constructor HttpResponseHeader comprueba el EnableHeaderChecking el establecimiento y pide HttpResponseHeader.MaybeEncodeHeader cuando se establece en true
  5. HttpResponseHeader.MaybeEncodeHeader codifica correctamente caracteres de nueva línea que hace que los ataques de inyección de cabecera HTTP imposible

Aquí hay un fragmento de demostrar más o menos la forma en que probé:

// simple http response splitting attack
Response.AddHeader("foo", "bar\n" + 
    // injected http response, bad if user provided
    "HTTP/1.1 200 OK\n" + 
    "Content-Length: 19\n" +
    "Content-Type: text/html\n\n" +
    "<html>danger</html>"
);

Lo anterior sólo funciona al activar expresamente EnableHeaderChecking apagado:

<httpRuntime enableHeaderChecking="false"/>

Fortify simplemente no toma en cuenta la configuración (configuración EnableHeaderChecking tenía expresamente sin efecto) y por lo tanto siempre reporta este tipo de problemas.

Otros consejos

AFAIK es suficiente y debe ser activada de forma predeterminada.

Creo que Fortalecer es sólo de pensar en la defensa en profundidad como si de cambiar la configuración en la implementación etc.

Supongo que usted no estrictamente establecido en su configuración, si usted tiene quizá Fortificar no es inteligente a la figura que la nuestra.

La mejor forma de confirmar que se está aprovechando de ti :)

  • Acaba de obtener una copia de fiddler
  • Interceptar la petición
  • Tratar de inyectar una nueva línea de
  • A ver si la nueva línea que hemos inyectado en la respuesta HTTP o no.

EnableHeaderChecking es sólo para datos no confiables. Si va a ceder los datos directamente de una galleta en una redirección, tal vez las cabeceras resultantes se consideran de confianza y \ r \ n valores no se escaparon.

Josef, HttpResponse.AppendHeader () no es el único lugar en el que no se confía de datos pueden entrar en el Encabezados de respuesta HTTP.

Cualquier datos de la atacante que termina en galletas o redirecciones de HTTP puede escribir nuevas cabeceras si los datos contienen un retorno de carro (o cualquier cosa que se interpreta como un retorno de carro).

En general, es un mucho mejor uso de su tiempo para validar los datos que sentarse alrededor y tratar de llegar a exploits. Es probable que, los hackers van a ser mejor en esto que usted o yo somos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top