Perniagaan Berisiko: Pakej npm Pemadaman Kendiri Dijelaskan

Perniagaan Berisiko: Pakej Anti-Pengawasan Yang Menghapuskan Diri Mereka Sendiri

TL; DR

Pakej-pakej itu akan dipadamkan sendiri. Selama lima belas hari pada bulan Ogos, seorang pengendali npm menerbitkan sembilan pakej di bawah sembilan nama daripada tujuh akaun dan menarik balik lapan daripadanya secara peribadi. Tempoh setiap satu dibiarkan berjalan jatuh dari tiga belas jam kepada tujuh belas minit. Teknik ini bukan milik mereka sahaja: tujuh pakej lagi daripada pengendali yang tidak berkaitan, yang membawa muatan yang sama sekali berbeza, telah ditarik balik oleh penerbit mereka sendiri pada median 37.8 minit. Artifak itu hilang sebelum kebanyakan proses pertahanan berjalan, dan pemasangan telah pun berlaku.

Semua yang didedahkan oleh pendaftaran berputar; muatan tidak. Kesemua sembilan menghantar bait yang sama bin/ direktori, SHA-256 yang sama meringkaskan tiga nama pakej dan dua akaun, selang lima belas hari. Identiti kandungan adalah satu-satunya isyarat penjejakan yang tidak dipecahkan oleh operator ini, dan pakej tunggal yang mereka tidak pernah tarik balik adalah sebab mana-mana daripadanya boleh diperiksa sama sekali.

Orang yang memasangnya bukanlah mangsa, dan tetap terdedah dengan teruk. Alat ini tidak ditujukan kepada pembangun: ia mengatasi pengawasan peperiksaan jarak jauh melalui tangkapan skrin tersembunyi, pengekstrakan teks pada skrin dan jawapan yang dikembalikan kepada tindanan, jadi sesiapa yang berlari npm install merupakan penerima manfaat yang dimaksudkan dan bukannya sasaran. Mereka juga menjalankan binari tanpa tandatangan yang menyahsulit stor kuki pelayar mereka, daripada akaun yang memadamkan dirinya sendiri dalam masa sejam. Mereka tidak boleh menerima pembetulan, tidak boleh mengaudit kemudian apa yang mereka jalankan dan tidak boleh melaporkan kerosakan tanpa mendedahkan sebab mereka memasangnya.

Ekosistem: npm, corak yang sama diperhatikan pada PyPI. Tempoh: Jun–Ogos 2026.

Pengukuran

Masa menunggu ialah selang masa antara pakej muncul dan hilang, yang dikira daripada metadata pendaftaran itu sendiri. Ini adalah ukuran, bukan anggaran.

PakejDiterbitkan (UTC)Berdiri kiri
moidev2026-08-16 16:315j 58m
moidevx2026-08-17 03:2413j 23m
moidevz2026-08-26 03:3812j 56m
moideva2026-08-26 18:581j 33m
amicat2026-08-28 20:4817m
bmcat2026-08-28 21:1747m
eyevox2026-08-28 21:4421m
moidevh2026-08-31 03:2247m

Dibaca mengikut susunan penerbitan, tempoh masa mengecut lebih daripada empat puluh kali ganda — daripada 13 jam 23 minit pada waktu paling lebar kepada 17 minit pada waktu paling sempit. Empat pakej pertama mengambil purata lapan setengah jam; empat pakej terakhir mengambil purata tiga puluh tiga minit. Pada 28 Ogos, tiga pakej telah diterbitkan dan ditarik balik dalam tempoh 77 minit sahaja.

Penguncupan itu bukanlah hanyutan beransur-ansur. Ia tertumpu antara 26 dan 28 Ogos, dan apa yang berubah ialah anggaran pengendali tentang berapa lama sesuatu bungkusan boleh bertahan dengan selamat.

Setiap pengeluaran di sini dimulakan oleh penerbit. Dokumen pendaftaran untuk setiap satu menunjukkan senarai penyelenggara kosong di sebelah a masa.tidak diterbitkan rekod — tandatangan pembatalan penerbitan dan bukannya penghapusan. Pakej kesembilan, eyiouss, tidak pernah ditarik balik sama sekali; itulah sebabnya semua ini boleh diperiksa.

Rejim pengeluaran kedua wujud dan tidak boleh dikelirukan dengan yang ini. Di mana hanya versi muatan ditarik dan bungkusan itu bertahan, mediannya adalah kira-kira 73 jam merentasi 31 bungkusan. Pengganti tersebut tiba dalam kelompok yang telah ditetapkan dan meninggalkan sekam kosong — a package.json mengisytiharkan satu utama yang tidak menghantar fail — yang satu-satunya fungsinya adalah untuk menyimpan nama tersebut. Rejim itu adalah pengemasan mengikut jadual. Yang ini ialah tetingkap pendedahan yang ditala.

Apa yang Terselamat daripada Pemadaman

Sembilan daripada pakej ini adalah satu operator: moidev, moidevx, moidevz, moideva, moidevh, kawan, bmcat, eyevox dan eyioussNama-nama itu tidak berkongsi konvensyen — sesiapa sahaja yang menjejaki moidev stem akan terlepas lebih separuh daripadanya — dan ia diterbitkan daripada tujuh akaun berasingan, hampir semuanya didaftarkan pada domain e-mel pakai buang.

Apa yang mereka kongsikan adalah entri nyata tanpa sebab untuk wujud:

"tong sampah": { "": "bin/kalamasha-tool.js" } }

Kami menyimpan lima salinan sebelum penyingkiran. Merentasi kelima-lima salinan tersebut, keseluruhannya tong sampah/ direktori adalah serupa dengan bait:

FileSHA-256
bin/kalamasha-tool.js0c293be90c10c8a7618d25f4c4811fa63612b7bc5199b86e10bb31eb36c716dd
bin/uia_extract.exee2fda5aa8397799669f29258f69e803cf05d322c1d93269eef6754ca024c3865
bin/chrome_cookies.ps121b61ec810331850d72423c40c5448e6cd310c4cfad6aed54f92cd7e7cac5f3a
bin/stealth_capture.ps1c9baf5897c03b941c54f736df5af9243ad28794a9e69746d41d4f4a34065589c
bin/uia_extract.pyc20b38c63efd9221930095c54b42cdd5adffa1972c44c4578226cbe1e4dbac3e
bin/uia_get_text.ps14a3f3ada0bdf13aa8e89edb8af817c7816296147dae5be25f169ff960d28a87c

Dua isyarat selanjutnya bersetuju. Tiga daripada pakej tersebut telah diterbitkan pada 03:24, 03:38 dan 03:22 UTC pada 17 Ogos, 26 Ogos dan 31 Ogos — jalur enam belas minit merentasi lima belas hari dan tiga akaun berasingan. Dan dua daripada akaun tersebut telah didaftarkan pada domain e-mel pakai buang yang sama, menghubungkannya bersama secara bebas daripada kod.

Akaun

Ini adalah akaun penerbit npm yang menghantar muatan, dengan setiap pakej yang dimuat naik dan berapa lama ia dibiarkan:

Akaun penerbitPakejDomain e-melBerdiri kiri
letol39119moidev:1.0.0hutdot.com (pakai buang)5j 58m
so1d1a7i27moidevx:1.0.0ogzmail.com (pakai buang)13j 23m
lololololol435678eyiouss:3.0.21, 3.0.22, 4.0.1ogzmail.com (pakai buang)masih diterbitkan
tagadob568moidevz:1.0.0ebflyai.com (pakai buang)12j 56m
tayihim489moideva:1.0.0prodbits.com (pakai buang)1j 33m
sahihai123amicat:1.0.0, bmcat:2.0.9, eyevox:1.0.0mel web pengguna17m / 47m / 21m
heytoshanmoidevh:1.0.0mel web pengguna47m

so1d1a7i27 dan lololololol435678 kongsi ogzmail.com domain pendaftaran — pautan yang menghubungkan akaun yang masih mengehoskan salinan langsung ke akaun yang diterbitkan di bawah moidev batang dua minggu lebih awal. sahihai123 menerbitkan dan menarik balik tiga nama pakej berasingan dalam tempoh 77 minit tunggal pada 28 Ogos. heytoshan berdaftar, diterbitkan moidevh, dan menarik baliknya 47 minit kemudian; ia kekal sebagai satu-satunya penerbitan akaun itu.

Setiap satu daripada akaun ini tidak disahkan melalui e-mel, tidak membawa pautan kawalan sumber yang disahkan dan tidak menerbitkan sebarang projek yang tidak berkaitan. Enam daripada tujuh akaun tersebut tidak lagi mengehos apa-apa.

Satu pakej tidak pernah ditarik balik. eyiouss:4.0.1 telah diterbitkan sejak 16 Ogos dan masih boleh diselesaikan pada masa penulisan. Lapan artifak tidak boleh dipulihkan; kempen itu dibina semula sepenuhnya daripada yang tinggal. Operator yang memadam secara refleks akhirnya akan tetap membiarkan satu artifak kekal.

Apa yang Dilakukan oleh Alat Ini

eyiouss:4.0.1 menggambarkan dirinya di npm sebagai "Utiliti DOM berprestasi tinggi dan jambatan diagnostik untuk aplikasi web moden". Ia merupakan alat tangkapan skrin dan pengambilan jawapan yang dibina untuk dijalankan di bawah pengawasan peperiksaan jarak jauh, dan sumber itu mengatakannya dengan kata-katanya sendiri.

Pelancar menyalin runtime Electron di bawah nama fail palsu sebelum menjalankannya, dan menamakan apa yang dielakkannya:

// 🛡️ NAMA BINARI STEALTH: TIDAK BOLEH bertembung dengan Testpad sebenar! const STEALTH_NAME = 'SearchApp.exe';

Pengepala fail yang sama memanggilnya sebagai Pengawas Hantu Anti-Proktor dan melaksanakan gelung respawn yang berundur lebih jauh apabila ia dibunuh. Di tempat lain, proses tersebut meningkatkan keutamaannya sendiri untuk melawan pengawasan pendikitan CPU, menolak permohonan peperiksaan keluar dari latar depan apabila ia mengambil fokus dan menamatkan proses anak Pelayar Peperiksaan Selamat dengan taskkill /F /T.

Tangkapan dijalankan melalui skrip PowerShell yang dibundel yang dipanggil dengan dasar pelaksanaan dilumpuhkan dan tetingkap disekat, dengan teks pada skrin dituai secara selari melalui Automasi UI Windows. Imej dan teks yang dibariskan dihantar ke sesi model bahasa dalam pelayar terbenam dan jawapan diberikan dalam tindanan sentiasa di atas. Sambungan itu ditangguhkan dengan sengaja, dan kod tersebut memberikan sebabnya: untuk mengelakkan pendedahan NETSTAT yang kekal.

Pakej itu juga dihantar chrome_cookies.ps1, menuju PENGEKSTRAK KUKI CHROME, yang menyahsulit kuki Chrome dan Edge melalui DPAPI dan membaca pangkalan data kuki daripada sehingga empat profil pelayar. Dinyatakan sebelum inicisely: kami tidak menemui skrip yang dipanggil mengikut nama daripada mana-mana fail JavaScript yang dihantar. Apa yang ada dan boleh dicapai ialah separuh pengguna, yang menyuntik kuki sesi yang disimpan ke dalam pelayar terbenam.

Kedudukan Orang yang Memasangnya

Tiada siapa yang memasangnya secara tidak sengaja. Ia tidak mempunyai fungsi di luar peperiksaan yang dipantau, dan outputnya ialah tindanan jawapan pada skrin pengguna sendiri. Huraian pakej yang mengelirukan itu langsung tidak ditujukan kepada pemasang — ia hanya ditujukan kepada pendaftaran dan kepada sesiapa sahaja yang mengaudit mesin selepas itu. Pemasang tahu apa yang mereka dapat; penerangan itu wujud jadi rekod pemasangan tidak mencerminkannya.

Pihak-pihak yang dirugikan adalah pihak ketiga yang tidak pernah menyentuh npm: institusi yang menjalankan peperiksaan, calon-calon lain dan semua orang di hilir yang bergantung pada kelayakan tersebut bermakna sesuatu.

Oleh itu, pemasang tidak selamat, dan bahagian inilah yang perlu dijelaskan, kerana model pakej hilang itu sendiri yang mewujudkan pendedahan.

Mereka menjalankan binari yang tidak ditandatangani daripada tiada siapa. uia_extract.exe kapal yang dikompilasi, tanpa sumber dan tiada asal binaan, daripada akaun yang tidak lagi wujud. Fail yang sama, melalui hash, telah diterbitkan semula oleh letol39119, so1d1a7i27, lololololol435678, tagadob568, tayihim489, sahihai123 dan heytoshan sepanjang lima belas hari. Tiada penyelenggara untuk ditanya, tiada repositori untuk dibaca dan tiada sejarah untuk disemak — setiap identiti yang menghantarnya akan dipadamkan dengan sendirinya.

Mereka telah memberikannya keupayaan yang diperlukan oleh perisian hasad. Satu proses tersembunyi, yang berjalan di bawah nama palsu, yang menyahsulit stor kuki pelayar, membaca skrin secara berterusan, menamatkan perisian keselamatan dan muncul semula apabila dimatikan. Hari ini, penyahsulitan kuki diskopkan kepada domain satu vendor dan melayani sesi pengguna sendiri. Skop itu ialah perubahan satu baris, dan tiada apa-apa tentang model penghantaran yang akan muncul jika ia berubah — nama baharu, akaun baharu, muat naik baharu.

Mereka tidak boleh menerima pembetulan. Pakej tersebut tidak diterbitkan dalam masa sejam. Tiada laluan kemas kini, tiada nasihat dan tiada cara untuk mengetahui kemudian bahawa versi yang mereka pasang berbeza daripada yang dipasang oleh rakan mereka. Apa sahaja yang ada pada mesin akan kekal di sana.

Mereka tidak boleh mengaudit apa yang mereka jalankan. Fail kunci mereka kini merujuk kepada pakej yang tidak lagi dapat diselesaikan. Jika mereka kemudiannya ingin menentukan apa yang ada pada mesin mereka — selepas insiden atau pertikaian — pihak pendaftaran tidak mempunyai rekod untuk diberikan kepada mereka.

Dan mereka tidak boleh melaporkan sebarang kemudaratan. Pengguna yang dikompromi oleh alat ini tidak boleh memfailkan laporan penyalahgunaan tanpa mendedahkan sebab mereka memasangnya. Itu bukan perkara sampingan. Laporan penyalahgunaan pendaftaran adalah saluran utama yang digunakan untuk menangkap pakej jangka pendek, dan pangkalan pengguna pengendali ini tidak berupaya secara struktur untuk menggunakannya. Satu-satunya musuh yang tinggal ialah pengimbasan automatik — yang mana tetingkap tujuh belas minit dikalibrasi.

Struktur mangsa dan masa menunggu adalah fakta yang sama yang dilihat dua kali. Ia juga menjelaskan anomali dalam garis masa: jika penarikan diri didorong oleh ketakutan terhadap aduan, pakej popular yang berpanjangan akan didahulukan. Ia tidak berlaku, kerana aduan tidak pernah datang.

Corak yang Sama, Operator yang Berbeza

Operator pengawas tidak bersendirian dalam hal ini, dan selari yang paling jelas berjalan pada muatan yang tidak berkaitan.

Antara 24 dan 27 Ogos, empat pakej npm muncul di bawah nama yang dipinjam daripada perkakasan pengesahan dua faktor — auth-otp, kunci rahsia-2fa, secretkey2fa dan 2fa-kekunci rahsia — membawa enam belas versi di antara mereka. Setiap satu diterbitkan daripada akaunnya yang baru didaftarkan (beayilol, jeanpaul686g, zzzalipay, dluuuuu), semuanya tidak disahkan e-mel, tiada satu pun dengan pautan kawalan sumber yang disahkan, tiada satu pun yang menerbitkan apa-apa lagi. Setiap satu telah ditarik balik oleh penerbitnya sendiri.

Muatan ini tidak ada kena mengena dengan perisian peperiksaan. Ia membaca stor kelayakan pelayar dan token Discord, dan menjalankan tangga pengesahan Xbox Live terhadap pelancar Minecraft untuk menangkap token segar semula. Di sini pemasang is mangsa dalam erti kata biasa — yang menjadikan perbandingan ini berguna, kerana tingkah laku penyampaian adalah sama walau apa pun.

Empat kitaran dijalankan mengikut susunan penerbitan pada 274.9, 37.8, 37.6 dan 35.7 minit: satu percubaan pertama yang panjang, kemudian penumpuan pada angka yang sah. Tiga pakej selanjutnya dimiliki oleh operator lain sekali lagi dan menunjukkan tingkah laku pengeluaran yang sama.

PakejoperatorBerdiri kiri
octopus-actionsuar peninjau2.5 min
mt-ts-serverless-startersuar peninjau9.6 min
2fa-secretkeyNama perlindungan 2FA35.7 min
secretkey2faNama perlindungan 2FA37.6 min
secretkey-2faNama perlindungan 2FA37.8 min
auth-otpNama perlindungan 2FA274.9 min
hex-encode-utilslain724.2 min

Tujuh pakej, median 37.8 minit, tiada satu pun yang berkaitan dengan perisian peperiksaan.

Tiga muatan yang tidak berkaitan, tiga set akaun yang tidak berkaitan, satu teknik yang dikongsi.

Mengapa Tingkap Tertutup

Sesuatu telah berubah dalam persekitaran pendaftaran semasa tahun 2026, dan kemungkinan besar pengimbasan menjadi lebih pantas.

Sehingga baru-baru ini, pakej berniat jahat ditemui terutamanya selepas berlakunya sesuatu: oleh pengguna yang menyedari sesuatu, melalui laporan hiliran atau melalui sapuan berkala. Kependaman pengesanan diukur dalam beberapa hari. Itu bukan lagi satu-satunya rejim. Analisis hampir masa nyata bagi pakej yang baru diterbitkan — Amaran Awal Perisian Hasad Xygeni Sendiri antara satu set sistem sedemikian yang semakin berkembang di seluruh industri — merapatkan jurang antara penerbitan dan pemeriksaan kepada sesuatu yang jauh lebih pendek.

Operator yang menghadapinya mempunyai dua pilihan. Jadikan muatan lebih sukar untuk dikenali, atau pendekkan masa ia tersedia untuk dilihat. Pilihan kedua adalah lebih murah, tidak memerlukan kejuruteraan, dan pendaftaran menyediakan mekanisme secara percuma: dalam tempoh 72 jam penyingkiran penerbitan npm, penerbit boleh mengalih keluar pakej secara unilateral, dan nama itu boleh digunakan semula selepas itu. Pengeluaran tidak mengenakan sebarang kos kepada operator.

Pemasaannya sesuai. Kedua-dua operator di atas menumpu pada rajah dan menahannya daripada hanyut, iaitu rupa parameter yang ditala dan bukannya sekadar kemudahan. Dan parameter yang ditumpu padanya — berpuluh-puluh minit — berada sebelumcisdi mana ia perlu diletakkan untuk mengatasi pas pemeriksaan automatik sambil masih membiarkan pakej boleh dipasang cukup lama untuk sampai ke khalayaknya.

Ini kekal sebagai hipotesis. Data pemasaan tidak dapat memisahkan tindak balas terhadap pengimbasan daripada tindak balas terhadap penguatkuasaan pendaftaran, atau daripada kematangan operasi biasa apabila pengendali ini belajar antara satu sama lain. Apa yang boleh dikatakan tanpa inferens adalah lebih sempit dan masih berguna: Tetingkap pendedahan kini cukup pendek sehingga sebarang kawalan yang bergantung pada pemeriksaan pakej selepas penerbitan berlumba mengikut jam yang ditetapkan oleh operator. Kawalan yang tidak bergantung pada pemeriksaan — kuarantin mengikut umur, skrip pemasangan yang dinyahdayakan — tidak terjejas oleh perlumbaan tersebut, yang merupakan sebab praktikal untuk mengutamakannya.

Apa Yang Perlu Dilakukan Mengenainya

Kuarantin mengikut umur. Tiada apa-apa dalam jadual masa tinggal yang bertahan selama tiga belas jam. Dasar bahawa tiada versi kebergantungan boleh dipasang sehingga ia wujud selama 72 jam akan mengecualikan setiap satu daripadanya tanpa mengesan apa-apa.

Lumpuhkan skrip pemasangan secara lalai. - Abaikan skrip mengalih keluar mekanisme penghantaran yang menjadi tumpuan pakej pencurian kelayakan dalam korpus ini. Ia tidak membantu terhadap alat yang dijalankan oleh pengguna dengan sengaja, yang merupakan pra-cissememangnya perbezaan yang berbaloi untuk difahami.

Anggap kehilangan sebagai peristiwa keselamatan. Maklumkan apabila kebergantungan yang dipasang berhenti diselesaikan. Fail kunci anda, bukan pendaftaran, adalah tempat bukti masih berada.

Jejaki kandungan, bukan nama. Enam ringkasan di atas sepadan tanpa mengira nama pakej, akaun penerbit atau rentetan versi — setiap medan yang ditunjukkan oleh operator ini akan diubah. Peraturan bahagian pendaftaran bahawa akaun yang baru didaftarkan yang mengeluarkan satu-satunya pakejnya dalam masa sejam adalah corak yang boleh dilaporkan akan diaktifkan pada setiap pakej di sini, pada metadata sahaja.

Dan jika anda sedang mempertimbangkan untuk memasang sesuatu dalam kategori ini: Sifat-sifat yang menyukarkan pendaftaran untuk menangkap adalah sifat yang sama yang tidak memberi anda sebarang jalan penyelesaian. Tiada penerbit yang perlu dipertanggungjawabkan, tiada laluan kemas kini dan tiada rekod tentang apa yang anda jalankan.

petunjuk

Jenisnilai
Filebin/kalamasha-tool.js — bukanstandard titik masuk tong sampah
SHA-2560c293be90c10c8a7618d25f4c4811fa63612b7bc5199b86e10bb31eb36c716dd
SHA-256e2fda5aa8397799669f29258f69e803cf05d322c1d93269eef6754ca024c3865
ProsesSearchApp.exe ditulis di sebelah runtime Electron yang sah
Kelakuanpowershell -ExecutionPolicy Bypass -File bersama windowsHide: true
Kelakuantaskkill /F /T menyasarkan proses Pelayar Peperiksaan Selamat
MetadataKosongkan senarai penyelenggara di sebelah a time.unpublished rekod
Akaunletol39119, so1d1a7i27, lololololol435678, tagadob568, tayihim489, sahihai123, heytoshan
Pendaftaranogzmail.com, hutdot.com, ebflyai.com, prodbits.com — domain mel pakai buang

Rujukan

alat-analisis-komposisi-perisian-alat-sca
Utamakan, pulihkan dan lindungi risiko perisian anda
Dapatkan Akaun Percuma anda.
Tiada kad kredit yang diperlukan.

Lindungi pembangunan dan penghantaran perisian anda

dengan Suit Produk Xygeni