forge-jsxy npm Infostealer: Panduan IOC & Pengesanan

forge-jsxy: Pencuri Maklumat npm Yang Terus Berubah Namanya

TL; DR

Secara kasarnya dua bulan, satu pencuri maklumat npm telah muncul semula di bawah siri nama pakej yang berputar sambil menghantar muatan yang hampir tidak berubah. Ia bermula secara terbuka sebagai forge-jsxy, melahirkan forge-jsx3 / forge-jsx4 adik-beradik, kemudian menggugurkan penjenamaan "forge" sepenuhnya untuk menyamar sebagai infrastruktur pembangun — pertama zredis-typed, Dan yang paling baru-baru ini pinokio-redis.

Setiap varian membawa rantai alat dalaman yang sama: fail bernama forge-jsx-explorer-*, relayPackageServe modul yang berfungsi sebagai forge-jsxy-package.tgz, dan runtime yang tahan lama tersembunyi di bawah direktori bertitik supaya ia terselamat daripada pemadaman pakej npm.

Muatan itu berbunyi bahan dompet mata wang kripto dan kelayakan pembangun daripada hos dan menghantarnya ke web Discordhooks, muat naik HuggingFace Hub dan titik akhir C2 yang dikodkan secara keras. Ia memasang automula peringkat OS supaya ia berjalan semula selepas but semula dan ia menangkap papan klip, papan kekunci dan aktiviti skrin. Varian terkini, pinokio-redis, menggambarkan dirinya sebagai integrasi "Autodesk Forge" — penerangan yang tidak berkaitan dengan apa yang dilakukan oleh kod tersebut.

Ekosistemnpm
Kelas muatanpencuri maklumat berbilang peringkat + ejen kawalan jauh (RAT)
Sasaran utamadompet kripto, sambungan dompet pelayar, kelayakan pembangun/awan
Kegigihanmasa jalan tahan lama tersembunyi + mula automatik OS (bertahan daripada penyingkiran pakej)
exfiltrationWeb Discordhooks + geganti, Hab HuggingFace, C2 berkod keras pada port 9877
Rentang yang diperhatikanMei 2026 – Julai 2026 (berterusan)
Nama terkinipinokio-redis:1.0.127

Anatomi Serangan

Setiap varian dalam keluarga ini dipasang melalui bentuk yang sama: satu pakej yang kelihatan lengai pada halaman penyenaraiannya tetapi mengisytiharkan cangkuk pasca pemasangan, jadi muatan berjalan sebaik sahaja pakej dipasang sebagai kebergantungan. cangkuk memacu rantai lima peringkat.

  • Peringkat 1 — menjadi kenyataan. Skrip pemasangan menyahkodkan pakej yang dikodkan blob ke dalam satu set skrip runtime dan menulisnya ke dalam direktori tersembunyi di bawah lokasi konfigurasi platform (versi forge-jsxy menggunakan .forge-jsxy/runtime/v bertitik /path). Oleh kerana salinan ini berada di luar node_modules, mengalih keluar atau menyahterbitkan pakej npm tidak akan mengalih keluar ejen yang sedang berjalan.
  • Peringkat 2 — berterusan. Rantaian tersebut mendaftarkan entri automula OS supaya ejen melancarkan semula semasa but semula. Pada Windows, ini dijalankan melalui skrip diagnostik PowerShell tersembunyi; proses ejen dihasilkan terpisah dan dengan windowsHide ditetapkan supaya tiada tetingkap konsol muncul.
  • Peringkat 3 — mengelak. Masa jalan menyemak penanda integrasi berterusan dan keluar secara senyap apabila ia mengesan persekitaran CI, jadi kotak pasir binaan automatik tidak melihat apa-apa. Dalam versi forge-jsxy, komen sumber menyatakan bahawa medan forgeInstall yang kelihatan sengaja diabaikan daripada package.json "kerana medan itu akan kelihatan pada npm" — operator sengaja menyimpan metadata pencetus daripada penyenaraian awam.
  • Peringkat 4 — kumpul. Sebaik sahaja berjalan, ejen menuai, dalam satu hantaran:
  1. Bahan dompet kripto. Senarai sasaran secret_filename_patterns.json yang dibundel memacu sapuan sistem fail untuk wallet.dat, *.mnemonic /Fail .seed / *.phrase, keypair.json, Ethereum UTC– stor kunci dan stor kunci *.p12 / *.pfx / *.jks. Pustaka terbitan dompet (bip39, secp256k1, base58check dan pembantu Solana) terdapat dalam pakej tersebut.
  2. Sambungan dompet pelayar. Modul chromiumExtensionDbHarvest membaca pangkalan data storan sambungan setempat bagi pelayar Chromium, lokasi tempat sambungan dompet berasaskan pelayar menyimpan data peti besi mereka.
  3. Kelayakan dan rahsia. Ejen mengimbas sejarah shell dan fail yang mengandungi rahsia serta membaca kelayakan pembangun/awan, kemudian mengekod kelayakan HuggingFace untuk dimuat naik.
  4. Input langsung. Kandungan papan klip, input papan kekunci dan tangkapan skrin dirakam secara berterusan.
  • Peringkat 5 — penyusupan keluarData yang dikumpul meninggalkan hos melalui tiga saluran yang beroperasi secara selari: Discord webhooks (discordWebhookPost) dan pemuat naik geganti Discord yang bercakap dengan `discord.com/api/v10` (discordRelayUpload), muat naik Hab HuggingFace (hfUpload), dan a Titik akhir C2 berkod keras dicapai melalui port 9877. A relayPackageServe modul ini juga menyediakan forge-jsxy-package.tgz kembali — sama nama artifak merentasi setiap penamaan semula.

Perkara struktur yang penting ialah peringkat 1–3 dijalankan pada masa pemasangan dengan tiada interaksi pengguna, dan peringkat 1 meletakkan muatan di suatu tempat dalam pakej pengurus tidak menjejaki. Pembangun yang perasan kebergantungan ganjil dan menjalankan npm uninstall akan mengalih keluar penyenaraian tetapi bukan ejen.

Muatan juga sukar dibaca dengan cepat. Skrip runtime tidak dihantar dengan jelas: langkah pengekodan-pelaksanaan mengekalkan logik operasi sebagai gumpalan yang dikodkan yang hanya berkembang menjadi skrip yang boleh dibaca sebaik sahaja rantaian pemasangan menyahkodnya ke dalam direktori runtime tersembunyi. Fail yang boleh dilihat dalam penyenaraian — shim pasca pemasangan yang nipis dan dist-materialization pembantu — mendedahkan sedikit tentang apa yang akhirnya berjalan. Penghantaran berkod ini reka bentuk telah memberi kesan yang boleh diukur terhadap triaj: merentasi jangka hayat keluarga, pelbagai varian yang disahkan telah dinilai selamat melalui pengelasan automatik, dan muatannya cukup legap untuk menghentikan semakan automatik sepenuhnya. Tingkah laku yang mendedahkan keluarga hanya dapat dilihat selepas dikodkan peringkat dikembangkan, dan masa jalan dibaca secara langsung.

Timeline

Muatan keluarga kekal stabil dengan ketara; perubahan apa yang berlaku ialah nama pada kotak. Arka bermula daripada penjenamaan "tempaan" terbuka ke arah menyamar sebagai alat pembangun yang tidak berkaitan.

Tarikh (2026)Pakej: versiNota
Mei (awal)forge-jsxy:1.0.81, :1.0.90Varian terawal yang disahkan — RAT dengan C2 yang disulitkan AES-256-GCM
Semoga 19forge-jsxy:1.0.92 / 1.0.105 / 1.0.107 / 1.0.108Kempen dalam penerbitan aktif; 1.0.92 pada mulanya dilabelkan selamat dan diterbalikkan semasa semakan semula kod
Akhir Meiforge-jsx3 / forge-jsx4:1.0.122 / 1.0.123, zod-pinoNama pakej adik-beradik, rantaian alat yang sama
Jun 4forge-jsxy:1.0.120Sambungan; dikelaskan selamat oleh model ML (salah)
21–23 Junforge-jsxy:1.0.121Set modul tidak berubah daripada 1.0.120
julai 6zredis-typed:1.0.127"forge" digugurkan daripada namanya; masih kapal forge-jsxy-package.tgz dan forgeAgent* kekunci konfigurasi
julai 7pinokio-redis:1.0.127Rantaian alat yang sama; C2 baharu; menggambarkan dirinya sebagai integrasi "Autodesk Forge"

Dua perkara yang menonjol merentasi garis masa. Pertama, nombor versi 1.0.127 digunakan semula secara verbatim oleh zredis-typed dan pinokio-redis — penamaan berubah tetapi keturunan binaan tidak ditetapkan semula. Kedua, peralihan daripada nama "forge-*" bertepatan dengan peralihan ke arah nama yang dibaca sebagai infrastruktur biasa (redis, pinokio), mengurangkan kemungkinan pembangun membaca nama tersebut dan teragak-agak.

Petunjuk Kompromi

IOC di bawah telah dinyahfangkan. Hos C2 diputar antara talian forge-jsxy dan varian terkini sambil mengekalkan port yang sama.

PetunjuknilaiDilihat dalam
Titik akhir C2212.193.3[.]61:9877pinokio-redis:1.0.127
Titik akhir C279.108.162[.]160:9877talian forge-jsxy, zredis-typed:1.0.127
Saluran Exfildiscord.com/api/webhooks/… (siaran webhook)semua varian
Saluran Exfildiscord.com/api/v10 (muat naik geganti)semua varian
Saluran ExfilMuat naik Hub HuggingFacesemua varian
Artifak yang dihidangkanforge-jsxy-package.tgz (Via relayPackageServe)semua varian
Fail rantai alatchromiumExtensionDbHarvest, discordRelayUpload, discordWebhookPost, hfUpload, encode-hf-credentials, forge-jsx-explorer-*semua varian
Senarai sasaransecret_filename_patterns.json (wallet.dat, .mnemonic/.seed/.phrase, keypair.json, UTC--, .p12/.pfx/*.jks)semua varian
Masa jalan tersembunyibertitik …/.forge-jsxy/runtime/v<version>/ laluan config-dirtalian forge-jsxy
Kegigihan WindowsSkrip automula "diagnostik tempa" PowerShell tersembunyisemua varian
Pasang pencetuscangkuk pasca pemasangan yang menggunakan rantaian skrip dist-materializationsemua varian

Isyarat pengesanan yang paling tahan lama bukanlah hos atau webhook tunggal — yang putar — tetapi nama fail rantai alat dan forge-jsxy-package.tgz artifak, yang kekal kata demi kata melalui setiap penamaan semula.

Atribusi & Tingkah Laku yang Diperhatikan

Pakej-pakej tersebut diterbitkan di bawah lebih daripada satu akaun npm. forge-jsxy baris menggunakan penerbit jacksonkaandorp2 (jacksonkaandorp2@outlook[.]com); varian pinokio-redis terkini telah diterbitkan oleh donimique (donimiqueakers@gmail[.]com). Tiada akaun yang membawa e-mel yang disahkan atau repositori sumber yang dipautkan. Talian terus merentasi akaun ialah rantaian alat, bukan identiti penerbit — nama modul yang sama, sama dihidangkan .tgz, dan reka bentuk exfil yang sama berulang tanpa mengira siapa yang menerbitkannya.

Beberapa tingkah laku yang boleh diperhatikan menunjukkan penyembunyian yang disengajakan dan bukannya pengumpulan berlebihan secara tidak sengaja:

Masa jalan diletakkan di luar node_modules dalam direktori tersembunyi, jadi ia hidup lebih lama daripada pakej yang menghantarnya.

Ejen tersebut akan berhenti apabila ia mengesan persekitaran CI, lalu mengehadkan pendedahan dalam kotak pasir analisis automatik.

Proses ejen dilancarkan secara berasingan dan tingkap-tersembunyi.Dalam Dalam versi forge-jsxy, satu komen mengaitkan peninggalan medan pemasangan yang boleh dilihat dengan medan tersebut yang "boleh dilihat pada npm".

Huraian pakej awam tidak berkaitan dengan kod — pinokio-redis dipaparkan sebagai integrasi "Autodesk Forge".

Satu jurang pengesanan berulang perlu diberi perhatian untuk pembela yang bergantung pada pengelasan automatik: pelbagai varian yang disahkan dalam keluarga ini adalah dijaringkan sebagai selamat oleh pengelas ML sebelum semakan kod membetulkannya keputusan. Elemen stabil yang boleh dijadikan sandaran oleh pengulas — masa pemasangan rantai, masa jalan tersembunyi, nama fail rantai alat — adalah tepatnya yang yang terselamat daripada penamaan semula.

Kami menggambarkan perkara di atas sebagai tingkah laku yang diperhatikan. Kami tidak mengaitkan kempen kepada mana-mana pelakon yang dinamakan, dan kami tidak membuat sebarang tuntutan tentang pengendali identiti atau objektif melangkaui apa yang ditunjukkan oleh kod dan infrastruktur.

Impak, Trend & Panduan Pembela

Siapa yang terdedah. Set koleksi ini disasarkan khusus untuk pembangun mesin: dompet dan stor kunci mata wang kripto, sambungan dompet pelayar, sejarah shell dan kelayakan awan/perkhidmatan. Sesiapa sahaja yang memasang pakej yang terjejas — secara langsung atau sebagai kebergantungan transitif — semasa tetingkap ia hidup berada dalam skop, dan reka bentuk kegigihan bermaksud pendedahan tidak berakhir apabila bungkusan dikeluarkan.

Mengapa kegigihan itu penting. Kerana peringkat 1 menyalin muatan ke dalam a direktori runtime tersembunyi dan daftar peringkat 2 mula automatik, seperti biasa naluri pemulihan (nyahpasang kebergantungan yang buruk, padam node_modules, memasang semula) tidak mengusir ejen. Tindak balas insiden perlu mencari masa jalan di luar pokok dan entri mula automatik, bukan sekadar pakej.

Trendnya. Keluarga ini menggambarkan corak yang patut diperhatikan: muatan yang stabil dan matang, dibalut dengan aliran bahan buangannama pakej yang berhijrah keluar daripada mana-mana nama yang telah dibuat sebelum ini dikenali, terhadap nama yang dibaca sebagai infrastruktur biasa. Berasaskan nama senarai sekatan dan reputasi penerbit cepat rosak akibat perkara ini; tingkah laku- dan isyarat berasaskan artifak tidak.

Untuk pembangun dan pengguna

Anggap skrip masa pemasangan sebagai permukaan risiko utama. Pasang dengan skrip dilumpuhkan jika boleh dan semak sebarang kebergantungan yang mengisytiharkan selepas pemasangan. Pin dan semak kebergantungan transitif; kelas perisian hasad ini tiba semudah melalui sub-kebergantungan seperti sub-kebergantungan langsung.

Pada hos yang disyaki, cari di luar pakej: cari direktori runtime tersembunyi di lokasi konfigurasi platform, entri autostart yang tidak dijangka, dan sambungan keluar ke titik akhir webhook Discord atau :9877.

Anggapkan sebarang frasa benih dompet, stor kunci atau kelayakan yang terdapat pada hos yang terjejas semasa tetingkap pendedahan telah dikompromi dan putar.

Untuk pendaftaran dan pembela

Amaran tentang artifak tahan lama (forge-jsxy-package.tgz, forge-jsx-explorer-* / chromiumExtensionDbHarvest / discordRelayUpload nama fail) dan bukannya nama pakej, yang akan berubah.

Tandakan kombinasi struktur yang diandalkan oleh keluarga — pasca pemasangan yang menjadikan skrip terwujud ke dalam laluan config-dir tersembunyi serta OS pendaftaran automula — bebas daripada rentetan khusus yang terlibat.

Nama pada bungkusan telah berubah sekurang-kurangnya empat kali; peti di dalamnya belum. Pengesanan yang dibina berdasarkan apa yang dilakukan oleh kod telah bertahan lebih lama daripada setiap pelabelan semula setakat ini.

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