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

● CVE-2024-0000 · CVSS 9.8 · Critique
Recherche · FlawOpen

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

Analyse technique détaillée du code source et mesures de durcissement pour 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.

💡 Explication en Langage Simple (ELI5)

Imaginez des milliers de restaurants faisant appel au même service de coursier d'eau de confiance depuis des années. Lorsque le livreur d'origine a pris sa retraite et a secrètement vendu la tournée à un concurrent véreux, le nouveau chauffeur a commencé à glisser des billets de loterie frauduleux dans les verres de certains clients.

Concepts Clés et Termes

Dynamic User-Agent Polyfilling
Distribution de paquets JavaScript sur mesure selon les en-têtes du navigateur client, rendant impossible l'utilisation de hachages SRI (Subresource Integrity).
Conditional Payload Evasion
Analyse du Referer HTTP, de la taille d'écran, du user-agent et des devtools pour servir des scripts sains aux développeurs tout en attaquant les utilisateurs mobiles réels.
Domain Ownership Transfer Risk
Le danger inhérent à l'intégration de scripts tiers provenant de domaines pouvant être rachetés, expirés ou transférés sans consentement.
Subresource Integrity (SRI)
Mécanisme cryptographique du navigateur qui valide les empreintes (hashes) des scripts avant leur exécution.

Analyse de Cause Racine

La cause fondamentale provient de paramètres de limites non validés dans les systèmes open source, permettant une désynchronisation d'état et le contournement des contrôles de sécurité.

Déroulement de l'Attaque Étape par Étape

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.

Code Source : Vulnérable vs Sécurisé

✕ IMPLÉMENTATION VULNÉRABLE
<!-- 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>
✓ PATCH SÉCURISÉ ET ROBUSTE
<!-- 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>

Liste de Contrôle de Sécurité pour l'Ingénierie