Serangan Rantaian Bekalan NPM Mendedahkan Kelemahan Kritikal dalam Aliran Kerja Penerbitan Automatik

Pasukan Komuniti BigGo
Serangan Rantaian Bekalan NPM Mendedahkan Kelemahan Kritikal dalam Aliran Kerja Penerbitan Automatik

Serangan rantaian bekalan baru-baru ini yang menyasarkan pakej popular @ctrl/tinycolor telah mencetuskan perdebatan sengit mengenai keselamatan aliran kerja penerbitan automatik dalam ekosistem JavaScript. Insiden ini, yang menjejaskan 20 pakej termasuk satu yang dimuat turun 2 juta kali setiap minggu, telah mendedahkan kelemahan asas dalam cara pembangun menguruskan kelayakan penerbitan merentasi repositori berkongsi.

Garis Masa Serangan dan Kesan

  • Tarikh: 15 September 2024
  • Pakej Terjejas: 20 pakej keseluruhan
  • Pakej Berimpak Tinggi: @ctrl/tinycolor (2 juta muat turun mingguan)
  • Vektor Serangan: Aliran kerja GitHub Actions berniat jahat dalam repositori berkongsi
  • Masa Tindak Balas: Pengesanan dan penyingkiran pada hari yang sama oleh pasukan keselamatan GitHub/NPM

Bahaya Tersembunyi Token Repositori Berkongsi

Serangan ini tidak menyasarkan repositori pakej utama secara langsung. Sebaliknya, ia mengeksploitasi token NPM yang terlupa yang disimpan dalam repositori GitHub berkongsi yang dipanggil angulartics2, di mana beberapa pembangun mempunyai akses pentadbir. Aliran kerja berniat jahat telah ditolak ke repositori ini, serta-merta mencuri token dan menggunakannya untuk menerbitkan versi terkompromi pakej yang tidak berkaitan. Ini menyerlahkan pengawasan kritikal dalam cara pembangun menguruskan kelayakan merentasi projek kolaboratif.

Respons komuniti telah pantas tetapi berpecah mengenai penyelesaian. Ramai pembangun mempersoalkan sama ada kemudahan penerbitan automatik berbaloi dengan risiko keselamatan yang diperkenalkannya.

Perdebatan Automasi Besar

Insiden ini telah mencetuskan semula perbincangan mengenai sama ada penerbitan automatik sepatutnya menjadi pendekatan lalai untuk pengurusan pakej. Sesetengah ahli komuniti berhujah bahawa penerbitan manual dengan pengesahan dua faktor akan menghalang serangan ini sepenuhnya. Alasannya mudah: kebanyakan pakej NPM tidak dikemas kini dengan kerap untuk membenarkan risiko keselamatan aliran kerja automatik.

Walau bagaimanapun, yang lain menunjukkan faedah praktikal automasi, termasuk pembinaan yang konsisten dan mengurangkan kesilapan manusia. Cabaran terletak pada mencari jalan tengah yang mengekalkan keselamatan tanpa mengorbankan kebolehpercayaan yang disediakan oleh sistem automatik.

Perdebatan berterusan mengenai penerbitan automatik berbanding proses manual untuk pengurusan pakej menimbulkan persoalan keselamatan yang penting
Perdebatan berterusan mengenai penerbitan automatik berbanding proses manual untuk pengurusan pakej menimbulkan persoalan keselamatan yang penting

Penambahbaikan Keselamatan yang Dicadangkan

Beberapa penyelesaian teknikal telah muncul daripada perbincangan komuniti. Yang paling menjanjikan melibatkan pemisahan muat naik pakej daripada penerbitan - membenarkan sistem automatik membina dan memuat naik pakej sambil memerlukan kelulusan manusia untuk penerbitan akhir. Pendekatan dua fasa ini akan mengekalkan faedah automasi sambil menambah titik semak manusia yang penting.

Menerbitkan pakej yang dimuat naik sepatutnya memerlukan manusia untuk log masuk ke laman web npmjs & menerbitkan pakej secara manual dan melalui MFA.

Penambahbaikan lain yang dicadangkan melibatkan pelaksanaan kelewatan masa atau memerlukan beberapa pelulus untuk operasi sensitif, serupa dengan amalan keselamatan yang digunakan dalam sistem infrastruktur kritikal.

Penambahbaikan Keselamatan yang Dicadangkan

  • Penerbitan Dua Fasa: Memisahkan muat naik automatik daripada kelulusan penerbitan manual
  • Kelulusan Berbilang Orang: Memerlukan beberapa penyelenggara untuk meluluskan keluaran
  • Kelewatan Kunci Masa: Melaksanakan tempoh menunggu antara pembinaan dan penerbitan
  • Integrasi MFA Dipertingkat: Integrasi yang lebih baik bagi 2FA dengan aliran kerja CI/CD
  • Amaran Skrip Postinstall: Penunjuk yang lebih ketara untuk pakej dengan skrip postinstall

Masalah Token dan Penyelesaian OIDC

Serangan ini telah menyerlahkan isu asas dengan token pengesahan berumur panjang. Token ini bertindak pada asasnya sebagai kata laluan kekal yang boleh dicuri dan disalahgunakan. Komuniti mendesak untuk penerimaan yang lebih luas Penerbitan Dipercayai menggunakan OpenID Connect ( OIDC ), yang menjana token berumur pendek yang sah selama 15 minit sahaja.

Walaupun sokongan OIDC wujud untuk NPM, integrasi dengan alat popular seperti semantic-release kekal tidak lengkap. Jurang antara amalan terbaik keselamatan dan perkakas praktikal ini terus meninggalkan pembangun terdedah kepada serangan serupa.

Teknologi Keselamatan yang Dibincangkan

  • Trusted Publishing (OIDC): Menjana token sementara selama 15 minit sebagai ganti kelayakan yang berterusan lama
  • NPM Provenance: Menyediakan pengesahan tentang cara pakej dibina
  • Two-Factor Authentication: Pengesahan manual untuk operasi penerbitan
  • GitHub Environments: Perlindungan aliran kerja (memerlukan langganan Pro)
  • Semantic-release: Alat automasi popular dengan integrasi OIDC yang belum selesai

Pengajaran untuk Ekosistem yang Lebih Luas

Insiden ini berfungsi sebagai panggilan bangun untuk keseluruhan ekosistem JavaScript. Serangan ini berjaya bukan melalui penggodaman yang canggih, tetapi dengan mengeksploitasi pengawasan keselamatan asas - token yang terlupa dalam repositori berkongsi dan kawalan akses yang terlalu permisif. Ia menunjukkan bagaimana keputusan kerjasama masa lalu boleh mencipta vektor serangan yang tidak dijangka bertahun-tahun kemudian.

Respons pantas daripada pasukan keselamatan GitHub dan NPM, yang dengan cepat mengenal pasti dan mengeluarkan pakej berniat jahat, menunjukkan bahawa sistem pengesanan dan respons semakin baik. Walau bagaimanapun, cabaran asas kekal: menghalang serangan ini daripada berjaya di tempat pertama.

Insiden ini menggariskan keperluan untuk lalai keselamatan yang lebih baik dalam sistem pengurusan pakej, panduan yang lebih jelas mengenai pengurusan kelayakan, dan alat yang menjadikan amalan selamat semudah yang tidak selamat sekarang. Sehingga penambahbaikan ini dilaksanakan, serangan serupa mungkin akan terus melanda ekosistem JavaScript.

Rujukan: @ctrl/tinycolor Supply Chain Attack Post-mortem