Sejak token klasik dicabut permanen pada 9 Desember 2025, npm trusted publishing menjadi jalur yang dianjurkan GitHub untuk merilis paket JavaScript tanpa token statis. Per 29 Oktober 2026, GitHub juga menambahkan staged publishing, pemindaian malware sebelum persetujuan rilis, dan kontrol instalasi baru. Artikel ini merangkum apa yang berubah dan apa yang perlu diubah oleh maintainer.
Mengapa npm Mengubah Aturan Mainnya
Gelombang worm Shai-Hulud sejak September 2025 menunjukkan pola yang sama berulang: penyerang mencuri token publikasi milik maintainer, lalu menerbitkan versi berbahaya atas nama maintainer tersebut. Kami mengulas kronologinya di artikel tentang Shai-Hulud. Token berumur panjang yang tersimpan di laptop atau di variabel CI adalah target yang paling berharga, karena satu pencurian cukup untuk menyebar ke semua paket milik korban.
Kasus axios pada 31 Maret 2026 memperlihatkan taruhannya. Menurut peringatan CISA, versi axios 1.14.1 dan 0.30.4 menyisipkan dependensi berbahaya yang mengunduh payload bertahap, termasuk trojan akses jarak jauh. Detailnya ada di ulasan axios dan chalk. Arah perubahan GitHub sejak akhir 2025 sejalan dengan pelajaran itu: mengurangi nilai token curian dan menambahkan rem manusia sebelum sebuah versi benar-benar tersedia.
Token Klasik Dicabut: Apa yang Terjadi pada 9 Desember 2025
Menurut changelog resmi GitHub, semua token klasik npm dicabut permanen pada 9 Desember 2025. Token tersebut tidak bisa lagi dipakai login, dibuat ulang, atau diambil kembali. Ada beberapa perubahan turunan yang perlu Anda ketahui:
- Sesi login: perintah npm login sekarang menghasilkan token sesi yang berlaku dua jam, dan 2FA diwajibkan untuk publikasi selama sesi itu.
- Token granular: token tulis dibatasi maksimal 90 hari. Untuk otomasi tanpa interaksi, tersedia opsi Bypass 2FA saat token dibuat.
- Paket baru: 2FA aktif secara default pada paket yang baru dibuat, sedangkan paket lama mempertahankan pengaturannya.
- Perintah baru: npm token create membuat token granular langsung dari terminal. GitHub juga menganjurkan trusted publishing berbasis OIDC sebagai cara paling aman karena tidak perlu membuat dan mengelola token publikasi.
Jika pipeline Anda dulu bergantung pada token klasik di CI, pipeline itu berhenti bekerja sejak tanggal tersebut dan perlu dimigrasikan. GitHub juga menyebut sebuah endpoint login lama sempat dipulihkan sementara dengan sesi dua jam yang sama, terutama berdampak pada pengguna Yarn v1 dan v2, dan saat itu menyatakan penghapusannya direncanakan dalam beberapa bulan.
npm Trusted Publishing, Staged Publishing, dan Pemindaian Malware
Trusted publishing memakai OIDC: workflow CI Anda membuktikan identitasnya kepada npm, sehingga tidak ada token statis yang perlu disimpan. Tiga pembaruan penting datang sesudahnya, semuanya diumumkan lewat changelog GitHub.
- 22 Mei 2026, staged publishing tersedia umum. Perintah npm stage publish (npm CLI 11.15.0 atau lebih baru) menaruh tarball ke antrean. Paket tidak bisa dipasang sampai maintainer menyetujuinya dengan tantangan 2FA. Konfigurasi trusted publishing dapat diatur stage-only, sehingga npm publish langsung dari workflow tersebut ditolak.
- 3 September 2026, beberapa konfigurasi per paket. Satu paket kini boleh punya lebih dari satu konfigurasi trusted publishing, misalnya untuk rilis stabil, prarilis, dan staging. Tombol persetujuan di antrean tetap nonaktif sampai pemindaian malware selesai. Setiap konfigurasi dapat melakukan staging secara default, sedangkan publikasi langsung menjadi opsi yang harus diaktifkan sendiri. GitHub menyarankan konfigurasi stage-only.
- 2 Oktober 2026, paket baru lewat staging. npm stage publish kini bisa dipakai untuk membuat paket baru, yaitu paket publik (bercakupan maupun tidak) dan paket privat bercakupan, dengan versi pertama masuk antrean dan harus dipromosikan maintainer.
Kontrol Instalasi dan Cooldown untuk Pengguna Paket
Sisi konsumen juga mendapat alat baru. Pada npm CLI 11.15.0 tersedia flag --allow-file, --allow-remote, dan --allow-directory, ditambah --allow-git yang sudah ada sejak 11.10.0. Masing-masing menerima nilai all (default saat ini) atau none, dan bisa ditulis di .npmrc atau package.json. GitHub menyatakan default --allow-git akan berubah menjadi none pada versi mayor v12, jadi Anda dapat mencoba perilaku yang lebih ketat dari sekarang.
Pendekatan lain adalah memperlambat adopsi versi baru. Sejak 14 Juli 2026, menurut changelog GitHub, Dependabot menunggu sampai sebuah rilis baru berumur minimal tiga hari sebelum membuka pull request pembaruan versi. Aturan ini hanya untuk version updates; security updates tetap dibuka segera, dan jendelanya bisa diubah atau dimatikan lewat opsi cooldown di .github/dependabot.yml. PyPI, menurut laporan BleepingComputer, kini menolak file baru yang ditambahkan ke sebuah rilis setelah 14 hari sejak rilis itu dipublikasikan. Untuk npm, CISA dalam peringatan axios menyarankan min-release-age=7 di .npmrc serta ignore-scripts=true. Menurut BleepingComputer, GitHub sendiri menyoroti keterbatasan cooldown terhadap kompromi yang berlangsung lebih lama, jadi ia pelengkap, bukan pengganti.
Checklist Praktis untuk Maintainer
- Pindahkan rilis ke trusted publishing dan hapus token publikasi dari secret CI.
- Gunakan konfigurasi stage-only agar setiap versi butuh persetujuan manusia dengan 2FA.
- Aktifkan 2FA tahan phishing (misalnya passkey atau kunci keamanan) pada akun npm dan GitHub.
- Batasi id-token: write hanya pada job rilis, dan jangan menjalankan kode dari fork di workflow yang punya izin tinggi.
- Pin action ke commit SHA lengkap, seperti dibahas di panduan keamanan pipeline CI/CD.
- Pantau publikasi yang berasal dari workflow yang gagal atau tidak punya tag rilis yang cocok. OpenSSF mencatat bahwa pada kasus TanStack, paket berbahaya terbit dari run yang berakhir berstatus gagal.
Batas Trusted Publishing: Bukan Peluru Perak
OpenSSF menganalisis kasus TanStack pada 11 Mei 2026. Penyerang memakai workflow pull_request_target, meracuni cache build, lalu mengambil token OIDC dari memori runner, sehingga paket berbahaya terbit dengan provenance yang valid. Artinya trusted publishing membuktikan pipeline mana yang membangun artefak, bukan bahwa pipeline itu berperilaku benar. Karena itu staging dengan persetujuan manusia dan pemindaian malware menjadi lapisan tambahan yang bermakna, dan hygiene workflow tetap wajib.
Pertanyaan yang Sering Diajukan
Apakah saya masih bisa memakai token klasik npm?
Tidak. Semua token klasik dicabut permanen pada 9 Desember 2025. Gunakan token granular berumur pendek atau, lebih baik, trusted publishing.
Apakah trusted publishing otomatis membuat paket saya aman?
Tidak otomatis. Ia menghilangkan token statis yang bisa dicuri, tetapi pipeline yang dikompromikan tetap dapat menerbitkan rilis berbahaya. Kombinasikan dengan staging, izin minimal, dan review workflow.
Apa bedanya cooldown dengan staged publishing?
Staged publishing dipakai oleh maintainer untuk menahan rilis sampai disetujui. Cooldown dipakai oleh pengguna paket untuk menunda adopsi versi baru agar pemindai sempat menemukan rilis berbahaya.
Apakah proyek kecil perlu repot menerapkannya?
Ya, karena worm tidak memilih berdasarkan ukuran proyek. Satu paket kecil yang dikompromikan bisa menjadi pintu masuk ke banyak pengguna di hilirnya.
Kesimpulan
Arah perubahan npm jelas: kurangi rahasia berumur panjang, tambahkan persetujuan manusia, dan beri waktu bagi pemindai. Maintainer sebaiknya segera beralih ke trusted publishing stage-only, sementara tim pengguna paket menerapkan cooldown dan membatasi skrip instalasi. Jika tim Anda ingin membangun kebiasaan ini secara terstruktur, lihat program training dari Linuxhackingid, atau pelajari fondasinya di artikel supply chain attack.
Setiap artikel ditinjau pimpinan praktik yang menangani pekerjaannya sebelum terbit.
