TL; DR
nolimit-agent ialah pakej npm yang versi terbitannya — 1.0.299 melalui 1.0.307, dikeluarkan selama empat hari dari 2026-06-26 hingga 2026-06-29 — setiap satu membawa rangka kerja pancingan data dan mel pukal yang lengkap di dalam direktori tersembunyi yang dikaburkan sepenuhnya. Dalam setiap versi, entri utama ditetapkan kepada .ad/x0.js, salah satu daripada ~86 fail dalam folder bernama fail titik yang menyimpan kira-kira 4,200 gumpalan tatasusunan rentetan javascript-obfuscator; susun atur cangkuk pemasangan dan entri adalah sama merentasi baris.
Di sebalik kekaburan itu terletak sebuah Aliran kod peranti Microsoft 365 OAuth (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode) bahawa, sebaik sahaja kod diluluskan, akan membaca peti masuk Outlook mangsa dan menghantar item melalui Microsoft Graph API; enjin penghantaran SMTP dan SMS pukal yang dipacu oleh senarai penerima yang dibekalkan oleh pengendali; templat mesej penyamaran jenama; pembinaan pautan pengalihan terbuka; dan peninjauan melalui DNS-melalui-HTTPS, WHOIS dan carian kod GitHub. Suar trafik masa jalan ke infrastruktur pengendali di api[.]nolimitent[.]xyz:4100.
Terjejas: sesiapa sahaja yang memasang sebarang versi pakej, dan mana-mana Peti mel Microsoft 365 yang pemiliknya meluluskan kod peranti yang dibentangkan melaluinya. Versi terkini, 1.0.307, ialah tag terkini dan membawa keupayaan peti mel kod peranti yang sama — kod berniat jahat tidak terhad kepada satu versi lama.
Keparahan: kritikalEkosistem yang terjejas: npmSatu penunjuk yang perlu dicari dahulu: hos api[.]nolimitent[.]xyz.
Serangan itu: bagaimana ia berfungsi
Cangkang jinak di atas muatan tersembunyi
Pakej itu memaparkan permukaan biasa. package.json mengisytiharkan satu selepas pemasangan cangkuk –
text postinstall: node scripts/postinstall.js — dan semasa pemeriksaan skrip/postinstall.js tidak berbahaya: ia memasang shim arahan Windows dan keluar. Cangkuk bukanlah tempat tingkah laku berada. utama dan bin kedua-dua medan menunjukkan .iklan/, direktori yang titik utamanya menghalangnya daripada menjadi kasual ls output, dan kandungannya dikaburkan secara seragam oleh mesin. Pengimbas statik mengira ~4,293 muatan berkod merentasi .iklan/ set modul; javascript-obfuscator ialah kebergantungan pembangunan yang diisytiharkan, yang sepadan dengan bentuk putaran rentetan-array bagi fail yang dibundel.
Pemisahan ini merupakan isyarat pertama yang patut dinamakan: cangkuk pemasangan yang akan diteliti oleh pengulas adalah bersih, manakala kod operasi terletak satu direktori jauhnya, tersembunyi dan dikaburkan, hanya dicapai apabila titik masuk yang dieksport pakej berjalan.
Akses peti mel kod peranti Microsoft 365
Modul .iklan/x12.js membawa keupayaan rangka kerja yang paling penting. Ia memacu pemberian kebenaran peranti Microsoft 365 OAuth 2.0:
text POST login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode Pemberian kod peranti ialah aliran Microsoft yang sah yang direka untuk peranti yang dikekang input: perkhidmatan meminta kod, pengguna menaip kod tersebut ke dalam microsoft.com/perantilogin` pada peranti kedua dan meluluskan, dan perkhidmatan yang meminta menerima token. Apabila perkhidmatan yang meminta milik seseorang selain pemilik peti mel, kelulusan memberikan token kepada pihak ketiga tersebut. Sebaik sahaja token diperoleh, .ad/x12.js` membaca peti mel secara terus melalui Microsoft Graph:
text GET graph[.]microsoft[.]com/v1.0/me/mailFolders/inbox/messages?$top=250&$select=from GET graph[.]microsoft[.]com/v1.0/me/mailFolders/sentitems/messages?$top=250&$select=toRecipients . $pilih Unjuran menarik alamat penghantar daripada peti masuk dan alamat penerima daripada item yang dihantar — bahan mentah untuk memetakan koresponden mangsa. Ini ialah akses musuh-di-tengah (AiTM) melalui persetujuan dan bukannya melalui penangkapan kata laluan: tiada kelayakan untuk memancing data dalam erti kata klasik, hanya kod untuk mendapatkan kelulusan.
Enjin mel dan SMS pukal dengan templat penyamaran
Di sekeliling akses peti mel terdapat sebuah surat menyurat. Pakej ini menghantar fail data yang boleh diedit oleh pengendali — senarai penghantar (penghantar.txt, smtps.txt) dan fail templat (fungsi.txt) — yang alamat tempat letaknya dibaca sebagai helaian pemilihan untuk penyamaran: security@apple.com, login-pengesahan, perkhidmatan OAuth, pengebilan dan penghantar pemberitahuan akaun terhadap a yourdomain.com operator gantian. Bahagian SMS membawa telefonebook dan konfigurasi get laluan. Mailer mengulangi senarai penerima yang dibekalkan oleh operator dan menghantar melalui geganti SMTP yang dikonfigurasikan.
Untuk membuat pautan mendarat, .ad/xu.js dan .iklan/xq.js membina URL yang mengeksploitasi kekaburan penghuraian URL dan penjejakan klik. Corak spoof membenamkan autoriti yang kelihatan dipercayai sebelum @ jadi awalan yang kelihatan berbeza daripada hos sebenar:
text https://trusted[.]com@ https://trusted[.]com%40 https://trusted[.]com:80@ https://redirect[.]example[.]com/ https://track[.]example[.]com/click? Rangka kerja ini juga mengambil favikon daripada pengguna utama dan enterprise penyedia mel — teknik rutin untuk memaparkan gesaan atau halaman pendaratan berjenama penyedia yang meyakinkan.
Peninjauan sasaran dan infrastruktur
Beberapa modul mengumpulkan konteks sebelum dihantar. .iklan/x0.js menyelesaikan nama melalui DNS-melalui-HTTPS (dns[.]google/resolve), .ad/xa.js pertanyaan WHOIS (api[.]whois[.]vu), Dan .iklan/x9.js menjalankan carian kod GitHub (api[.]github[.]com/search/code?q=) — corak yang konsisten dengan penemuan konfigurasi pelayan mel dan kelayakan SMTP yang terdedah untuk memberi suapan kepada senarai geganti. .iklan/xs.js membuat pertanyaan pada indeks CDX Wayback Machine.
Perintah dan kawalan
Merentasi set yang dikaburkan, .iklan/x4.js merujuk titik akhir operator:
text http://api[.]nolimitent[.]xyz:4100 Hos berkongsi tanpa had jenama dengan penamaan penerbit sendiri, dan : 4100 port ialah saluran panggilan utama rangka kerja. Ini ialah penunjuk tunggal yang paling tahan lama untuk pembela: pakej, stesen kerja pembangun atau ejen binaan yang mencapai api[.]tiada had[.]xyz telah menjalankan kod ini.
Petunjuk kompromi
Petunjuk di bawah adalah petunjuk yang boleh diambil tindakan oleh pembela — grep fail kunci, sekat hos atau cari proksi dan log DNS. Titik akhir Microsoft muncul kerana rangka kerja menyalahgunakannya; ia sendiri tidak berniat jahat dan tidak sepatutnya disekat.
| Petunjuk | Jenis | Lokasi | Tindakan pemain pertahanan |
|---|---|---|---|
nolimit-agent (semua versi 1.0.299–1.0.307) | Pakej | npm | Fail kunci Grep / log pemasangan |
api[.]nolimitent[.]xyz (:4100) | Hos C2 | .ad/x4.js | Sekat; cari DNS + log proksi |
.ad/ direktori tersembunyi sebagai sasaran utama/tong sampah | struktur | package.json | Isyarat statik dalam semakan pendaftaran |
trusted[.]com@ / %40 / :80@ borang pautan | Palsu URL | .ad/xu.js, .ad/xq.js | Pemeriksaan URL mel/proksi |
Geran kod peranti + Graf inbox/sentitems membaca | Kelakuan | .ad/x12.js | Log masuk M365 + Semakan audit graf |
Hash fail yang ditangkap semasa triaj:
- pakej/.iklan/x0.js — sha256 e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a
- pakej/pakej.json — sha256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644
Isyarat penyewa Microsoft 365 yang patut dicari tanpa mengira pakej ini: daftar masuk kod peranti yang berjaya diikuti dengan segera oleh bacaan Graf bagi Folder/peti masuk mel dan Folder/sentimen mel, terutamanya daripada sesi yang tidak dikenali oleh pengguna.
Atribusi & tingkah laku yang diperhatikan
Apa yang boleh diperhatikan tetap berasingan daripada siapa yang berada di sebaliknya.
Fakta yang boleh diperhatikan: pakej tersebut diterbitkan di bawah pemegang ejen nolimit dengan alamat Gmail yang tidak disahkan dan tiada repositori sumber yang dipautkan; ia package.json menggambarkannya sebagai "penghantar e-mel lanjutan" dan menandainya dengan pasukan merah kata kunci; kod runtime tertumpu dalam keadaan tersembunyi dan dikaburkan .iklan/ direktori yang rantai alatnya (javascript-obfuscator) ialah kebergantungan yang diisytiharkan; dan hos panggilan-rumah api[.]tiada had[.]xyz menggunakan semula tanpa had jenama. Ini adalah pakej tunggal dengan satu mercu tanda infrastruktur yang dikawal oleh pengendali — bukan kluster berbilang pakej dan tiada pertindihan dengan kempen yang dinamakan sebelum ini dikenal pasti.
. pasukan merah Kata kunci tidak mengubah klasifikasi. Peralatan keselamatan ofensif yang sah yang menghantar keupayaan dwi-guna melakukannya secara telus: sumber yang boleh dibaca, sasaran yang dibekalkan oleh pengendali dan tiada panggilan rumah tersembunyi. Pakej ini membalikkan setiap sifat tersebut — kod operasinya dikaburkan dan disembunyikan, dan ia memberi isyarat kepada infrastruktur pengendali tetap dan bukannya sasaran yang dibekalkan oleh pengguna. Tingkah laku, bukan label, yang mengawal keputusan, yang berniat jahat.
Niat tidak dinyatakan di sini. Catatan tersebut menerangkan apa yang dilakukan oleh kod tersebut — meminta kod peranti, membaca peti mel melalui Graph, menghantar mel pukal melalui geganti yang dikonfigurasikan, beacon kepada hos tetap — dan membiarkan motif tidak dinyatakan.
Impak, trend & panduan pembela
Dua kesan masa pemasangan penting. Pertama, mana-mana pembangun atau ejen CI yang memasang ejen nolimit membawa rangka kerja ke hos tersebut dan menetapkan panggilan rumah kepada api[.]tiada had[.]xyzKedua, keupayaan kod peranti meluaskan jangkauan melangkaui hos pemasangan: peti mel Microsoft 365 yang pemiliknya diinduksi untuk meluluskan kod yang dibentangkan dibaca terus melalui Graph, tanpa kata laluan yang pernah melintasi wayar.
Trend yang lebih luas adalah untuk diinternalisasikan. Pemancingan data kod peranti (AiTM) telah beralih daripada infrastruktur pemancingan data kendiri kepada pakej pada daftar awam — pengedaran oleh npm memasang dan bukannya melalui pautan yang diemelkan. Pembungkusan kit dengan cara ini menukar masalah pengehosan dan penghantaran pautan pengendali pancingan data kepada jangkauan pendaftaran dan menyembunyikan kod operasi di sebalik cangkuk pemasangan yang bersih dan direktori yang dikaburkan bernama fail titik yang mengatasi skim manual yang pantas.
Untuk pemain pertahanan:
- Semakan pendaftaran dan kebergantungan. Layan pakej yang utama/bin menyelesaikan ke dalam direktori tersembunyi (berawalan titik) bagi kod pihak pertama yang dikaburkan secara seragam sebagai berisiko tinggi pada struktur sahaja, tanpa mengira sama ada cangkuk pemasangan kelihatan bersih atau tidak. Pengurangan bukanlah pengaburan — get pada tandatangan penyahkod tatasusunan rentetan, bukan pada panjang baris.
- Pengerasan Microsoft 365. Hadkan aliran kebenaran kod peranti dengan Akses Bersyarat jika ia tidak diperlukan secara operasi; pemberian kod peranti ialah vektor AiTM yang diketahui dan jarang diperlukan oleh pengguna interaktif. Audit untuk daftar masuk kod peranti diikuti dengan penghitungan peti mel Graph serta-merta.
- Pengesanan rangkaian. Sekat dan beri amaran pada api[.]tiada had[.]xyz. Cari log DNS dan proksi keluar untuknya merentasi infrastruktur pembangun dan binaan.
- Pengesanan laluan mel. . pengguna@hos Borang-borang URL-spoof (dipercayai[.]com@…) boleh dikesan di gerbang mel dan proksi; pautan bendera yang komponen autoritinya mendahului @.
Pakej tersebut telah beroperasi di npm semasa analisis. Kerana rangka kerja tersembunyi merangkumi keseluruhan baris versi yang diterbitkan dan versi semasa Terkini tag (1.0.307) membawa keupayaan kod peranti, penghapusan pendaftaran harus meliputi setiap versi, bukan hanya satu versi lama.




