flawopen.com/Incidents/polyfill-io-supply-chain-incident-june-2024
Serangan rantai pasok Polyfill.io (2024)
Insiden 2024: polyfill.io mengalihkan sebagian pengunjung. Hapus rujukan CDN; tidak ada CVE yang ditetapkan.
Bayangkan restoran meletakkan botol minuman dari pemasok luar di setiap meja. Jika pemasok mengubah isinya, pelanggan yang meminumnya dapat terdampak meski restoran tidak mengubah menu.
Konsep Kunci & Istilah
Dynamic User-Agent Polyfilling- Menyajikan bundel JavaScript yang disesuaikan bergantung pada header browser klien, membuat hash Subresource Integrity (SRI) menjadi mustahil.
Conditional Payload Evasion- Menganalisis Referer HTTP, ukuran layar, user-agent, dan alat pengembang untuk memberikan skrip bersih kepada pengembang sambil menyerang pengguna seluler yang sebenarnya.
Domain Ownership Transfer Risk- Bahaya bawaan dari menyematkan skrip pihak ketiga dari domain yang dapat diperoleh, kedaluwarsa, atau ditransfer tanpa persetujuan.
Subresource Integrity (SRI)- Mekanisme kriptografi browser yang memvalidasi hash skrip sebelum dieksekusi.
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-829
Kronologi Insiden
Sansec melaporkan perubahan pemilik domain dan akun GitHub; Fastly menawarkan alternatif sebagai langkah pencegahan.
Sansec menerbitkan analisis dan memperkirakan paparan lebih dari 100 ribu situs berdasarkan pengukurannya sendiri.
Cloudflare mengumumkan penulisan ulang otomatis ke mirror-nya; domain kemudian ditangguhkan. Hapus referensi lama dan jangan bergantung pada penulisan ulang sementara.
Alur Serangan Langkah demi Langkah
Perubahan kendali
Sansec melaporkan bahwa domain dan akun GitHub berpindah pemilik pada Februari 2024. Fastly menawarkan alternatif sebagai langkah pencegahan sebelum respons berbahaya dilaporkan. Fastly kemudian menyatakan bahwa mereka mengetahui serangan tersebut saat laporan Sansec diterbitkan; alternatif yang ditawarkan pada Februari merupakan langkah pencegahan, bukan bukti bahwa mereka sudah mengetahui aktivitas berbahaya saat itu.
Situs memuat CDN
Halaman yang merujuk cdn.polyfill.io membuat browser mengambil dan menjalankan JavaScript yang dikembalikan dalam konteks halaman tersebut.
Pengalihan bersyarat teramati
Sampel yang dianalisis Sansec mengalihkan sebagian pengunjung seluler berdasarkan kondisi tertentu. Ini menjelaskan sampel tersebut, bukan semua respons CDN.
Mitigasi dan respons
Cloudflare menerapkan penulisan ulang ke mirror-nya; Fastly menawarkan alternatif terpisah. Sansec melaporkan iklan Google Ads pada sebagian situs niaga ditolak, bukan penalti pencarian organik secara menyeluruh.
Kode Sumber: Rentan vs Aman
<!-- 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>Daftar Periksa Penguatan Sistem Rekayasa
- ✓Jangan pernah load third-party scripts from public CDNs into production applications without Subresource Integrity (SRI) hashes.
- ✓Praktik keamanan yang direkomendasikan: Vendor all runtime polyfills and libraries directly into your application bundle via npm/yarn/pnpm lockfiles.
- ✓Terapkan a strict Content Security Policy (CSP) with script-src 'self' to prevent unauthorized script injections.
- ✓Lakukan audit menyeluruh terhadap all domain assets periodically to ensure embedded hosts have not lapsed or transferred ownership.
- ✓Jangan anggap SRI sebagai pengganti pemeriksaan kendali dependensi; gunakan hanya jika byte stabil dan hash diverifikasi.