flawopen.com/Teardowns/polyfill-io-supply-chain-hijack

● CVE-2024-0000 · CVSS 9.8 · Crítica
Investigación · FlawOpen

CVE Teardown: Polyfill.io Supply Chain Hijack (Over 100k Sites Compromised)

Análisis técnico del código fuente y mitigaciones de ingeniería para vulnerabilidade: How the acquisition of the popular polyfill.io domain by a gambling/redirect syndicate turned a ubiquitous frontend CDN into a stealthy, conditional malware injector.

💡 Explicación en Lenguaje Sencillo (ELI5)

Imagina miles de restaurantes contratando el mismo servicio de mensajería de agua de confianza durante años. Cuando el repartidor original se jubiló y vendió secretamente la ruta a un competidor deshonesto, el nuevo conductor empezó a revisar mesas y deslizar billetes falsos de lotería en las bebidas de ciertos clientes.

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.

Análisis de Causa Raíz

La causa raíz se debe a parámetros de límite no validados en sistemas de código abierto, lo que permite la desincronización de estado y la elusión de controles de seguridad.

Flujo de Ataque Paso a Paso

Step 1

1. Domain Acquisition

In February 2024, the domain polyfill.io was purchased from its creator by Funnull, an operator associated with casino affiliate marketing.

Step 2

2. User-Agent & Header Filtering

The CDN edge inspected incoming HTTP requests. If the request was from an admin IP, Google bot, or desktop browser with DevTools open, it served normal, benign polyfills.

Step 3

3. Targeted Evasion & Payload Delivery

If the request was from an organic mobile visitor via search referrer, the server appended an obfuscated redirect payload: window.location.href = 'https://kucontent.com/...'.

Step 4

4. Ecosystem Interventions

Cloudflare and Fastly deployed automatic edge URL rewrites to replace polyfill.io with clean mirrors, while Google flagged all sites utilizing the script in search results.

Código Fuente: Vulnerable vs. Seguro

✕ IMPLEMENTACIÓN VULNERABLE
<!-- 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>
✓ PARCHE SEGURO Y ROBUSTO
<!-- SECURE: Native ES6+ or Self-Hosted Vendored Fallbacks with CSP & SRI -->
<!DOCTYPE html>
<html>
<head>
  <title>Production Web App</title>
  <!-- 1. Modern browsers require no polyfills (99%+ modern baseline) -->
  <!-- 2. For legacy needs, bundle polyfills locally into your build pipeline -->
  <script src="/static/vendor/core-js-bundle.min.js" 
          integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" 
          crossorigin="anonymous"></script>

  <!-- 3. Strict Content Security Policy blocking untrusted third-party script sources -->
  <meta http-equiv="Content-Security-Policy" 
        content="default-src 'self'; script-src 'self' 'sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC';">
</head>
<body>
  <h1>Welcome</h1>
</body>
</html>

Lista de Verificación de Seguridad para Ingeniería