Joven hacker sonriendo

Establecer Content-Type y Charset

Nuestros ethical hackers explican como evitar vulnerabilidades de seguridad mediante la configuración segura de los parámetros content-type y charset en ASP.NET para evitar ataques de tipo Http Request Smuggling y reforzar la seguridad de las aplicaciones web.

Necesidad

Establecer Content-Type y Charset en ASP.NET.

Contexto

A continuación se describe las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se está desarrollando en ASP.NET.

  2. Los archivos generados de forma dinámica por el sistema deben tener definido un Content-Type explícito.[1]

  3. Los archivos generados de forma dinámica por el sistema deben tener definido un Character-Set explícito.[2]

Solución

  1. Las aplicaciones son rara vez probadas contra los exploits que usan Unicode, sin embargo, muchas son vulnerables al mismo tipo de problemas que permite a un atacante realizar un HTTP Request Smuggling.

  2. El HTTP Request Smuggling le permite a un atacante evadir los controles de un sistema, usando codificaciones diferentes, para que dos sistemas (usualmente, un WAF y el servidor WEB) perciban peticiones HTTP diferentes [3].

    La forma normal (canonical form) es la representación más simple o más estándar de algo. El proceso de normalizar las solicitudes se encarga de abordar el modo en que los sistemas transforman los datos de una forma a otra. En sí, normalizar es convertir algo desde su estado original a una representación más simple.

    Las aplicaciones Web deben tratar con muchos procesos de normalización desde la codificación del URL, hasta la traducción de las IP. Cuando se toman decisiones de seguridad basándose en datos normalizados imperfectos, la aplicación debe ser capaz de manejar entradas inesperadas de manera segura.

    Para evitar los ataques que se aprovechan de la normalización, se debe seleccionar una forma normal y modificar todas las entradas del usuario a dicha forma antes de tomar decisiones de autorización.

  3. De la misma manera, se deben ejecutar pruebas de seguridad después de que se ha realizado la decodificación, por lo cual se recomienda verificar que la codificación usada esté soportada para cada símbolo que se presenta.

  4. Para definir una forma normal, en HTTP se define el Content-Type. En C# tenemos la propiedad HttpResponse.ContentType [4], que permite establecer u obtener el tipo MIME del flujo de salida , el cual se encuentra alojado en el espacio de nombres System.Web en el ensamblado System.Web de System.Web.dll. A continuación se presenta un ejemplo de uso del ContentType:

    Web.config
    1
    2
    // Establece el contet type.
    Response.ContentType = "image/jpeg";
    
  5. De modo similar al ContentType, es necesario definir el Character-Set usado. En C# se cuenta con HttpResponse.Charset que permite establecer u obtener el tipo MIME del flujo de salida. El código mostrado a continuación, ejemplifica el uso del Charset:

    1
    2
    3
    4
    if (Response.Charset == "utf-8")
     {
       // ...
     }
    



Haz un comentario

Estado de los servicios - Términos de Uso