- Pada 4 Ogos 2026, sejenis cacing yang merambat sendiri bernama ChainDrop telah menjejaskan lebih 400 pakej npm, termasuk keyv dan flat-cache, dalam masa empat jam.
- Serangan itu menggunakan kelayakan GitHub yang dicuri untuk menerbitkan versi berniat jahat dengan asal usul yang sah, menjadikannya tidak dapat dibezakan daripada keluaran yang sah.
- Muatan mencuri kelayakan, mengeluarkan data melalui C2 berasaskan Ethereum dan menerbitkan semula pakej yang dijangkiti menggunakan token npm yang dicuri.
- Organisasi mesti menyemak fail kunci, memutar kelayakan dan mengalih keluar mekanisme ketekunan untuk mengurangkan impak.
Ekosistem npm sedang terhuyung-hayang akibat salah satu serangan rantaian bekalan paling agresif yang pernah dilihat. Pada 4 Ogos 2026, sejenis cecacing yang digelar ChainDrop telah merobek daftaran, meracuni ratusan pakej dalam masa kurang daripada empat jam. Serangan itu memanfaatkan akaun GitHub yang dikompromi untuk menerbitkan versi berniat jahat bagi pustaka yang digunakan secara meluas seperti keyv dan flat-cache, yang bersama-sama menyumbang ratusan juta muat turun mingguan. Apa yang menjadikan insiden ini amat membimbangkan ialah keluaran berniat jahat itu membawa asal-usul SLSA yang sah, menjadikannya kelihatan sah sepenuhnya untuk pemeriksaan keselamatan automatik.
Penyelidik keselamatan dari StepSecurity, Unit 42, Sonatype dan Aikido telah berlumba-lumba untuk menganalisis cecacing ini dan membendung penyebarannya. Gelombang awal melanda ekosistem jaredwray, tetapi cecacing ini dengan cepat berkembang ke penyelenggara dan organisasi lain, termasuk ServiceTitan, Qlik dan Deliveroo. Sehingga kemas kini terkini, bilangan pakej yang dikompromi terus meningkat, dengan jangkitan baharu muncul setiap beberapa minit. Ini bukan sekadar kempen mengecilkan taip; ia merupakan cecacing yang canggih dan menyebarkan diri yang mencuri kelayakan dan menggunakannya untuk menerbitkan semula dirinya merentasi daftar npm.
Serangan Sepintas Lalu

Serangan itu bermula apabila akaun GitHub milik Jared Wray, penyelenggara keyv dan pakej berkaitan, telah dikompromi. Penyerang tersebut menolak komitmen berniat jahat terus ke cawangan utama dan memotong keluaran baharu, yang kemudiannya diterbitkan ke npm melalui aliran kerja penerbitan projek yang dipercayai sendiri. Ini bermakna versi yang diracuni mempunyai pengesahan asal SLSA yang sah , satu ciri yang banyak pasukan andalkan sebagai isyarat keselamatan. Walau bagaimanapun, asal usul hanya membuktikan komitmen mana yang dibina, bukan sama ada komitmen itu dibenarkan. Penyerang juga menanam fail ujian palsu dan skrip keluaran yang diubah suai untuk memastikan versi berniat jahat menjadi tag pengedaran terkini.
Pakej berniat jahat tersebut mengandungi skrip prapemasangan yang melaksanakan dropper yang dipanggil setup.mjs. Dropper ini memuat turun runtime JavaScript Bun yang sah daripada GitHub dan menggunakannya untuk menjalankan muatan terabur 727 KB bernama Math_Symbol.js. Muatan tersebut merupakan cecacing berciri penuh yang mengumpul kelayakan daripada sistem mangsa, termasuk token npm, token GitHub, kelayakan awan, kunci SSH dan juga konfigurasi alat AI. Ia kemudiannya mengeluarkan data tersebut ke pelayan arahan dan kawalan, yang diselesaikan melalui kontrak pintar Ethereum—teknik yang dikenali sebagai EtherHiding.
Pakej dan Skop yang Terjejas

Gelombang awal menyasarkan 11 pakej dalam ekosistem jaredwray, termasuk keyv@6.0.0, flat-cache@6.1.24 dan file-entry-cache@11.1.6. Pakej-pakej ini merupakan kebergantungan transitif bagi projek yang tidak terkira banyaknya, daripada ESLint hinggalah kepada pengurus cache. Cacing tersebut kemudiannya menggunakan kelayakan yang dicuri untuk menerbitkan semula 433 pakej tambahan, menjadikan jumlah keseluruhan kepada 444 pakej dan 2,212 versi dalam beberapa jam pertama. Laporan kemudian daripada Sonatype dan Aikido menunjukkan bilangannya telah meningkat lebih tinggi, dengan lebih 1,000 pakej terjejas apabila keadaan reda.
Gelombang kedua menyerang pakej daripada organisasi seperti @servicetitan, @qlik, @onereach dan @deliveroo, menunjukkan bahawa cacing tersebut telah berpindah daripada alatan pembangun awam ke dalam saluran binaan korporat. Penyerang juga mencipta repositori awam dengan nama bertemakan Dune untuk mementaskan data yang telah diekstrak, dan mereka menanam mekanisme ketekunan dalam direktori .vscode dan .claude untuk menjangkiti semula pembangun yang membuka repositori yang dikompromi.
Bagaimana Cacing ChainDrop Berfungsi
Rantaian serangan merupakan kelas induk dalam kehidupan di luar negara. Skrip prapemasangan berjalan sebelum sebarang kebergantungan dipasang, jadi cecacing akan dilaksanakan dengan keistimewaan pengguna. Penitis menyemak sama ada Bun sudah ada; jika tidak, ia memuat turun binari Bun yang sah daripada GitHub. Ini menjadikan trafik rangkaian kelihatan tidak berbahaya, kerana ia datang dari github.com. Muatan peringkat kedua kemudiannya memisahkan dirinya sebagai proses latar belakang dan memulakan kerja kotornya.
Salah satu teknik yang paling tersendiri ialah pengikisan memori pelari . Muatan menjalankan pembantu Python yang membaca memori proses GitHub Actions Runner.Worker, mencari rahsia yang disuntik ke dalam aliran kerja. Ini membolehkannya menangkap token OIDC dan kelayakan sementara lain yang sebaliknya akan hilang apabila kerja tamat. Cecacing ini juga menggunakan suis bunuh setempat Rusia, keluar dengan bersih jika bahasa sistem adalah Rusia, taktik biasa untuk mengelakkan penyasaran negara CIS.
Muatan tersebut merangkumi enjin penerbitan npm penuh. Ia menyenaraikan semua pakej yang boleh diterbitkan oleh mangsa, memuat turun tarball semasa, menyuntik skrip dan muatan prapemasangan berniat jahat dan menerbitkan semula pakej dengan versi tambahan. Ia juga menjana pakej asal Sigstore dan SLSA sendiri, menjadikan versi berniat jahat kelihatan dibina secara sah. Mekanisme penyebaran kendiri inilah yang membolehkan cacing merebak dengan begitu cepat merentasi organisasi yang tidak berkaitan.
Petunjuk Kompromi
Jika anda memasang mana-mana versi yang terjejas, anggap sistem anda telah dikompromi. Cari penunjuk ini:
- Fail bernama setup.mjs, Math_Symbol.js atau math_init.js dalam direktori node_modules.
- Binari Bun yang tidak dijangka pada sistem anda, terutamanya jika anda tidak pernah memasang Bun.
- Pengubahsuaian pada .claude/settings.json atau .vscode/tasks.json yang merujuk kepada setup.mjs.
- Sambungan keluar ke npm-cache.com atau awqhnjewqjkl.icu, atau panggilan Ethereum RPC untuk mengikat kontrak 0xE1f2395ee43e45A1556EC6438a88c31B83493103.
- Repositori GitHub baharu dengan perihalan seperti “Shai-Hulud: Here We Go Again” atau nama bertemakan Dune.
Periksa juga monitor token yang dipasang selepas exfiltration: ~/.local/bin/gh-token-monitor.sh, ~/.config/gh-token-monitor/ dan systemd atau LaunchAgent services. Cacing memasangnya untuk menghukum putaran kelayakan dengan mencetuskan muatan penyerang apabila token yang dicuri dibatalkan.
Mitigasi dan Pemulihan
Jika anda terjejas, bertindak pantas. Pertama, asingkan mesin dan simpan log. Kemudian, putar semua kelayakan yang terdapat pada sistem, termasuk token npm, PAT GitHub, kekunci awan dan kekunci SSH. Keluarkan monitor token sebelum memutar, kerana ia akan berfungsi jika anda membatalkan token tersebut. Seterusnya, bersihkan fail kunci anda dan pinkan pada versi yang diketahui baik. Untuk keyv, flat-cache dan file-entry-cache, gunakan override untuk menyekat versi berniat jahat. Akhir sekali, pasang semula dengan –ignore-scripts untuk mengelakkan sebarang hook pemasangan yang berlarutan daripada dilaksanakan.
Untuk saluran paip CI/CD, semak log untuk sebarang pemasangan yang menyelesaikan versi yang terjejas semasa tetingkap pendedahan. Anggap mana-mana pelari yang memasang pakej yang diracuni sebagai telah dikompromikan dan putar semua rahsia yang tersedia untuk kerja tersebut. Audit juga organisasi GitHub anda untuk aliran kerja yang tidak dijangka bernama "Jalankan Copilot" atau artifak bernama "format-results", yang merupakan tanda-tanda pencucian rahsia cacing.
Pertahanan yang mendalam adalah penting. Gunakan senarai kebenaran keluar pada pelari CI untuk menyekat dropper daripada mengambil Bun. Laksanakan dasar cooldown yang memerlukan pakej berusia beberapa hari sebelum penggunaan. Dan jangan bergantung sepenuhnya pada asal usul—ia bukan jaminan keselamatan. Pertahanan terbaik adalah meminimumkan penggunaan skrip pemasangan dan memantau tingkah laku yang tidak normal.
Ketika siasatan berterusan, bilangan pakej yang terjejas masih semakin meningkat. Keupayaan cacing untuk memutar infrastruktur C2nya melalui satu transaksi Ethereum menjadikannya sangat berdaya tahan. Pasukan keselamatan harus memantau kontrak pintar untuk perubahan dan sentiasa dikemas kini tentang penunjuk baharu. Daftar npm telah mula mengalih keluar versi berniat jahat, tetapi pembersihan sedang dijalankan.
Insiden ini merupakan peringatan jelas bahawa ekosistem sumber terbuka hanya seaman pautan terlemahnya. Satu akaun penyelenggara yang dikompromi boleh mengakibatkan serangan rantaian bekalan yang besar-besaran. Cacing ChainDrop merupakan amaran kepada pembangun dan organisasi untuk menerima pakai amalan keselamatan yang lebih kukuh, termasuk pengesahan berbilang faktor, token paling kurang keistimewaan dan pemantauan berterusan ke atas kebergantungan.