flawopen.com/Incidents/polyfill-io-supply-chain-incident-june-2024
Ataque a la cadena de Polyfill.io (2024)
Incidente de 2024: polyfill.io redirigió a algunos visitantes. Elimina la referencia al CDN; no se asignó una CVE.
Imagina que un restaurante pone en cada mesa una botella de un proveedor externo. Si el proveedor cambia el contenido, puede afectar a quienes la usan aunque el restaurante no cambie su menú.
Conceptos Clave y Términos
Dynamic User-Agent Polyfilling- Distribución de paquetes de JavaScript adaptados según los encabezados del navegador, lo que imposibilita los hashes de Subresource Integrity (SRI).
Conditional Payload Evasion- Análisis de Referer HTTP, tamaño de pantalla, user-agent y devtools para entregar scripts limpios a desarrolladores mientras se ataca a usuarios móviles reales.
Domain Ownership Transfer Risk- El peligro inherente de incrustar scripts de terceros desde dominios que pueden ser adquiridos, expirar o transferirse sin consentimiento.
Subresource Integrity (SRI)- Mecanismo criptográfico del navegador que valida los hashes de los scripts antes de su ejecución.
Mapeos de marcos
- Referencia CWE para la debilidad descrita en esta guía: CWE-829
Cronología del Incidente
Sansec informó del cambio de propietario del dominio y la cuenta de GitHub; Fastly ofreció una alternativa preventiva.
Sansec publicó su análisis y estimó más de 100.000 sitios expuestos según su propia medición.
Cloudflare anunció reescrituras automáticas hacia su espejo; después se suspendió el dominio. Elimina las referencias antiguas en vez de depender de reescrituras temporales.
Flujo de Ataque Paso a Paso
Cambio de control
Sansec informó que el dominio polyfill.io y la cuenta de GitHub cambiaron de manos en febrero de 2024. Fastly ofreció una alternativa preventiva antes de que se denunciaran respuestas maliciosas. Más tarde, Fastly indicó que supo del ataque cuando Sansec publicó su informe; la alternativa de febrero fue preventiva y no demuestra que conociera actividad maliciosa.
El sitio carga el CDN
Una página que referencia cdn.polyfill.io hace que el navegador solicite y ejecute el JavaScript recibido en el contexto de esa página.
Redirección condicional observada
La muestra analizada por Sansec redirigía condicionalmente a algunos visitantes móviles. Esto describe esa muestra, no todas las respuestas del CDN.
Mitigaciones y respuesta
Cloudflare reescribió referencias hacia su espejo; Fastly ofreció una alternativa independiente. Sansec informó de anuncios de Google Ads rechazados en algunos comercios, no de una penalización general en la búsqueda orgánica.
Código Fuente: Vulnerable vs. Seguro
<!-- VULNERABLE: Direct 3rd-party CDN script without integrity verification -->
<!DOCTYPE html>
<html>
<head>
<title>Production Web App</title>
<!-- Polyfill CDN serves arbitrary dynamic code controlled by third party -->
<script src="https://cdn.polyfill.io/v3/polyfill.min.js?features=default,Array.prototype.flat"></script>
</head>
<body>
<h1>Welcome</h1>
</body>
</html><!-- Build this file from a reviewed, version-pinned dependency. -->
<script defer src="/assets/vendor/polyfills.min.js"></script>Lista de Verificación de Seguridad para Ingeniería
- ✓Nunca load third-party scripts from public CDNs into production applications without Subresource Integrity (SRI) hashes.
- ✓Práctica de seguridad recomendada: Vendor all runtime polyfills and libraries directly into your application bundle via npm/yarn/pnpm lockfiles.
- ✓Haga cumplir a strict Content Security Policy (CSP) with script-src 'self' to prevent unauthorized script injections.
- ✓Realice una auditoría de all domain assets periodically to ensure embedded hosts have not lapsed or transferred ownership.
- ✓No uses SRI como sustituto de revisar quién controla la dependencia; úsalo solo si los bytes son estables y el hash está verificado.