Falta Integridad de Subrecursos (SRI)
Scripts y hojas de estilo alojados en CDN cargados sin el atributo integrity, lo que significa que un CDN comprometido puede servir versiones maliciosas de tus dependencias a todos tus usuarios.
Cómo Funciona
SRI te permite incluir un hash criptográfico de un recurso en el HTML. El navegador calcula el hash del archivo descargado y se niega a ejecutarlo si no coincide. Sin SRI, si el CDN es comprometido (como ha pasado con cdnjs, polyfill.io y otros), tus usuarios ejecutan lo que el CDN sirva.
<!-- MAL: script de CDN sin verificación de integridad -->
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script><!-- BIEN: el hash SRI asegura que el archivo no ha cambiado -->
<script
src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"
integrity="sha256-qXBd/EfAdjOA2FGrGAG+b3YBn2tn5A6bhz+LSgYD96k="
crossorigin="anonymous"
></script>Ejemplo Real
En 2024, polyfill.io (un CDN ampliamente usado que sirve polyfills de navegador) fue adquirido por una empresa china que comenzó a inyectar JavaScript malicioso en sus archivos. Más de 100,000 sitios web que servían el script de polyfill.io fueron instantáneamente comprometidos. SRI habría bloqueado los archivos alterados.
Cómo Prevenirlo
- Agrega los atributos integrity y crossorigin a todos los scripts y hojas de estilo alojados en CDN
- Genera hashes SRI en srihash.org o usando openssl dgst -sha256
- Fija versiones exactas en los CDNs (no @latest) para que el hash permanezca válido
- Mejor aún: empaqueta las dependencias tú mismo y evita CDNs públicos para scripts críticos
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
XSS Basado en DOM
highScripts maliciosos ejecutados al leer datos controlados por el atacante de la URL o APIs del navegador y escribirlos en el DOM usando sinks peligrosos como innerHTML o document.write.
XSS Almacenado
highContenido provisto por el usuario guardado en la base de datos sin sanitizar y renderizado en el navegador como HTML, permitiendo inyección de scripts persistente que se ejecuta para cada usuario que ve el contenido.
PostMessage Sin Verificar Origen
mediumHandlers de window.addEventListener('message') que procesan mensajes sin verificar event.origin, permitiendo que cualquier sitio web envíe comandos al handler de mensajes de tu app.
Clickjacking Avanzado
mediumAusencia de los headers X-Frame-Options y CSP frame-ancestors, combinada con sin lógica de frame-busting en el cliente, dejando la app completamente embebible en iframes maliciosos.