lowCWE-430A05:2021

Falta el Header X-Content-Type-Options

El header X-Content-Type-Options: nosniff está ausente, permitiendo que los navegadores adivinen el tipo de contenido de una respuesta y potencialmente ejecuten contenido como script.

Cómo Funciona

Los navegadores más antiguos intentan ser 'útiles' adivinando qué es un archivo, aunque el servidor diga que es text/plain. Si un atacante sube un archivo con contenido HTML o JavaScript pero con extensión .txt, el navegador podría ejecutarlo como script. `nosniff` le dice al navegador que confíe en el Content-Type declarado y nada más.

Código Vulnerable
// MAL: sin header X-Content-Type-Options
// Un usuario sube 'script.txt' con <script>alert(1)</script>
// El navegador puede ejecutarlo como HTML si falta nosniff
Código Seguro
// BIEN: agrega nosniff a todas las respuestas
export default {
  async headers() {
    return [{
      source: '/(.*)',
      headers: [
        { key: 'X-Content-Type-Options', value: 'nosniff' }
      ]
    }];
  }
};

Ejemplo Real

Los ataques de MIME sniffing eran comunes en las primeras plataformas sociales que alojaban contenido subido por usuarios. Un usuario subía una 'foto de perfil' que en realidad era HTML válido con script embebido, que IE ejecutaba.

Cómo Prevenirlo

  • Agrega X-Content-Type-Options: nosniff a todas las respuestas HTTP
  • Siempre configura headers Content-Type explícitos en las respuestas de tu API (application/json, no text/plain)
  • Valida el contenido de archivos subidos (no solo la extensión) antes de servirlos
  • Es una victoria rápida — una línea en la config de headers de Next.js

Tecnologías Afectadas

Next.jsnodejsnginxapache

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas