Analisis pascainsiden: kompromi rantai pasok npm TanStack
(tanstack.com)- Pada 2026-05-11 19:20~19:26 UTC, penyerang menerbitkan 84 versi berbahaya di 42 paket npm @tanstack/
- Rantai serangan menggabungkan “Pwn Request” pull_request_target, peracunan cache GitHub Actions, dan ekstraksi token OIDC dari memori runner
- Token npm dan workflow publish tidak dicuri atau dikompromikan, dan malware melakukan POST langsung ke registry dengan hak OIDC trusted publisher
- Jika versi terdampak terpasang, kredensial AWS, GCP, Kubernetes, Vault, GitHub, npm, dan SSH mungkin terekspos sehingga perlu diganti
- Semua versi terdampak sudah ditandai deprecated, penghapusan tarball bersama npm security telah dilakukan, dan issue pelacakan serta GitHub Security Advisory telah dipublikasikan
Ringkasan insiden
- Antara 2026-05-11 19:20~19:26 UTC, penyerang menerbitkan 84 versi berbahaya di 42 paket npm
@tanstack/* - Rantai serangan menggabungkan pola
pull_request_target“Pwn Request”, peracunan cache GitHub Actions yang melintasi batas kepercayaan fork↔base, dan ekstraksi token OIDC dari memori proses runner GitHub Actions - Dipastikan token npm tidak dicuri, dan workflow npm publish itu sendiri juga tidak dikompromikan
- Versi berbahaya terdeteksi secara publik dalam 20 menit oleh peneliti eksternal
ashishkurmidaristepsecurity - Semua versi terdampak sudah ditandai deprecated, dan penghapusan tarball dari registry sedang dilakukan bersama npm security
- Pengguna yang memasang versi terdampak pada 2026-05-11 harus mengganti kredensial AWS, GCP, Kubernetes, Vault, GitHub, npm, dan SSH yang dapat diakses dari host instalasi
- Issue pelacakan adalah TanStack/router#7383, dan GitHub Security Advisory adalah GHSA-g7cv-rxg3-hmpx
Cakupan dampak
-
Paket yang terdampak
- Cakupan dampak mencakup 42 paket dan 84 versi, dengan 2 versi per paket diterbitkan dalam selang sekitar 6 menit
- Daftar lengkap disertakan dalam issue pelacakan
- Lini produk yang telah dikonfirmasi tidak terdampak adalah
@tanstack/query*,@tanstack/table*,@tanstack/form*,@tanstack/virtual*,@tanstack/store, dan meta package@tanstack/start @tanstack/start-*tidak termasuk dalam daftar yang telah dikonfirmasi tidak terdampak
-
Perilaku malware
- Ketika lingkungan developer atau CI menjalankan
npm install,pnpm install, atauyarn installterhadap versi terdampak, npm akan memproses entrioptionalDependenciesberbahaya dan mengambil orphan payload commit dari fork network - Setelah itu, skrip lifecycle
preparedijalankan, danrouter_init.jsyang diobfuskasi berukuran sekitar 2.3MB yang disembunyikan di dalam tarball terdampak akan berjalan - Skrip berbahaya mengumpulkan kredensial dari lokasi umum seperti AWS IMDS/Secrets Manager, metadata GCP, token service-account Kubernetes, token Vault,
~/.npmrc, token GitHub, CLIgh,.git-credentials, SSH private key, dan lainnya - Data yang dicuri dieksfiltrasi melalui jaringan unggah file Session/Oxen messenger, dengan target
filev2.getsession.org,seed{1,2,3}.getsession.org - Karena jaringan tersebut terenkripsi end-to-end dan tidak memiliki C2 yang dikendalikan penyerang, mitigasi jaringan hanya berupa pemblokiran IP/domain
- Logika propagasi mandiri mencantumkan paket lain yang dikelola korban melalui
registry.npmjs.org/-/v1/search?text=maintainer:<user>lalu menerbitkannya ulang dengan metode injeksi yang sama - Karena payload dijalankan sebagai bagian dari lifecycle npm install, host yang memasang versi terdampak pada 2026-05-11 harus dianggap berpotensi telah dikompromikan
- Ketika lingkungan developer atau CI menjalankan
Linimasa
-
Sebelum serangan: tahap peracunan cache
- Pada 2026-05-10 17:16 UTC, penyerang membuat github.com/zblgg/configuration, sebuah fork dari TanStack/router, lalu mengganti namanya untuk menghindari pencarian daftar fork
- Pada 2026-05-10 23:29 UTC, commit berbahaya
65bf499d16a5e8d25ba95d69ec9790a6dd4a1f14dibuat di fork tersebut dengan identitas yang dimanipulasiclaude <claude@users.noreply.github.com> - Commit itu menambahkan
packages/history/vite_setup.mjs, payload JS bundle sekitar 30.000 baris, dan menambahkan[skip ci]pada pesan commit untuk menekan CI pada event push - Sekitar 2026-05-11 10:49 UTC,
zblggmembuka PR #7378 kemainTanStack/router dengan judul “WIP: simplify history build” bundle-size.ymldanlabeler.ymlsama-sama berjalan otomatis untuk PR melaluipull_request_target, dan karenapull_request_targetmelewati gate persetujuan kontributor pertama, tidak diperlukan persetujuan terpisahpr.ymlyang menggunakanpull_requestdiblokir dalam status menunggu persetujuan dan tidak dijalankan- Pada 2026-05-11 11:01~11:11 UTC,
zblggmelakukan force-push beberapa kali ke head PR, memicu eksekusipull_request_targettambahan - Pada 2026-05-11 11:11 UTC, commit berbahaya
65bf499dmasuk ke head PR, lalu jobbenchmark-prdaribundle-size.ymlmelakukan checkoutrefs/pull/7378/mergedan menjalankanpnpm installsertapnpm nx run @benchmarks/bundle-size:build, yang mengeksekusivite_setup.mjs - Pada 2026-05-11 11:29 UTC, cache GitHub Actions sebesar 1,1 GB bernama
Linux-pnpm-store-6f9233a50def742c09fde54f56553d6b449a535adf87d4083690539f49ae4da11disimpan ke TanStack/router - Cache ini disimpan dalam scope
refs/heads/maindan dikonfigurasi agar cocok dengan key yang akan diambilrelease.ymlpada pushmainberikutnya - Pada 2026-05-11 11:31 UTC, penyerang mengembalikan PR ke
b1c061af, HEADmainsaat itu, sehingga PR yang terlihat tampak seperti no-op 0-file, lalu pada menit yang sama menutup PR dan menghapus branch, tetapi cache yang tercemar tetap ada
-
Pemicu: tahap publikasi
- Pada 2026-05-11 19:15 UTC, Manuel me-merge PR #7369 sehingga terjadi push ke
main, dan workflow run25613093674darirelease.ymldimulai pada 19:15:44 lalu gagal - Pada 2026-05-11 19:20:39 UTC, npm registry menerima publikasi
@tanstack/history@1.161.9dan 41 package saudara - Secara keseluruhan, sekitar 84 versi diterbitkan di 42 package, tetapi yang terlihat pada detik ini hanya sekitar separuhnya, sementara sisanya diterbitkan pada run kedua
- Autentikasi publish dilakukan melalui OIDC trusted-publisher binding untuk TanStack/router
release.yml@refs/heads/main, tetapi itu bukan terjadi dari stepPublish Packagespada workflow yang dilewati karena kegagalan pengujian - Penerbit sebenarnya adalah malware yang dijalankan pada tahap pengujian/pembersihan, yang mencetak token OIDC dengan izin
id-token: writelalu melakukan POST langsung keregistry.npmjs.org - Pada 2026-05-11 19:20:47 UTC, run
25613093674selesai dengan status failure - Pada 2026-05-11 19:16 UTC, Manuel me-merge PR #7382 sehingga terjadi push
mainkedua, dan workflow run25691781302dimulai pada 19:16:22 - Run kedua juga me-restore cache tercemar yang sama, dan pada 2026-05-11 19:26:14 UTC, set versi kedua per package seperti
@tanstack/history@1.161.12diterbitkan melalui mekanisme OIDC yang sama - Pada 2026-05-11 19:26:20 UTC, run
25691781302juga selesai dengan status failure
- Pada 2026-05-11 19:15 UTC, Manuel me-merge PR #7369 sehingga terjadi push ke
-
Deteksi dan respons
- Sekitar 2026-05-11 19:50 UTC, peneliti eksternal
carlinimembuka issue #7383 yang menyertakan fingerprintoptionalDependenciesberbahaya dan daftar package - Daftar awal mencakup 14 dari 42 package, dan peneliti juga memberi tahu npm security secara langsung
- Sekitar 2026-05-11 20:00 UTC, Manuel mengonfirmasi insiden di #7383 dan mulai merespons
- Sekitar 2026-05-11 20:10 UTC, Manuel mencabut izin push GitHub anggota tim lain sebagai antisipasi kemungkinan kompromi pada mesin pengguna
- Sekitar 2026-05-11 20:30 UTC, Tanner mengirim daftar IOC lengkap dan permintaan penghapusan tarball sisi registry ke security@npmjs.com, lalu mengajukan laporan malware resmi melalui npm
- Sekitar 2026-05-11 21:00 UTC, pemindaian penuh terhadap 295 package
@tanstack/*mengonfirmasi cakupan 42 package dan 84 versi - Tanner mulai melakukan deprecation npm untuk seluruh 84 package terdampak, dan
@tan_stackserta para maintainer menyampaikan pemberitahuan publik di Twitter/X, LinkedIn, dan Bluesky - Pada 2026-05-11 21:30 UTC, vektor peracunan cache
pull_request_targetpadabundle-size.ymldan forkzblgg/configurationteridentifikasi - Semua entri cache untuk seluruh repository GitHub TanStack/* dihapus melalui API
- PR hardening di-merge,
bundle-size.ymldikonfigurasi ulang, guardrepository_ownerditambahkan, dan ref action pihak ketiga dipatok ke SHA - GitHub Security Advisory resmi dipublikasikan dan CVE diminta
- Sekitar 2026-05-11 19:50 UTC, peneliti eksternal
Akar masalah
-
Kombinasi tiga kerentanan
- Serangan ini membutuhkan ketiga kerentanan sekaligus, dan tidak ada satu pun yang cukup bila berdiri sendiri
- Kode fork PR mengalir ke cache base repository, lalu cache base repository mengalir ke runtime release workflow, dan runtime release workflow terhubung ke izin tulis npm registry, sehingga tiap kerentanan saling menghubungkan batas kepercayaan satu sama lain
-
Pola
pull_request_target“Pwn Request”bundle-size.ymldijalankan denganpull_request_targetuntuk fork PR, lalu dalam trigger context tersebut melakukan checkout ke PR merge ref milik fork dan menjalankan build- Struktur intinya adalah sebagai berikut
on: pull_request_target: paths: ['packages/**', 'benchmarks/**'] jobs: benchmark-pr: steps: - uses: actions/checkout@v6.0.2 with: ref: refs/pull/${{ github.event.pull_request.number }}/merge # fork's merged code - uses: TanStack/config/.github/setup@main # transitively calls actions/cache@v5 - run: pnpm nx run @benchmarks/bundle-size:build # executes fork-controlled code- Penulis workflow berusaha memisahkan job
comment-prdanbenchmark-pruntuk membagi batas kepercayaan, dan komentar YAML menyebutkan niat untuk menjagabenchmark-prsebagai “untrusted with read-only permissions” - Namun, penyimpanan post-job dari
actions/cache@v5tidak bisa diblokir denganpermissions:, dan penulisan cache tidak menggunakan workflowGITHUB_TOKENmelainkan token internal runner - Karena itu, pengaturan
permissions: contents: readtidak dapat mencegah mutasi cache - Scope cache berada di tingkat repository, dan run
pull_request_targetyang memakai scope cache base repository dibagikan bersama push kemain - PR yang berjalan dalam scope cache base repository karena itu dapat mencemari entri cache yang nanti akan di-restore oleh workflow produksi di
main
-
Peracunan cache GitHub Actions
vite_setup.mjsberbahaya dirancang untuk menulis data agar cocok dengan key pnpm-store yang akan dihitung dan dicari oleh workflowrelease.ymlyang sah- Key target berbentuk
Linux-pnpm-store-${hashFiles('**/pnpm-lock.yaml')} - Saat job
benchmark-prberakhir, post-stepactions/cache@v5menyimpan pnpm store yang telah tercemar tepat dengan key tersebut - Setelah itu, ketika
release.ymlberjalan pada push kemain, stepSetup Toolsme-restore entri tercemar itu sesuai rancangan serangan - Jenis serangan ini termasuk keluarga GitHub Actions cache poisoning yang didokumentasikan oleh Adnan Khan pada 2024, dan bukan bug yang terbatas pada TanStack, melainkan isu desain GitHub Actions yang memerlukan mitigasi sadar
-
Ekstraksi token OIDC dari memori runner
release.ymlsecara sah mendeklarasikanid-token: writekarena diperlukan untuk npm OIDC trusted publishing- Ketika pnpm store yang telah tercemar di-restore ke runner, binary yang dikendalikan penyerang akan ada di disk dan dipanggil pada step build
- Binary tersebut mencari proses GitHub Actions
Runner.Workermelalui/proc/*/cmdline, lalu membaca/proc/<pid>/mapsdan/proc/<pid>/memuntuk membuang memori worker - Setelah itu, token OIDC yang di-mint secara lazy oleh runner dalam konfigurasi
id-token: writediekstrak dari memori - Dengan token yang diekstrak itu, penyerang mengautentikasi permintaan POST langsung ke
registry.npmjs.org, sepenuhnya melewati stepPublish Packagesmilik workflow - Metode ekstraksi memori ini sama dengan yang dipakai dalam kompromi
tj-actions/changed-filespada Maret 2025, dan script Python identik dengan komentar atribusi yang sama ikut digunakan - Penyerang tidak menemukan teknik baru, melainkan merangkai ulang riset publik
-
Mengapa tiap elemen tidak cukup bila berdiri sendiri
pull_request_targetsendiri masih bisa dipakai untuk pekerjaan tepercaya seperti label atau comment- Cache poisoning di dalam dependency yang sudah terkompromi saja tetap memerlukan kendaraan publish terpisah
- Ekstraksi token OIDC saja tetap memerlukan code execution yang sudah ada di runner
Deteksi dan IOC
-
Jalur deteksi
- Deteksi datang dari luar, bukan dari internal
carlinimembuka issue #7383 sekitar 20 menit setelah publish dan memberikan analisis teknis lengkap- Tanner menerima telepon dari Socket.dev yang mengonfirmasi situasi sesaat setelah memulai war room
-
Fingerprint untuk maintainer downstream dan alat keamanan
- Pada manifest paket
@tanstack/*, entrioptionalDependenciesberikut adalah IOC utama
"optionalDependencies": { "@tanstack/setup": "github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c" }- IOC file adalah
router_init.jsdi root package, berukuran sekitar 2,3MB, dan tidak tercantum dalam"files" - Key cache-nya adalah
Linux-pnpm-store-6f9233a50def742c09fde54f56553d6b449a535adf87d4083690539f49ae4da11 - URL payload tahap kedua adalah
https://litter.catbox.moe/h8nc9u.js,https://litter.catbox.moe/7rrc6l.mjs - Jaringan eksfiltrasi adalah
filev2.getsession.org,seed{1,2,3}.getsession.org - Identitas commit palsu adalah
claude <claude@users.noreply.github.com>, yang bukan Anthropic Claude asli melainkan email no-reply GitHub yang dimanipulasi - Akun penyerang yang sebenarnya adalah
zblggid 127806521,voicproducoesid 269549300 - Fork penyerang adalah github.com/zblgg/configuration, yaitu fork TanStack/router yang di-rename untuk menghindari pencarian
- Commit payload orphan dalam network fork adalah
79ac49eedf774dd4b0cfa308722bc463cfe5885c - Workflow run yang menjalankan publish berbahaya adalah github.com/TanStack/router/actions/runs/25613093674 attempt 4 dan github.com/TanStack/router/actions/runs/25691781302
- Pada manifest paket
Pelajaran
-
Hal yang berjalan baik
- Para peneliti eksternal mendeteksi insiden dalam sekitar 20 menit setelah kejadian dan melaporkannya beserta seluruh detail teknis
- Tim maintainer segera berkoordinasi lintas beberapa zona waktu
- Komunitas deteksi memperoleh pola IOC publik yang jelas dalam hitungan jam
-
Hal yang perlu diperbaiki
- Tidak ada alerting internal, dan fakta compromise diketahui dari pihak ketiga
- Diperlukan monitoring publish internal, serta rencananya akan bekerja sama lebih erat dengan perusahaan riset keamanan ekosistem yang bisa mendeteksi masalah seperti ini dengan cepat dan memperpendek feedback loop
- Workflow
pull_request_targetsudah lama dikenal sebagai pola berbahaya, tetapi belum diaudit - Floating ref untuk action pihak ketiga seperti
@v6.0.2,@mainmenciptakan supply-chain risk yang terus-menerus, terlepas dari insiden ini - Karena kebijakan npm “tidak bisa unpublish jika ada dependent”, unpublish tidak dimungkinkan untuk hampir semua paket yang terdampak
- Harus bergantung pada npm security untuk penghapusan tarball di sisi registry, sehingga ada tambahan beberapa jam saat tarball berbahaya tetap bisa diinstal
- Daftar 7 maintainer pada scope npm berarti ada 7 target pencurian kredensial terpisah untuk blast radius yang sama
- OIDC trusted-publisher binding tidak memiliki review per publish, dan setelah dikonfigurasi, jalur kode mana pun di dalam workflow dapat mencetak token yang bisa digunakan untuk publish
- Alternatif yang dibutuhkan adalah beralih ke classic token jangka pendek dengan review manual, atau menambahkan provenance-source-verification yang mendeteksi publish dari step workflow yang tidak terduga
-
Hal yang menguntungkan
- Penyerang memilih payload yang merusak test sehingga step publish normal dilewati, dan tarball yang tampak lebih bersih tidak jadi dibuat
- Karena itu, serangan terlihat cukup mencolok sehingga cepat terdeteksi
- Jika penyerang yang lebih hati-hati tidak merusak test, mereka bisa publish diam-diam selama beberapa jam lebih lama
- Penyerang menggunakan ulang script memory dump publik yang berisi attribution comment, dan tidak menulis kode baru, sehingga pencocokan IOC menjadi lebih cepat
Pertanyaan yang tersisa
- Perlu dipastikan apakah step
Setup Toolsdibundle-size.ymlbenar-benar memanggilactions/cache@v5 - Perlu diverifikasi dengan membaca post-job log dari salah satu run
pull_request_targetuntuk PR #7378, dengan contoh run id25666610798 - Perlu dipastikan apa yang ada di head commit PR awal sebelum hilang karena force-push, dan kemungkinan masih tersisa di GitHub reflog
- Perlu dipastikan apakah cara malicious commit masuk ke git object store fork adalah lewat git push langsung, atau melalui pembuatan di GitHub web UI yang akan meninggalkan audit-log entry
- Perlu dicocokkan riwayat aktivitas
voicproducoesuntuk memastikan apakah itu akun nyata atau sock puppet - Perlu dipastikan apakah cache npm yang tampak sebagai 6 entri duplikat
linux-npm-store-*juga terkontaminasi, dan apakah benar-benar digunakan - Perlu dipastikan apakah serangan membutuhkan Nx Cloud, atau akan tetap berfungsi hanya dengan GitHub Actions cache
- Perlu dipastikan apakah fork lain di dalam jaringan fork TanStack/router yang memuat orphan payload commit bisa diidentifikasi
- Jika fork lain meng-host commit tersebut, aksesibilitas
github:tanstack/router#79ac49ee...akan tetap ada sehingga cleanup menjadi lebih sulit - Repo TanStack lain seperti router, query, table, form, virtual, dan lainnya perlu diaudit apakah menggunakan pola gaya
bundle-size.ymlyang sama - Jumlah pengguna yang benar-benar mengunduh versi terdampak selama window publish perlu diminta dari npm support
- Perlu dipastikan apakah mesin milik 7 maintainer juga dikompromikan secara terpisah
- Malicious publish tidak menggunakan token npm milik maintainer, tetapi mesin maintainer bisa menjadi target sekunder dari logika self-propagation
Referensi
- TanStack/router#7383: isu pelacakan
- GHSA-g7cv-rxg3-hmpx: GitHub Security Advisory
- The Monsters in Your Build Cache: Github Actions Cache Poisoning: riset cache poisoning GitHub Actions tahun 2024 oleh Adnan Khan
- Keeping your GitHub Actions and workflows secure: Preventing pwn requests: materi GitHub Security Lab tentang pencegahan pwn request
- Harden-Runner detection: tj-actions/changed-files action is compromised: materi deteksi terkait dari StepSecurity pada Maret 2025
- Unpublish: kebijakan unpublish npm
- Provenance: dokumentasi provenance npm
- GHSA-g7cv-rxg3-hmpx: GitHub Security Advisory yang membahas daftar lengkap versi terdampak
1 komentar
Komentar Hacker News
Hati-hati saat mencabut token. Payload tampaknya memasang dead-man's switch ke
~/.local/bin/gh-token-monitor.sh, lalu mendaftarkannya sebagai layanan pengguna systemd di Linux, dan sebagaiLaunchAgent com.user.gh-token-monitordi macOSToken yang dicuri dipakai untuk melakukan polling ke
api.github.com/usersetiap 60 detik, dan jika token dicabut lalu muncul HTTP 40x, ia menjalankanrm -rf ~/https://github.com/TanStack/router/issues/7383#issuecomment-...
Dunia software lima tahun ke depan sepertinya akan benar-benar brutal, dan sistem air-gap tampaknya akan jadi jauh lebih penting
Paket npm
@mistralai/mistralaijuga terdampak sebagai bagian dari worm inihttps://github.com/mistralai/client-ts/issues/217
Sekarang sudah diturunkan dari registry npm
Disayangkan, tetapi ini tampaknya bukti bahwa Trusted Publishing saja tidak cukup untuk melakukan deployment aman dari CI. Jika ada penyerang di dalam pipeline CI atau hak admin repositori dicuri, deployment bisa dilakukan dengan mudah
Ini bukan informasi baru, dan Trusted Publishing memang tidak dirancang untuk menjamin hal itu, tetapi saat berpindah dari deployment lokal + autentikasi dua faktor ke Trusted Publishing, jalur serangan melalui kompromi CI seperti ini jadi terbuka. Faktor kedua yang dulu mencegah
npm publishsaat bekerja secara lokal menjadi hilangDari perkembangan yang terlihat sekarang, penyerang tampaknya mengambil alih pipeline CI/CD, lalu karena
npm publishtidak punya faktor kedua, mereka bisa mencuri token OIDC dan menyelesaikan deployment. Menariknya, walau job deployment itu sendiri gagal, payload di dalam commit berbahaya tampaknya bisa melakukan publish sendiri memakai token OIDC dari workflowYang diinginkan adalah tetap mempertahankan model Trusted Publisher tanpa token jangka panjang, tetapi dengan deployment CI yang masih memiliki faktor kedua di luar GitHub. Artinya dibutuhkan deployment bertahap di mana seseorang harus mempromosikan artefak ke status benar-benar publik dengan autentikasi dua faktor di sisi npm
Jika deployment hanya bisa dilakukan di dalam model kepercayaan GitHub, siapa pun yang berhasil mencuri token admin repositori atau menyisipkan kode berbahaya ke pipeline akan mudah menyelesaikan deployment. Jika ada faktor kedua yang nyata di luar konteks GitHub, mereka mungkin tetap bisa merusak repositori atau menyisipkan malware, tetapi tidak bisa melakukan deployment tanpa faktor kedua untuk registry
Postmortem: https://tanstack.com/blog/npm-supply-chain-compromise-postmo...
Saya penasaran apakah ada bukti bahwa subpaket yang mungkin mengambil atau menyertakan paket TanStack bisa dianggap aman
Skrip postinstall itu fatal. Semua orang seharusnya memakai pnpm
Sulit dipercaya bahwa commit “yatim” yang di-push ke FORK bisa memicu hal seperti ini di klien npm. Menurut saya GitHub juga sangat bertanggung jawab. Bahwa commit dari fork berbahaya bisa diakses dengan URI yang tidak bisa dibedakan dari repositori normal melalui shared object store GitHub adalah desain yang benar-benar gila
Saat pertama membaca, saya kira mereka salah pakai istilah “fork” dan sebenarnya maksudnya branch di repositori resmi. Saya pikir itu tidak mungkin benar, tapi astaga
https://tanstack.com/blog/npm-supply-chain-compromise-postmo...
TanStack baru saja mempublikasikan postmortem untuk insiden ini
Ini pengingat untuk mengamankan lingkungan npm
https://gajus.com/blog/3-pnpm-settings-to-protect-yourself-f...
Hanya dengan beberapa pengaturan, banyak masalah besar bisa dikurangi
allow-git=none: https://github.blog/changelog/2026-02-18-npm-bulk-trusted-pu...min-release-age. 2) Entah kenapa dibuat dalam satuan hari, bukan menit: https://docs.npmjs.com/cli/v11/using-npm/config#min-release-...Menurut saya ruang dependency manager sudah terfragmentasi sepenuhnya tanpa perlu
Jika dependensi versi paket Anda berupa
^1.0.0atau bahkan"*", berhentilah membaca dan segera pin ke versi yang amanSaya membuat ini buru-buru dengan Claude untuk membantu mengurangi penyebaran. Tentu tetap harus diverifikasi sendiri, tetapi ini memindai apakah paket yang terkompromi yang disebutkan ada di mesin Anda: https://github.com/PaulSinghDev/tanstack-shai-hulud-fix
Sepertinya sekarang kita sudah sampai di tahap di mana semua orang perlu menjalankan tiap proyek di VM terpisah
Melihat kerentanan eskalasi hak lokal belakangan ini, Docker saja jelas tidak cukup. Dari awal pun container memang tidak dirancang sebagai batas keamanan utama
Jika ada layanan cloud lain yang perlu diakses dari dalam container, pencuri kredensial ini juga akan mengambil itu. Meski begitu, setidaknya radius dampaknya jadi lebih kecil, jadi tetap merupakan perbaikan
Wah, ini paket besar lain lagi. Saya mengunggah ulang pengumuman layanan masyarakat yang saya buat setelah Axios dan LiteLLM terkompromi. Bagian tentang skrip lifecycle juga berlaku di sini
npm/bun/pnpm/uv sekarang semuanya mendukung pengaturan usia rilis minimum paket. Saya juga menaruh
ignore-scripts=truedi~/.npmrc, dan dari analisis yang ada, itu saja sudah bisa memitigasi kerentanan ini. bun dan pnpm secara default tidak menjalankan skrip lifecycleCara menetapkan usia rilis minimum global ke 7 hari adalah sebagai berikut
~/.config/uv/uv.tomlexclude-newer = "7 days"~/.npmrcmin-release-age=7 # daysignore-scripts=true~/Library/Preferences/pnpm/rcminimum-release-age=10080 # minutes~/.bunfig.toml[install]minimumReleaseAge = 604800 # secondsJika perlu menimpa pengaturan global, cukup pakai flag CLI
npm install --min-release-age 0pnpm add --minimum-release-age 0uv add --exclude-newer "0 days"bun add --minimum-release-age 0Satu hal lagi, tampaknya ada kekhawatiran bahwa jika masa tunggu dependensi diterapkan secara luas, penemuan kerentanan jadi lebih lambat, atau bahwa masa tunggu dependensi semacam ini adalah tindakan numpang aman. Saya tidak setuju. Yang dipertukarkan oleh masa tunggu dependensi adalah preferensi waktu, dan akan selalu ada orang yang preferensi waktunya lebih tinggi daripada saya
0: https://news.ycombinator.com/item?id=47582220
1: https://news.ycombinator.com/item?id=47513932
Untuk menghindari perubahan tak terduga, gunakan
pnpm install --frozen-lockfile. Perlu diingat, jikamin-release-agetidak diatur, paket yang terdampak bisa tetap tertarik melalui dependensi transitif. Kalau bisa, sebaiknya pin juga versi package manager