Polymarket Dibobol Lewat Script Pihak Ketiga: Cara Kerjanya dan Cara Mencegahnya

Oleh , Tim Engineering APIPedia · Terbit · 8 menit baca

Script RUM vendor disusupi dan menguras ±$2,5–2,7 juta dari pengguna Polymarket. Begini cara kerjanya dan cara melindungi situsmu.

Sampul APIPedia: Polymarket dibobol lewat script pihak ketiga, dengan kartu fakta insiden 29 Oktober 2026, dana terkuras $2,5–2,7 juta, sekitar 700 akun, vendor DebugBear

Insiden Polymarket 29 Oktober 2026 adalah serangan rantai pasok JavaScript: script pemantau performa milik vendor pihak ketiga disusupi, lalu dipakai untuk menguras dompet pengguna yang sedang login. Situs Polymarket sendiri tidak dibobol. Itulah yang membuatnya penting bagi setiap developer yang memasang tag analitik di situsnya.

Kasus ini ramai karena datang hanya beberapa jam setelah hack Binance senilai $6,3 miliar, dan karena penyebabnya sangat biasa: satu baris <script src> yang dipercaya begitu saja. Artikel ini menjelaskan apa yang terjadi, cara kerja serangannya, mitos yang beredar, dan langkah teknis untuk mencegahnya di situsmu.

Apa yang sebenarnya terjadi?

Pada Kamis, 29 Oktober 2026 siang waktu AS (dini hari 30 Oktober WIB), pengguna Polymarket melaporkan dana berpindah tanpa izin. Polymarket lalu menghentikan perdagangan di platform internasionalnya, Polymarket.com, dan menyatakan bahwa "salah satu penyedia pihak ketiga kami disusupi".

Polymarket tidak menyebut nama vendornya. Namun sumber yang dikutip Yahoo News dan Reuters, serta analisis peneliti keamanan, menunjuk DebugBear, perusahaan pemantau performa situs asal Inggris. DebugBear sendiri mengumumkan di X sekitar pukul 2 siang ET bahwa mereka sedang mengalami "ongoing security incident" dan meminta pelanggan produk RUM (Real User Monitoring) mencabut kode yang tertanam.

Beberapa fakta kunci:

  • Yang terdampak hanya Polymarket.com (internasional). Polymarket US, platform yang diatur CFTC, tidak terdampak.
  • Polymarket berjanji mengganti penuh kerugian semua trader terdampak dan melaporkan kasus ke aparat penegak hukum Inggris.
  • Polymarket belum merilis angka kerugian atau jumlah akun terdampak secara resmi.

Berapa kerugiannya, dan kenapa angkanya berbeda-beda?

Angka yang beredar berasal dari firma analitik blockchain, bukan dari Polymarket. Perbedaannya wajar karena masing-masing melacak dompet dan jendela waktu yang sedikit berbeda.

SumberEstimasi danaAkun / transaksiCatatan
Arkham (via The Block, dikutip Yahoo)±$2,65 juta-Dalam bentuk kripto dari dompet pengguna
Bubblemaps (via Wired)±$2,7 juta±700 akunEstimasi paling tinggi
SafeState±$2,5 juta900+ transaksiSaldo dompet penyerang saat diperiksa ±$2,19 juta
PolymarketTidak diumumkanTidak diumumkanJanji ganti rugi penuh

Durasi henti juga dilaporkan berbeda. Yahoo News menyebut perdagangan berhenti "hampir satu jam" dan dibuka lagi sekitar pukul 3 sore ET. Wired, lewat ringkasan Slashdot, menyebut "beberapa jam". Linimasa SafeState mencatat mode cancel-only mulai pukul 2.33 siang ET dan insiden ditandai selesai pukul 3.05 siang ET.

Kronologi insiden Polymarket dalam WIB: insiden serupa pada Mei dan Juni 2026, commit penghapusan script DebugBear pukul 00.59 WIB 30 Oktober, pengumuman DebugBear sekitar 01.00 WIB, mode cancel-only 01.33 WIB, insiden selesai 02.05 WIB, serta estimasi kerugian Arkham, Bubblemaps, dan SafeState

Bagaimana cara kerja serangannya?

DebugBear menyediakan script RUM: potongan JavaScript yang dipasang di halaman untuk mengukur kecepatan muat di browser pengguna sungguhan. Script seperti ini dimuat dari CDN vendor, misalnya cdn.debugbear[.]com, dan biasanya diperbarui vendor kapan saja tanpa perlu campur tangan pemilik situs.

Menurut analisis statis SafeState terhadap file yang disusupi, alurnya kira-kira seperti ini:

  1. File di CDN vendor diganti. Penyerang menukar file RUM asli dengan versi berbahaya. Bagaimana infrastruktur vendor dibobol belum diketahui.
  2. Dimuat di sesi login. Pengguna membuka Polymarket.com, dan browser memuat script itu seperti biasa, dengan hak yang sama seperti kode Polymarket sendiri.
  3. Membaca data sensitif. Script memeriksa sesi aktif, lalu membaca browser storage untuk data akun, alamat dompet, dan kredensial API trading.
  4. Mengeksekusi transaksi. Script mencari klien trading dan signer di halaman, lalu memakai mekanisme signed batch milik Polymarket. Ada cabang berbeda per jenis akun: satu memindahkan token posisi, satu menjual aset.
  5. Melapor ke penyerang. Script menghubungi domain data vendor untuk meminta instruksi dan mengirim balik detail akun serta hasil transaksi. Dana mengalir ke satu dompet di Polygon.

Diagram alur serangan lima langkah: CDN vendor DebugBear disusupi, script dimuat di sesi login Polymarket.com, script membaca storage berisi alamat dompet dan kredensial API, script mentransfer dan menjual posisi lewat signed batch, lalu hasil dikirim ke penyerang

Commit build produksi yang menghapus script DebugBear tercatat pukul 17.59.20 UTC (00.59 WIB). SafeState menegaskan titik ini hanya menandai akhir jendela paparan, bukan awalnya. Berapa lama file berbahaya itu aktif masih belum jelas.

Kenapa script analitik bisa melakukan semua itu?

Karena di browser tidak ada konsep "script tamu". Begitu sebuah file JavaScript dimuat lewat tag <script> biasa, ia berjalan di origin situs dengan akses penuh: membaca localStorage, mengubah DOM, memanggil fungsi aplikasi, dan mengirim request. Script performa yang seharusnya hanya mengukur waktu muat punya kekuatan yang sama dengan kode inti aplikasi.

Apakah ini pertama kali terjadi di Polymarket?

Tidak. Menurut SafeState, pada Juni 2026 script vendor yang disusupi menguras hampir $3 juta dari kurang dari 15 akun, dan semua korban diganti. Pada Mei 2026, kunci privat yang bocor menguras sekitar $700 ribu dari dompet top-up internal. Pola berulang inilah yang membuat komunitas mempertanyakan cara Polymarket mengelola script pihak ketiga.

Mitos vs fakta

MitosFakta
"Server Polymarket diretas."Yang disusupi adalah file milik vendor. Kode jahat berjalan di browser pengguna, bukan di server Polymarket.
"Ini bagian dari hack Binance."Waktunya berdekatan, tapi tidak ada sumber yang mengaitkan keduanya. Binance dikaitkan TRM Labs dengan Lazarus; pelaku Polymarket belum diketahui.
"Pengguna Polymarket US juga kena."Polymarket menyatakan platform US tidak terdampak.
"Script analitik itu aman karena cuma mengukur."Script apa pun yang dimuat langsung punya akses penuh ke halaman. Tidak ada mode baca-saja.
"Pasang CSP dan masalah selesai."CSP tidak menolong bila domain vendor yang disusupi justru ada di allowlist. Perlu beberapa lapisan.

Apa artinya bagi developer di Indonesia?

Situs toko online, dashboard SaaS, dan aplikasi fintech di Indonesia umumnya memuat banyak script luar: analitik, chat widget, A/B testing, pixel iklan, RUM. Setiap domain di daftar itu adalah pihak yang bisa menjalankan kode di halaman login dan checkout kamu. Kasus Polymarket menunjukkan kerugiannya bisa langsung berupa uang, bukan cuma kebocoran data.

Enam kontrol untuk script pihak ketiga: inventaris semua script, Subresource Integrity, Content Security Policy, membersihkan halaman sensitif dari tag analitik, self-host dengan versi terkunci, dan menjauhkan rahasia dari browser storage, lengkap dengan kelebihan dan keterbatasan masing-masing

1. Inventaris script yang dimuat

Mulai dari yang paling sederhana: tahu apa saja yang berjalan di halamanmu. Tempel potongan ini di DevTools Console pada halaman login atau checkout. Ia menampilkan script dari domain lain beserta status SRI-nya, termasuk script yang disisipkan secara dinamis.

// Jalankan di DevTools Console
const own = location.hostname;
const tags = [...document.scripts]
  .filter(s => s.src && new URL(s.src).hostname !== own)
  .map(s => ({ src: s.src, sri: s.integrity || '(tanpa SRI)' }));
const loaded = performance.getEntriesByType('resource')
  .filter(e => e.initiatorType === 'script' && new URL(e.name).hostname !== own)
  .map(e => e.name);
console.table(tags);
console.log('Semua script pihak ketiga yang termuat:', [...new Set(loaded)]);

2. Kunci file berversi dengan Subresource Integrity

SRI membuat browser menolak file yang isinya berbeda dari hash yang kamu tetapkan. Ini sangat efektif untuk library berversi tetap. Buat hash-nya seperti ini:

# Hasilkan hash SHA-384 untuk atribut integrity
curl -s https://cdn.contoh.com/[email protected]/lib.min.js \
  | openssl dgst -sha384 -binary | openssl base64 -A
<script src="https://cdn.contoh.com/[email protected]/lib.min.js"
        integrity="sha384-HASIL_PERINTAH_DI_ATAS"
        crossorigin="anonymous"></script>

Keterbatasannya: script RUM dan analitik sering diperbarui vendor tanpa pemberitahuan, sehingga hash akan terus berubah dan script berhenti jalan. Untuk kasus seperti itu, pertimbangkan menyalin file ke CDN sendiri dan memperbaruinya lewat code review.

3. Persempit dengan Content Security Policy

CSP membatasi dari mana script boleh dimuat dan ke mana halaman boleh mengirim data. Arahan connect-src penting untuk memperkecil peluang eksfiltrasi. Mulailah dengan mode report-only agar tidak merusak situs:

# nginx: uji dulu dengan Report-Only, lalu ganti ke Content-Security-Policy
add_header Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self' https://cdn.contoh.com; connect-src 'self' https://api.contoh.com; object-src 'none'; base-uri 'self'; report-uri /csp-report" always;

Ingat, CSP tidak membantu jika domain yang disusupi memang ada di allowlist, seperti kasus ini. Karena itu, kontrol berikutnya justru yang paling kuat.

4. Bersihkan halaman bernilai tinggi

Halaman login, pengaturan akun, pembayaran, dan transaksi tidak perlu chat widget atau pixel iklan. Hapus semua tag non-esensial dari halaman itu. Ini rekomendasi langsung dari analisis SafeState dan biayanya hampir nol.

5. Jangan simpan rahasia di browser storage

Script jahat di Polymarket membaca kredensial API trading dari storage. Simpan token sesi di cookie HttpOnly; Secure; SameSite agar tidak terbaca JavaScript, dan minta konfirmasi ulang untuk aksi bernilai tinggi seperti transfer dana. Prinsip yang sama berlaku untuk API key: jangan pernah menaruh kunci layanan di frontend. Jika kamu memakai APIPedia atau API lain, panggil dari backend dan simpan kuncinya di environment variable server.

Tips untuk pengguna

  • Setelah insiden, periksa sesi aktif dan cabut kredensial API yang pernah dibuat.
  • Tolak permintaan tanda tangan dompet yang aksinya tidak jelas atau tidak kamu harapkan.
  • Waspadai "tautan pemulihan" yang datang tiba-tiba. Dukungan resmi tidak pernah meminta seed phrase.

FAQ

Apakah dana pengguna Polymarket akan dikembalikan?

Polymarket menyatakan akan mengganti penuh semua trader yang terdampak. Hingga artikel ini ditulis, belum ada angka resmi berapa yang akan diganti.

Apa itu script RUM?

RUM (Real User Monitoring) adalah script yang mengukur performa halaman di browser pengguna nyata, misalnya waktu muat dan Core Web Vitals. Karena dipasang langsung di halaman, script ini punya akses penuh seperti kode aplikasi lainnya.

Apakah SRI bisa mencegah serangan seperti ini?

Bisa, jika file vendor dikunci dengan hash. Browser akan menolak file yang sudah diganti. Masalahnya, banyak vendor memperbarui script secara diam-diam sehingga SRI sulit dipakai tanpa self-host dan versi yang dikunci.

Bagaimana tahu apakah situs saya memuat script DebugBear?

Cari string debugbear di kode sumber dan template situs, atau jalankan potongan inventaris di atas pada halaman produksi. DebugBear sendiri meminta pelanggan produk RUM mencabut kode yang tertanam sampai insiden tuntas.

Apakah serangan seperti ini hanya mengincar situs kripto?

Tidak. Pola yang sama, sering disebut Magecart, sudah lama dipakai untuk mencuri data kartu di halaman checkout toko online. Situs kripto hanya membuat dampaknya lebih cepat terlihat karena dana bisa dipindahkan seketika.

Sumber

Topik:

Tentang penulis

Tim APIPedia — Tim Engineering APIPedia

Tim engineering di balik APIPedia yang membangun dan memelihara API data Indonesia - ongkir, OCR KTP, data wilayah, BMKG, hingga server MCP - dan menulis panduan integrasinya dari pengalaman langsung.