mediumCWE-1021A05:2021

Falta el Header X-Frame-Options

El header X-Frame-Options está ausente, permitiendo a atacantes embeber tu app en un iframe invisible y engañar usuarios para que hagan clic en tus elementos de UI (clickjacking).

Cómo Funciona

En un ataque de clickjacking, el atacante pone tu sitio en un iframe transparente sobre una página falsa. El usuario cree que está haciendo clic en un botón de la página falsa, pero en realidad está hackeando un botón de tu sitio — como 'Transferir fondos' o 'Activar cámara'. X-Frame-Options: DENY le dice al navegador que rechace el embebido en iframe.

Código Vulnerable
// MAL: sin protección contra framing
// Cualquier sitio puede hacer: <iframe src="https://tuapp.com/settings"></iframe>
Código Seguro
// BIEN: niega el framing en la config de Next.js
export default {
  async headers() {
    return [{
      source: '/(.*)',
      headers: [
        { key: 'X-Frame-Options', value: 'DENY' },
        // Alternativa moderna: CSP frame-ancestors
        { key: 'Content-Security-Policy', value: "frame-ancestors 'none'" }
      ]
    }];
  }
};

Ejemplo Real

En 2009, el diálogo de permisos de Adobe Flash fue clickjackeado — los usuarios fueron engañados para activar su cámara y micrófono sin saberlo. La misma técnica aplica a cualquier UI web con botones sensibles.

Cómo Prevenirlo

  • Configura X-Frame-Options: DENY (o SAMEORIGIN si necesitas framing del mismo sitio)
  • También agrega frame-ancestors 'none' en tu header CSP como complemento moderno
  • Aplícalo a todas las páginas, no solo al login — las páginas de configuración son objetivos de alto valor
  • Verifica con curl -I tudominio.com y revisa los headers de respuesta

Tecnologías Afectadas

Next.jsnodejsnginxapache

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas