flawopen.com/Incidents/polyfill-io-supply-chain-incident-june-2024
Attaque de Polyfill.io (2024)
Incident de 2024 : polyfill.io a redirigé certains visiteurs. Supprimez la référence au CDN ; aucune CVE n’a été attribuée.
Imaginez un restaurant qui place sur chaque table une bouteille d’un fournisseur externe. Si celui-ci en change le contenu, les clients peuvent être touchés même si le restaurant ne modifie pas son menu.
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.
Correspondances de référentiels
- Référence CWE pour la faiblesse décrite dans ce guide : CWE-829
Chronologie de l'Incident
Sansec a signalé le changement de propriétaire du domaine et du compte GitHub ; Fastly a proposé une solution préventive.
Sansec a publié son analyse et estimé que plus de 100 000 sites étaient exposés selon ses propres mesures.
Cloudflare a annoncé des réécritures automatiques vers son miroir ; le domaine a ensuite été suspendu. Supprimez les anciennes références au lieu de dépendre de réécritures temporaires.
Déroulement de l'Attaque Étape par Étape
Changement de contrôle
Sansec a indiqué que le domaine polyfill.io et le compte GitHub avaient changé de mains en février 2024. Fastly a proposé une solution préventive avant les signalements de réponses malveillantes. Fastly a ensuite indiqué avoir appris l’attaque à la publication du rapport de Sansec ; son alternative de février relevait de la précaution et ne prouve pas qu’elle connaissait une activité malveillante.
Le site charge le CDN
Une page référençant cdn.polyfill.io fait récupérer puis exécuter par le navigateur le JavaScript reçu dans le contexte de cette page.
Redirection conditionnelle observée
L’échantillon étudié par Sansec redirigeait conditionnellement certains visiteurs mobiles. Cela décrit cet échantillon, pas toutes les réponses du CDN.
Mesures et réponse
Cloudflare a réécrit les références vers son miroir ; Fastly a proposé une solution distincte. Sansec a signalé le refus de certaines annonces Google Ads de sites marchands, pas une pénalité générale dans les résultats naturels.
Code Source : Vulnérable vs Sécurisé
<!-- 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>Liste de Contrôle de Sécurité pour l'Ingénierie
- ✓Ne jamais load third-party scripts from public CDNs into production applications without Subresource Integrity (SRI) hashes.
- ✓Règle de sécurité recommandée : Vendor all runtime polyfills and libraries directly into your application bundle via npm/yarn/pnpm lockfiles.
- ✓Appliquez a strict Content Security Policy (CSP) with script-src 'self' to prevent unauthorized script injections.
- ✓Effectuez un audit de all domain assets periodically to ensure embedded hosts have not lapsed or transferred ownership.
- ✓Ne considérez pas SRI comme un substitut à la vérification du contrôle de la dépendance ; utilisez-le seulement si les octets sont stables et le hachage vérifié.