Los encabezados de seguridad son un subconjunto de encabezados de respuesta HTTP que puede configurar un servidor web y cada uno de ellos aplica una verificación de seguridad en los navegadores. Los encabezados HTTP son una forma de metadatos enviados con solicitudes y respuestas web. El encabezado de seguridad «X-Content-Type-Options» impide que los navegadores realicen la detección MIME.
Nota: los encabezados HTTP no son exclusivos de HTTP y también se utilizan en HTTPS.
¿Qué es el rastreo MIME?
Cuando los datos se envían a través de la web, uno de los metadatos incluidos es de tipo MIME. Las extensiones multipropósito de correo de Internet, o tipos MIME, son un estándar que se utiliza para definir el tipo de datos que contiene un archivo, lo que indica cómo se debe procesar el archivo. Normalmente, el tipo MIME consta de un tipo y un subtipo con un parámetro y un valor opcionales. Por ejemplo, un archivo de texto UTF-8 tendría el tipo MIME «text/plain;charset=UTF-8». En este ejemplo, el tipo es «texto», el subtipo es «sin formato», el parámetro es «juego de caracteres» y el valor es «UTF-8».
Para evitar el etiquetado y el manejo incorrectos de los archivos, los servidores web suelen realizar un rastreo MIME. Este es un proceso en el que se ignora el tipo MIME especificado explícitamente y, en su lugar, se analiza el comienzo del archivo. La mayoría de los tipos de archivos incluyen secuencias de encabezado que indican qué tipo de archivo es. La mayoría de las veces los tipos MIME son correctos y rastrear el archivo no hace ninguna diferencia. Si hay una diferencia, los servidores web utilizarán el tipo de archivo rastreado para determinar cómo manejar el archivo en lugar del tipo MIME declarado.
El problema ocurre si un atacante logra cargar un archivo como una imagen PNG, pero el archivo es en realidad otra cosa, como un código JavaScript. Para tipos de archivos similares, como dos tipos de texto, esto puede no ser un gran problema. Sin embargo, esto se convierte en un problema grave si en su lugar se puede ejecutar un archivo perfectamente inofensivo.
¿Qué hace X-Content-Type-Options?
El encabezado X-Content-Type-Options solo tiene un valor posible «X-Content-Type-Options: nosniff». Habilitarlo informa al navegador del usuario que no debe realizar la detección del tipo MIME y, en su lugar, confiar en el valor declarado explícitamente. Sin esta configuración, si un archivo JavaScript malicioso estuviera disfrazado de una imagen como PNG, el archivo JavaScript se ejecutaría. Con X-Content-Type-Options habilitadas, el archivo se tratará como una imagen que no se carga porque el archivo no tiene un formato de imagen válido.
X-Content-Type-Options no es particularmente necesario en un sitio web que utiliza recursos totalmente propietarios, ya que no hay posibilidad de que se entregue accidentalmente un archivo malicioso. Si un sitio web utiliza contenido de terceros, como recursos externos o enviados por usuarios, X-Content-Type-Options brinda protección contra este tipo de ataque.