Paket npm berbahaya ditemukan di berbagai layanan Red Hat Cloud Services
(github.com/RedHatInsights)- Isu ini masih terbuka, dan pada saat penulisan belum ada penanggung jawab, milestone, maupun branch atau PR yang terhubung
- Ini didaftarkan sebagai isu keamanan bahwa versi berbahaya ditemukan pada beberapa rilis npm dalam cakupan
@redhat-cloud-services/ - Sebagai referensi, disertakan artikel analisis dari StepSecurity dan hasil pencarian OSS Security Feed
- Daftar dampak yang diperbarui mencakup 32 paket seperti
@redhat-cloud-services/chrome,frontend-components,rbac-client,types, danvulnerabilities-client - Versi yang terdampak dalam tabel umumnya berjumlah 3 per paket, sementara
@redhat-cloud-services/vulnerabilities-clienthanya mencakup dua versi:2.1.9dan2.1.11 - Berdasarkan seluruh tabel, jumlah versi yang terdampak dapat dihitung mencapai 95 versi, dan judul PR eksternal yang disebut terpisah juga merujuk pada
95 versions - Rangkaian
@redhat-cloud-services/frontend-components-*dan beberapa paket*-clientikut tercakup, sehingga ini bukan masalah pada satu paket saja melainkan pada rilis di seluruh cakupan yang sama - Di komentar, pertanyaan “What are these?” dijawab dengan “all that module is pwned”, yang menunjukkan pemahaman bersama bahwa seluruh daftar telah disusupi
- DanielRuf menuliskan bahwa ia telah menambahkan insiden ini ke supply-chain-incidents
- Aktivitas GitHub menunjukkan ringkasan konten yang merujuk ke isu ini dan PR terkait deteksi, tetapi hingga isi saat ini, diagnosis, langkah mitigasi, penghapusan, maupun versi perbaikan dari pihak Red Hat belum disajikan
1 komentar
Komentar Hacker News
Semoga tidak masalah meminjam thread ini lagi untuk membahas pengaturan cooldown. axios, tanstack, @redhat-cloud-services, dan berbagai serangan rantai pasok npm belakangan ini kemungkinan bisa dicegah jika ada cooldown
Jika memakai Artifactory/Nexus, kemungkinan besar ini sudah ada, dan kalau pun belum, konfigurasinya mudah. Karena sebagian besar kompromi npm atau PyPI diturunkan dalam hitungan jam, pendekatan mengabaikan paket yang dirilis kurang dari N hari sudah cukup. Bahkan 1 hari efektif, 3 hari cukup baik, dan 7 hari agak berlebihan tetapi tetap berfungsi
pnpm terbaru kini menerapkan cooldown 1 hari secara default: https://pnpm.io/supply-chain-security
Jika ingin semuanya selesai dengan satu klik, bisa memakai https://depsguard.com. Ini adalah CLI yang menambahkan cooldown dan pengaturan yang direkomendasikan ke npm, pnpm, yarn, bun, uv, dan dependabot, dan saya adalah maintainer-nya
Ada juga https://cooldowns.dev yang lebih berfokus pada cooldown, serta skrip untuk membantu konfigurasi lokal. Semuanya open source/gratis
Kalau Anda bisa mengedit
~/.npmrcdan semacamnya secara manual, ini memang tidak terlalu diperlukan, tetapi jika ada orang di sekitar Anda yang hanya butuh perbaikan satu klik, ini bisa membantu mereka menghindari serangan berikutnyaHanya saja, saat perlu menambal CVE kritis baru, cooldown harus bisa dilewati, dan tiap alat punya cara bypass-nya sendiri. Saya tidak punya angka pasti untuk beberapa bulan terakhir, tetapi bahkan di era penemuan kerentanan ala Mythos, risikonya tetap tampak lebih besar dari serangan rantai pasok perangkat lunak seperti penyebaran versi berbahaya daripada CVE zero-day baru
~/.npmrcdan menambahkan satu baris, tetap terasa seperti kelompok yang sangat kecil yang benar-benar membutuhkan perbaikan satu klikSangat mungkin untuk mengatakan, “pembaruan keamanan seharusnya hanya berisi pembaruan keamanan dan tidak membawa fitur lain.” Dengan begitu, peneliti keamanan maupun alat otomatis akan lebih mudah melakukan audit
Cooldown bisa diterapkan pada rilis biasa, sementara untuk pembaruan keamanan cooldown bisa dihilangkan atau dibuat jauh lebih singkat
Sistem seperti Debian, dengan server yang sangat stabil dan pengaturan unattended upgrades agar hanya berlaku untuk pembaruan keamanan, layak dijadikan referensi. Rilis paket baru seperti ini juga lebih mudah diaudit oleh peneliti keamanan.
Di setiap thread seperti ini, selalu banyak komentar yang bersikap seolah-olah jenis serangan ini hanya ada di npm, atau menyindir seakan tidak ada tindakan apa pun yang pernah diambil, tapi menurut saya itu tidak adil.
Banyak juga komentar yang menyebut fitur-fitur bagus yang diperkenalkan delay line dan pnpm untuk melindungi konsumen paket.
Bagian yang lebih jarang dibicarakan adalah alat di sisi maintainer paket. MFA untuk publikasi: https://docs.npmjs.com/requiring-2fa-for-package-publishing-..., dan trusted publishers yang tersedia sejak sekitar setahun lalu: https://docs.npmjs.com/trusted-publishers
Baru-baru ini, hadir juga staged publishing yang menggabungkan keunggulan keduanya: https://docs.npmjs.com/staged-publishing
Sekarang kita bisa melakukan publikasi dari CI tanpa kredensial statis, lalu mewajibkan maintainer menyetujui dengan MFA sebelum benar-benar dipublikasikan ke registry. Jika diinginkan, kita juga bisa mewajibkan persetujuan ganda atau jeda waktu di sisi CI dengan perlindungan GitHub Actions Environments.
Komunitas perlu didorong untuk mengadopsi pengaman publikasi seperti ini, kalau tidak masalah ini akan terus berlanjut.
Kalau begitu, paket berbahaya itu juga akan mendapat bintang hijau dan meyakinkan pengguna dengan klaim “dibangun dan ditandatangani dengan provenance”.
[1] https://lwn.net/Articles/1075742/
Bagus bahwa ada pekerjaan yang dilakukan untuk mencegahnya, tapi tetap saja terus terjadi. Lucunya dalam arti “ya ampun, kejadian lagi”.
Dari luar, pengembangan web punya energi seperti wilayah barat liar yang kacau. Ada mutabilitas, dynamic typing, standar dan framework yang terus berubah, continuous deployment, CDN, kampanye A/B real-time, banyak dependensi, dan data pengguna sensitif yang tersebar di berbagai infrastruktur.
Saya tidak bilang sudut pandang ini pasti benar, dan juga tidak menganggap sikap “tuh kan” itu tepat, tapi saya paham dari mana asalnya.
Khususnya, tidak satu pun dari keduanya yang akan mencegah backdoor xz-utils masuk ke distribusi paket. xz-utils tetap menjadi patokan untuk kompromi hulu yang canggih.
Bug di sini bukan bahwa kita perlu mengautentikasi hulu yang sudah kita percaya dengan lebih baik, melainkan bahwa kita tidak bisa mempercayai hulu sebagai satu-satunya sumber keamanan. Hulu adalah kumpulan peretas yang umumnya tidak terlalu peduli pada release engineering yang kokoh dan juga tidak terlalu mahir melakukannya.
Tapi ada orang-orang yang memang mahir dalam hal itu. Solusi di dunia Linux, dan cara yang menyelamatkan kita dari xz-utils, adalah adanya lapisan manusia kedua yang meninjau, mengaudit, memaketkan, dan menyesuaikan hulu buatan para peretas itu untuk para pengguna.
Orang-orang ini punya sudut pandang lain, kebutuhan konsumen yang lain, dan standar kualitas yang lain, sehingga mereka bisa menangkap bug dan niat jahat yang belum siap ditangkap oleh pihak hulu.
NPM, cargo, PyPI, dan lain-lain terus berpikir bahwa kebutuhan akan tenaga manusia ini bisa dilewati, padahal tidak bisa. Ekosistem NPM khususnya punya banyak pengembang web yang terbiasa dengan rilis sangat cepat, tuntutan kompatibilitas yang longgar, dan penggunaan ulang yang ekstrem, sehingga hal seperti ini lebih sering terlihat pada paket node dibandingkan Python atau Rust.
Perusahaan kami memakai yarn 4, dan ada opsi untuk memblokir pemasangan paket npm selama beberapa hari pertama setelah dirilis. Sebagian besar serangan seperti ini tampaknya tertangkap dalam periode itu (1~3 hari)
https://gist.github.com/mcollina/b294a6c39ee700d24073c0e5a4e...
paket axios dikompromikan, dan kredensial penulisnya juga dicuri sehingga setiap upaya perbaikan kembali digagalkan: https://www.trendmicro.com/en_us/research/26/c/axios-npm-pac...
utilitas xz memiliki backdoor selama 2 bulan: https://gigazine.net/gsc_news/en/20240403-timeline-of-xz-ope...
seorang peneliti mahasiswa mengambil alih hak pemeliharaan paket Python ctx dan PHPass, lalu mendistribusikan perubahan berbahaya, dan butuh lebih dari 7 hari untuk deteksi dan perbaikannya: https://infosecwriteups.com/how-i-hacked-ctx-and-phpass-modu...
Kaspersky menemukan beberapa paket PyPI yang dieksploitasi selama lebih dari 1 tahun: https://www.kaspersky.com/about/press-releases/kaspersky-unc...
paket “LoftyLife” dieksploitasi selama beberapa bulan: https://securelist.com/lofylife-malicious-npm-packages/10701...
Jika jendela serangan diubah menjadi 7 hari, semua serangan baru seperti ini kemungkinan akan memasang bom waktu yang baru aktif pada hari ke-8
pnpmjuga punya fungsi yang sama, dan aktif secara default mulaiv11: https://pnpm.io/settings#minimumreleaseageAda beberapa saran. Cooldown dependensi 1~2 hari tampaknya sangat efektif tanpa merusak kemampuan patch CVE
Semua tempat yang menjalankan kode seperti
npm install,npm testharus berjalan di lingkungan tanpa hak istimewa. Di GitHub Actions, ini relatif mudah dilakukan dengan memisahkan job yang membangun/menguji artefak dari job yang melakukan deployment/penandatanganan, dan sebagainya. Jika memakai AI, cukup tambahkan skill/panduan yang memaksa pola iniJika Anda memakai GitHub Actions, memasang zizmor versi terbaru akan sangat meningkatkan postur keamanan
Langkah kedua membuatnya tidak lagi bisa “menyebar seperti worm”, dan mengurangi porsi besar dari masalah saat ini. Langkah pertama memberi perusahaan waktu untuk merespons serangan. Beberapa vendor di bidang ini juga layak dievaluasi
Agak lucu sebagai lelucon, tepat setelah mengatakan bahwa paket baru harus ditunda
Menjalankan proxy Maven secara lokal, dan semua build dilakukan di dalam kontainer. Python, npm, dan Go hanya memakai repositori publik, jadi build ini juga dijalankan dalam kontainer tetapi tidak memerlukan proxy repositori
Ini terjadi pada hari yang sama ketika Red Hat dan IBM mengumumkan Project Lightwell, yang membantu mendeteksi dan memperbaiki kerentanan rantai pasok
https://www.redhat.com/en/lightwell
Beberapa hari lalu melihat rant menarik ini: https://github.com/uNetworking/uWebSockets.js/blob/master/mi...
Ada benarnya juga bahwa cara yang tepat adalah mem-fork semua dependensi yang dipakai, lalu meninjau dan menggabungkan perubahan upstream saat diperlukan sambil menginstalnya dari repositori sendiri. Hanya saja, itu terdengar sangat merepotkan
Ini bagus untuk mengurangi atau menghilangkan ketergantungan pada penyedia hosting dependensi pihak ketiga, membawa dependensi ke dalam alat code review sendiri, dan dalam jangka panjang menjamin build yang dapat direproduksi
Packj(https://github.com/ossillate-inc/packj) mendeteksi dependensi berbahaya di PyPI/NPM/Ruby/PHP dan lainnya melalui analisis perilaku. Dengan analisis kode statis + dinamis, ia memindai indikator kompromi seperti eksekusi shell, penggunaan kunci SSH, komunikasi jaringan, serta penggunaan decode+eval. Ia juga memeriksa berbagai properti metadata untuk menemukan pelaku berbahaya seperti typosquatting
Sekitar seminggu lalu saya menghapus Node dari laptop, dan rasanya menyenangkan
Untuk mengurangi radius dampak kalau sialnya terkena eksploit, saya sedang mencoba melakukan semua pekerjaan di dalam development container atau sandbox lain. Penyerang mungkin bisa mengambil token Claude, tetapi tidak akan bisa dengan mudah keluar dari container lalu mengobrak-abrik home directory saya
Cooldown dan allowlist skrip instalasi adalah lapisan tambahan yang bagus untuk keamanan berlapis, terutama di CI. Namun pada dasarnya, menurut saya yang harus berubah adalah model perizinan sistem operasi. Default yang mempercayai perangkat lunak pihak ketiga dengan seluruh hak pengguna sudah tidak lagi berfungsi
Sepertinya perlu menautkan pengumuman aslinya
https://www.stepsecurity.io/blog/multiple-redhat-cloud-servi...
Saat memasang paket, saya sekarang jadi terbiasa memakai flag
--before=2026-05-30. Itu memaksa memilih versi yang dirilis sebelum tanggal yang ditentukan, dan biasanya saya memilih sekitar 5 hari sebelumnyahttps://docs.npmjs.com/cli/v11/using-npm/config#min-release-...
pnpmdan menetapkanminimumReleaseAgeyang cukup longgarhttps://pnpm.io/settings#minimumreleaseage
Untungnya, sejak v11 ini aktif secara default
min-release-age=5ke.npmrcdi root proyekNPM sudah rusak sejak desainnya, dan sindrom NIH yang merajalela di komunitas membuat bahkan langkah sederhana pun tidak bisa dilakukan
Karena terlalu banyak menerima paket eksternal alih-alih mengembangkan sendiri, proyek npm cenderung memiliki pohon dependensi yang besar dan rumit. Keluhan tentang paket seperti https://www.npmjs.com/package/is-windows sudah lama ada, karena kode seperti itu terlalu mudah ditulis sendiri tetapi tetap menciptakan potensi kerentanan dan masalah pemeliharaan
Padahal tentu tidak perlu membuat ulang semua fiturnya, cukup buat fungsi yang dibutuhkan saja
Selain itu, saat hanya menulis satu fungsi, tidak perlu membuat abstraksi atau antarmuka fungsi tambahan. Jadi lebih murah, dan kemungkinan terintegrasi lebih baik
Kekeliruan lain adalah anggapan bahwa itu akan menciptakan bug dan kerentanan. Jika programernya buruk, mungkin iya, tetapi setidaknya Anda bisa menghindari kategori kerentanan yang muncul di batas integrasi antara dua pustaka yang tidak dirancang agar saling cocok secara tepat. Kasus seperti itu cukup sering terjadi