Langkau ke kandungan
THE GUILD
0%
Perkhidmatan Produk Kerjaya Tentang Kami Blog Soalan Lazim Hubungi Kami
Shai-Hulud: Apabila NPM Mendapat Virus Yang Benar-benar Merebak Seperti Virus

Tiga kali dalam satu minggu. Tiga. Kali. Pada ketika ini, saya mula fikir NPM bermaksud “Never-ending Pwning Machine” kerana ya ampun kerentanan keselamatan, Batman—kita ada serangan rantaian bekalan lagi, dan yang ini adalah sempurna benar-benar jahat.

Temui Shai-Hulud (ya, itu nama kod sebenar—dinamakan sempena cacing pasir gergasi dari Dune, kerana nampaknya penggodam sudah mula ke rujukan fiksyen sains sekarang). Ini bukan situasi “alamak, saya memuat turun pakej jahat” biasa anda. Tidak, tidak, tidak. Ini adalah pandemik digital yang mereplikasi sendiri yang merebak dari repositori ke repositori seperti ia cuba memenangi Hadiah Nobel untuk Cara Paling Kreatif Merosakkan Hari Semua Orang.

Twist Plot Yang Membuat Jurutera Keselamatan Menangis

Ingat hari-hari lama apabila perisian hasad adalah mudah? Muat turun pakej buruk, perisian hasad mencuri token anda, permainan tamat. Shai-Hulud berkata “pegang bir saya” dan memutuskan untuk berinovasi dengan cara yang paling teruk.

Keindahan ini tidak sekadar mencuri kelayakan anda dan memanggilnya sehari. Ia menggunakan token yang dicuri untuk menjangkiti repositori lain. Ia seperti jika pencuri bukan sekadar merompak rumah anda, tetapi menggunakan kunci anda untuk merompak semua jiran anda, yang kemudian mendapat kunci mereka dicuri untuk merompak jiran mereka, dan seterusnya sehingga seluruh bandar anda hanyalah satu lokasi jenayah gergasi.

Visualisasi penyebaran jangkitan pakej NPM Pakej utama yang terjejas dalam serangan Shai-Hulud termasuk @ctrl/tinycolor, @crowdstrike/falcon-shoelace, ngx-bootstrap, dan 180+ yang lain. Serangan itu menyasarkan pustaka popular merentasi berbilang penyelenggara, daripada komponen UI hingga alat keselamatan, menunjukkan skop besar pelanggaran rantaian bekalan ini. Sumber: OX Security

Serangan bermula dengan pakej yang rendah hati, tidak digunakan lagi bernama rxnt-authentication yang tidak pernah melihat kemas kini dalam tempoh yang lama. Kemudian tiba-tiba—twist plot!—versi 0.0.5 dan 0.0.6 muncul seperti hantu digital, membawa muatan jahat mereka ke alam liar.

Anatomi Darwinisme Digital

Di sinilah ia menjadi menarik secara teknikal (dan menakutkan):

Langkah 1: Cangkuk Phishing Beberapa pembangun yang malang mungkin mendapat e-mel yang meyakinkan: “Hei, anda perlu mengemas kini token npm anda untuk sebab keselamatan! Klik di sini!” Klik. Permainan tamat.

Langkah 2: Kuda Trojan Penyerang menolak versi jahat menggunakan kemas kini tampalan (kerana nampaknya kita masih belum belajar untuk tidak menaik taraf versi tampalan secara automatik—serius, orang, KUNCI VERSI ANDA).

Langkah 3: Parasit Digital Setelah dipasang, pakej menjalankan skrip pasca-pemasangan yang menggunakan sesuatu yang dipanggil “Truffle Hog”—yang, nota sampingan, adalah kedua-dua nama yang sangat baik dan alat keselamatan yang sah yang mengimbas kelayakan yang bocor. Kecuali sekarang ia digunakan untuk kejahatan dan bukannya kebaikan. Ia seperti menonton Superman berubah menjadi perompak bank.

Langkah 4: Penyebaran Viral Inilah karya agung: Daripada hanya mengeksfiltrasi token anda ke beberapa pelayan jauh, Shai-Hulud segera mula bekerja pada repositori GitHub anda. Ia:

  • Mengemas kini pipeline CI/CD anda
  • Mengubah suai fail package.json anda
  • Menerbitkan versi “tampalan” baharu pakej anda
  • Termasuk dirinya dalam versi baharu

Bilas, ulang, pertumbuhan eksponen. Ia seperti skim piramid, tetapi untuk perisian hasad.

Permainan Nombor (Spoiler: Kita Kalah)

Serangan bermula dengan 40 pakej yang terjejas. Dalam beberapa jam, nombor itu melonjak ke 180+. Pada kadar pertumbuhan ini, menjelang minggu depan kita akan mempunyai lebih banyak pakej yang dijangkiti daripada atom dalam alam semesta yang boleh diperhatikan. (Baiklah, itu hiperbola, tetapi pertumbuhan eksponen itu benar-benar menakutkan.)

Carta pertumbuhan jangkitan pakej

Tetapi tunggu—ada lagi! Di antara mangsa, kita ada permata mahkota ironi: CrowdStrike!

Ya, anda membaca dengan betul. CrowdStrike yang sama yang menjual penyelesaian keselamatan dan memberikan kita insiden skrin biru kematian hebat awal tahun ini kini—drumroll sila—secara tidak sengaja mengedarkan serangan cacing melalui pakej npm mereka. Khususnya, serangan itu menjejaskan:

  • @crowdstrike/commitlint (versi 8.1.1, 8.1.2)
  • @crowdstrike/falcon-shoelace (versi 0.4.1, 0.4.2)
  • @crowdstrike/foundry-js (versi 0.19.1, 0.19.2)
  • @crowdstrike/glide-core (versi 0.34.2, 0.34.3)
  • @crowdstrike/logscale-dashboard (versi 1.205.1, 1.205.2)
  • @crowdstrike/tailwind-toucan-base (versi 5.0.1, 5.0.2)

Anda secara literal tidak boleh mengada-adakan perkara ini. Alam semesta mempunyai rasa humor, dan rasa humor itu nampaknya sangat, sangat gelap.

Tragedi “Tiny Color”

Satu lagi mangsa yang patut disebut adalah pakej tiny-color yang popular, yang terkena melalui kelayakan penyelenggaranya yang terjejas. Versi 4.11 dan 4.12 dijangkiti, tetapi dalam tindakan humor yang menentang, versi selamat dikeluarkan sebagai… 4.20.

Sempurna kepada sesiapa yang membuat keputusan nombor versi itu. Di tengah-tengah kekacauan, seseorang masih ada masa untuk bergurau.

Neraka Kebergantungan Yang Kita Cipta

Serangan ini menyerlahkan sesuatu yang kita sengaja mengabaikan: pokok kebergantungan kita adalah gila. Kita mengimport seluruh pustaka untuk menggunakan fungsi tunggal. Perlu pad rentetan? Import left-pad. Perlu menyemak jika sesuatu adalah nombor? Import is-number. Perlu menukar HSV ke RGB? Import pakej lain dengan 47 kebergantungan transitif.

Dalam era AI, di mana anda boleh secara literal bertanya ChatGPT “tuliskan saya fungsi left-pad” dan dapatkan pelaksanaan yang berfungsi dalam 3 saat, mengapa kita masih bermain rolet Rusia kebergantungan?

Ketagihan Kemas Kini Automatik

Bolehkah kita bercakap tentang mengemas kini versi tampalan secara automatik? BERHENTI. Hanya… berhenti. Ini seperti serangan ketiga tahun ini yang bergantung pada kemas kini versi tampalan automatik. Ia 2025, dan kita masih membuat kesilapan yang sama berulang kali.

Kunci versi anda. Ya, ia lebih banyak kerja. Ya, anda akan terlepas beberapa pembaikan pepijat. Tetapi anda tahu apa yang anda tidak akan terlepas? Secara tidak sengaja memasang perisian hasad yang mereplikasi sendiri.

Inilah perkara: walaupun anda warga yang baik dan mengunci versi anda, anda masih terdedah kerana pengurus pakej adalah mimpi ngeri rekursif. Anda bergantung pada pakej A, yang bergantung pada pakej B, yang mengemas kini secara automatik untuk memasukkan perisian hasad, yang kemudian menjangkiti projek anda.

Ia kebergantungan sepanjang jalan, dan setiap tahap adalah vektor serangan berpotensi.

Impak Dunia Sebenar

Ini bukan sekadar teori. Syarikat sebenar, projek sebenar, persekitaran pengeluaran sebenar terkena. Serangan itu menyasarkan:

  • Persekitaran pembangunan dengan token GitHub yang terdedah
  • Pipeline CI/CD dengan kelayakan penerbitan
  • Mesin pembangun tempatan dengan pengesahan yang dicache

Jika anda mempunyai token npm yang tergeletak di mana-mana—dalam pemboleh ubah persekitaran anda, konfigurasi CI anda, kata laluan yang disimpan pelayar anda—Shai-Hulud akan datang untuk mereka.

Strategi Pertahanan (Atau: Bagaimana Tidak Dikena Pwn)

1. Kunci Semuanya

{
  "dependencies": {
    "some-package": "1.2.3",  // Versi tepat, tiada tilde, tiada karet
    "another-package": "4.5.6"
  }
}

2. Audit Seperti Nyawa Anda Bergantung Padanya Jalankan npm audit dengan tekun. Sediakan pengimbasan kebergantungan automatik. Layani package.json anda seperti ia mengandungi kod pelancaran nuklear.

3. Minimumkan Kebergantungan Tanya diri anda: “Adakah saya benar-benar memerlukan pakej untuk menyemak jika nombor itu ganjil?” Jawapannya mungkin tidak.

4. Putar Token Anda Jika anda belum memutar token npm anda baru-baru ini, lakukan sekarang. Jika anda mempunyai token dari 2019 masih terapung-apung, padam mereka semalam.

5. Pantau Pakej Anda Jika anda menyelenggara pakej, sediakan amaran untuk penerbitan yang tidak dijangka. Jika versi 3.1.4 tiba-tiba muncul dan anda tidak menerbitkannya, itu bendera merah sebesar Texas.

Gambaran Lebih Besar

Shai-Hulud mewakili evolusi dalam serangan rantaian bekalan. Ia bukan sekadar perisian hasad—ia perisian hasad yang menyebar sendiri. Ia adalah apa yang berlaku apabila penyerang mengkaji kesan rangkaian dan menerapkannya kepada jenayah siber.

Serangan ini berjaya kerana ia mengeksploitasi beberapa isu sistemik:

  • Pergantungan berlebihan pada kemas kini kebergantungan automatik
  • Kebersihan token yang buruk merentasi ekosistem
  • Sifat saling terhubung pengurusan pakej moden
  • Kecenderungan pembangun untuk mempercayai kemas kini tampalan secara tersirat

Apa Maksudnya untuk Masa Depan

Kita berada di titik infleksi. Sama ada kita secara kolektif menjadi serius tentang keselamatan rantaian bekalan, atau kita akan melihat lebih banyak serangan seperti ini. Shai-Hulud membuktikan bahawa ekosistem npm boleh dijadikan senjata menjadi platform serangan teragih.

Serangan seterusnya mungkin lebih teruk. Ia mungkin menyasarkan imej Docker, atau pakej Python, atau crate Rust. Ia mungkin bertahan lebih lama, merebak lebih cepat, atau menyebabkan lebih banyak kerosakan.

Lapisan Perak

Ada beberapa berita baik: Serangan ini ditangkap dengan agak cepat, pakej yang terjejas sedang dibersihkan, dan komuniti keselamatan bertindak balas dengan pantas dengan alat pengesanan dan amalan yang lebih baik.

Juga, kita semua mendapat kursus intensif dalam keselamatan rantaian bekalan sama ada kita mahukannya atau tidak. Tiada apa yang mengajar pengaturcaraan defensif seperti menonton seluruh ekosistem anda dikuasai oleh virus pakej yang mereplikasi sendiri.

Pengajaran Yang Dipelajari (Dengan Cara Sukar)

  1. Kemas kini automatik adalah mudah sehingga ia menjadi bencana
  2. Setiap kebergantungan adalah vektor serangan berpotensi
  3. Putaran token bukan pilihan—ia penting
  4. Kos menulis fungsi utiliti anda sendiri kini lebih rendah daripada risiko mengimportnya
  5. Keselamatan bukan masalah orang lain—ia masalah semua orang

Pemikiran Akhir

Semasa saya menulis ini, pembersihan Shai-Hulud sedang berjalan. Pakej sedang ditampal, token sedang diputar, dan pembangun di mana-mana sedang mengadakan perbualan yang tidak selesa tentang amalan pengurusan kebergantungan mereka.

Serangan itu cemerlang dalam kesederhanaannya dan menakutkan dalam keberkesanannya. Ia menukar kekuatan terbesar npm—ekosistemnya yang saling terhubung—menjadi kerentanan terbesarnya.

Tetapi inilah perkara: kita boleh belajar daripada ini. Kita boleh membina alat yang lebih baik, melaksanakan amalan yang lebih baik, dan mencipta sistem yang lebih berdaya tahan. Atau kita boleh mengabaikan pengajaran dan menunggu Shai-Hulud 2.0.

Pilihan adalah milik kita. Mari jadikan ia pilihan yang baik.

Kekal berwaspada, pastikan kebergantungan anda dikunci, dan ingat: dalam dunia pengurusan pakej, paranoia bukan pepijat—ia adalah ciri.


Sumber:

Kemas kini pakej anda dengan bertanggungjawab, kawan-kawan. Ekosistem bergantung padanya.