Tl; DR
nolimit-agent ay isang npm package na ang mga nailathalang bersyon ay — 1.0.299 sa pamamagitan ng 1.0.307, inilabas sa loob ng apat na araw mula 2026-06-26 hanggang 2026-06-29 — bawat isa ay may dala kumpletong balangkas ng phishing at bulk-mail sa loob ng isang nakatago at ganap na natatakpang direktoryo. Sa bawat bersyon, ang pangunahing entry ay nagiging .ad/x0.js, isa sa ~86 na mga file sa isang folder na may pangalang dotfile na naglalaman ng humigit-kumulang 4,200 javascript-obfuscator string-array blobs; magkapareho ang layout ng install hook at entry sa buong linya.
Sa likod ng kalituhan ay nakaupo ang isang Daloy ng code ng device ng Microsoft 365 OAuth (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode) na, kapag naaprubahan na ang isang code, babasahin nito ang Outlook inbox ng biktima at ipapadala ang mga item sa pamamagitan ng Microsoft Graph API; isang bulk SMTP at SMS sending engine na pinapagana ng mga listahan ng tatanggap na ibinibigay ng operator; mga template ng mensahe na nagpapanggap ng brand; pagbuo ng open-redirect link; at pagmamanman sa DNS-over-HTTPS, WHOIS, at paghahanap ng code sa GitHub. Mga runtime traffic beacon sa imprastraktura ng operator sa api[.]nolimitent[.]xyz:4100.
Apektado: sinumang nag-i-install ng anumang bersyon ng pakete, at anumang Mailbox ng Microsoft 365 na ang may-ari ay nag-aapruba ng isang code ng device na ipinapakita sa pamamagitan nito. Ang pinakabagong bersyon, 1.0.307, ay ang pinakabagong tag at may parehong kakayahan sa mailbox na may device-code — ang malisyosong code ay hindi limitado sa iisang bersyon lamang.
Lubhang: mapanganibApektadong ekosistema: npmAng isang tagapagpahiwatig na unang hahanapin: ang host api[.]nolimitent[.]xyz.
Ang pag-atake: kung paano ito gumagana
Isang benign shell sa ibabaw ng isang nakatagong kargamento
Ang pakete ay nagpapakita ng isang ordinaryong ibabaw. package.json nagpapahayag ng isang postinstall kawit –
text postinstall: node scripts/postinstall.js — at sa inspeksyon mga script/postinstall.js hindi nakakapinsala: nag-i-install ito ng Windows command shim at lumalabas. Ang hook ay hindi kung saan matatagpuan ang kilos. Ang pangunahin at bin parehong nakaturo ang mga patlang .ad/, isang direktoryo na ang nangungunang tuldok ay nagpipigil dito sa kaswal ls output, at ang mga nilalaman ay pantay na natatakpan ng makina. Ang static scanner ay nagbilang ng ~4,293 na naka-encode na payload na sumasaklaw sa buong .ad/ hanay ng modyul; javascript-obfuscator ay isang idineklarang development dependency, na tumutugma sa hugis ng string-array-rotation ng mga naka-bundle na file.
Ang paghahati ang unang signal na dapat pangalanan: ang install hook na susuriin ng isang reviewer ay malinis, habang ang operational code ay nasa isang directory lang ang layo, nakatago at natatakpan, at naaabot lamang kapag tumatakbo na ang na-export na entry point ng package.
Pag-access sa mailbox ng device-code ng Microsoft 365
Ang module .ad/x12.js Taglay nito ang pinakamahalagang kakayahan ng balangkas. Ito ang nagtutulak sa pagbibigay ng pahintulot sa device ng Microsoft 365 OAuth 2.0:
text POST login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode Ang pagbibigay ng device-code ay isang lehitimong daloy ng Microsoft na idinisenyo para sa mga input-constrained device: humihingi ng code ang isang serbisyo, at tina-type ng user ang code na iyon sa microsoft.com/devicelogin` sa pangalawang device at aaprubahan, at ang humihiling na serbisyo ay makakatanggap ng mga token. Kapag ang humihiling na serbisyo ay pagmamay-ari ng ibang tao bukod sa may-ari ng mailbox, ang pag-apruba ay magbibigay sa ikatlong partido ng isang token. Kapag nakuha na ang isang token, Direktang binabasa ng .ad/x12.js` ang mailbox sa pamamagitan ng 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 Ang $piliin Kinukuha ng mga projection ang mga address ng nagpadala mula sa inbox at ang mga address ng tatanggap mula sa mga ipinadalang item — ang hilaw na materyal para sa pagmamapa ng mga correspondent ng biktima. Ito ay adversary-in-the-middle (AiTM) access sa pamamagitan ng pahintulot sa halip na sa pamamagitan ng pagkuha ng password: walang kredensyal para mag-phish sa klasikong kahulugan, isang code lamang para maaprubahan.
Isang bulk mail at SMS engine na may mga template ng panggagaya
Sa paligid ng access sa mailbox ay may nakapatong na mailer. Nagpapadala ang package ng mga data file na maaaring i-edit ng operator — mga listahan ng nagpadala (mga nagpadala.txt, smtps.txt) at isang template file (mga function.txt) — na ang mga placeholder address ay binabasa bilang isang casting sheet para sa panggagaya: security@apple.com, login-pag-verify, serbisyo ng OAuth, pagsingil, at mga nagpadala ng notification ng account laban sa isang yourdomain.com ang stand-in na pinapalitan ng operator. Ang bahagi ng SMS ay may dalang teleponoebook at konpigurasyon ng gateway. Ini-uulit ng mailer ang mga listahan ng tatanggap na ibinigay ng operator at ipinapadala sa pamamagitan ng mga na-configure na SMTP relay.
Para mailagay ang mga link, .ad/xu.js at .ad/xq.js bumuo ng mga URL na nagsasamantala sa kalabuan ng pag-parse ng URL at pagsubaybay sa pag-click. Ang mga spoof pattern ay naglalagay ng isang awtoridad na mukhang mapagkakatiwalaan bago ang isang @ kaya ang nakikitang prefix ay naiiba sa totoong host:
text https://trusted[.]com@ https://trusted[.]com%40 https://trusted[.]com:80@ https://redirect[.]example[.]com/ https://track[.]example[.]com/click? Kinukuha rin ng balangkas ang mga favicon mula sa mga pangunahing mamimili at enterprise mga tagapagbigay ng mail — isang karaniwang pamamaraan para sa pag-render ng isang nakakakumbinsing prompt o landing page na may tatak na tagapagbigay ng mail.
Pagmamasid sa target at imprastraktura
Maraming mga modyul ang kumukuha ng konteksto bago ipadala. .ad/x0.js nireresolba ang mga pangalan sa pamamagitan ng DNS-over-HTTPS (dns[.]google/resolve), .ad/xa.js mga query sa WHOIS (api[.]whois[.]vu), At .ad/x9.js nagpapatakbo ng paghahanap ng code sa GitHub (api[.]github[.]com/search/code?q=) — isang huwaran na naaayon sa pagtuklas ng nakalantad na configuration ng mail-server at mga kredensyal ng SMTP upang pakainin ang listahan ng relay. .ad/xs.js nagtatanong sa CDX index ng Wayback Machine.
Command at kontrol
Sa kabila ng nalilitong set, .ad/x4.js tumutukoy sa endpoint ng operator:
text http://api[.]nolimitent[.]xyz:4100 Ibinahagi ng host ang kanyang walang limitasyon tatak na may sariling pangalan ng tagapaglathala, at ang : 4100 Ang port ay ang call-home channel ng framework. Ito ang pinakamatibay na indicator para sa mga defender: isang package, isang developer workstation, o isang build agent na umaabot api[.]walang limitasyon[.]xyz ay nagpatakbo ng code na ito.
Mga tagapagpahiwatig ng kompromiso
Ang mga indikasyon sa ibaba ay ang mga maaaring gamitin ng isang defender — mag-grap ng lockfile, mag-block ng host, o maghanap ng proxy at DNS logs. Lumilitaw ang mga Microsoft endpoint dahil inaabuso ito ng framework; hindi naman sila mismo malisyoso at hindi dapat i-block.
| Nagtuturo | uri | Saan | Aksyon ng tagapagtanggol |
|---|---|---|---|
nolimit-agent (lahat ng bersyon 1.0.299–1.0.307) | pakete | npm | Mga grep lockfile / mga log ng pag-install |
api[.]nolimitent[.]xyz (:4100) | C2 host | .ad/x4.js | I-block; maghanap ng mga DNS + proxy log |
.ad/ nakatagong direktoryo bilang pangunahing/bin target | kaayusan | package.json | Static signal sa pagsusuri ng registry |
trusted[.]com@ / %40 / :80@ mga form ng link | Panloloko ng URL | .ad/xu.js, .ad/xq.js | Inspeksyon ng URL ng koreo/proxy |
Pagbibigay ng code ng aparato + Graph inbox/sentitems basahin | Pag-uugali | .ad/x12.js | Pag-sign in sa M365 + Pagsusuri sa pag-audit ng graph |
Mga hash ng file na nakuha sa triage:
- pakete/.ad/x0.js — sha256 e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a
- pakete/pakete.json — sha256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644
Isang senyales ng tenant ng Microsoft 365 na sulit hanapin nang hiwalay sa paketeng ito: matagumpay na pag-sign-in ng device-code na sinusundan agad ng mga pagbasa ng Graph ng Mga Folder/inbox ng koreo at mga mailFolder/sentitem, lalo na mula sa isang sesyon na hindi nakikilala ng user.
Pagpapatungkol at naobserbahang pag-uugali
Ang naoobserbahan ay nananatiling hiwalay sa kung sino ang nasa likod nito.
Mga napapansing katotohanan: ang pakete ay inilathala sa ilalim ng pangalang "handle" nolimit-agent na may hindi na-verify na Gmail address at walang naka-link na source repository; nito package.json inilalarawan ito bilang isang "advanced email sender" at tinatag ito gamit ang pulang koponan keyword; ang runtime code ay nakapokus sa isang nakatago at natatakpang .ad/ direktoryo na ang toolchain (javascript-obfuscator) ay isang idineklarang dependency; at ang call-home host api[.]walang limitasyon[.]xyz muling ginagamit ang walang limitasyon tatak. Ito ay isang pakete na may isang landmark ng imprastraktura na kontrolado ng operator — hindi isang kumpol ng maraming pakete, at walang natukoy na pagsasanib sa isang dating pinangalanang kampanya.
Ang pulang koponan Hindi binabago ng keyword ang klasipikasyon. Ang lehitimong offensive-security tooling na nagpapadala ng dual-use capability ay ginagawa ito nang malinaw: nababasang source, mga target na ibinibigay ng operator, at walang nakatagong call-home. Binabaligtad ng package na ito ang bawat isa sa mga property na iyon — ang operational code nito ay natatakpan at nakatago, at nagpapadala ito ng beacon sa nakapirming imprastraktura ng operator sa halip na sa isang target na ibinibigay ng user. Ang kilos, hindi ang label, ang namamahala sa hatol, na siyang malisyoso.
Hindi iginiit dito ang intensyon. Inilalarawan ng post kung ano ang ginagawa ng code — humiling ng device code, nagbabasa ng mailbox sa Graph, nagpapadala ng bulk mail sa pamamagitan ng mga na-configure na relay, beacon sa isang nakapirming host — at hindi iniiwan ang motibo na hindi nakasaad.
Epekto, mga uso at gabay ng tagapagtanggol
Mahalaga ang dalawang epekto sa oras ng pag-install. Una, anumang developer o CI agent na nag-i-install nolimit-agent dinadala ang framework sa host na iyon at itinatatag ang call-home sa api[.]walang limitasyon[.]xyzPangalawa, ang kakayahan ng device-code ay umaabot nang lampas sa nag-i-install na host: ang isang Microsoft 365 mailbox na ang may-ari ay hinikayat na aprubahan ang ipinakitang code ay direktang binabasa sa pamamagitan ng Graph, nang walang password na lumalagpas sa wire.
Ang mas malawak na kalakaran ay ang isapuso. Ang device-code (AiTM) phishing ay lumipat mula sa standalone phishing infrastructure patungo sa isang pakete sa isang pampublikong rehistro — pamamahagi ng install npm sa halip na sa pamamagitan ng link na ipinadala sa pamamagitan ng email. Sa ganitong paraan, ipinagpapalit ng packaging ng kit ang problema sa hosting at link-delivery ng phishing operator para sa abot ng isang registry, at itinatago ang operational code sa likod ng isang malinis na install hook at isang obfuscated directory na may pangalang dotfile na nakakapigil sa mabilisang manual skim.
Para sa mga tagapagtanggol:
- Pagsusuri sa rehistro at dependency. Tratuhin ang isang pakete na ang pangunahin/bin ay nare-resolve sa isang nakatagong (may tuldok na prefix) na direktoryo ng pare-parehong na-obfuscate na first-party code bilang high-risk sa istruktura lamang, anuman ang hitsura ng install hook o hindi. Ang minification ay hindi obfuscation — gate sa string-array decoder signature, hindi sa haba ng linya.
- Pagpapatigas ng Microsoft 365. Limitahan ang daloy ng awtorisasyon ng device-code gamit ang Conditional Access kung saan hindi ito kinakailangan sa operasyon; ang mga pagbibigay ng device-code ay isang kilalang AiTM vector at bihirang kailanganin ng mga interactive na user. Suriin ang mga pag-sign-in ng device-code na susundan ng agarang pagbilang ng Graph mailbox.
- Pagtukoy sa network. I-block at alerto naka-on api[.]walang limitasyon[.]xyzMaghanap ng mga outbound DNS at proxy log para dito sa imprastraktura ng developer at build.
- Pagtukoy sa landas ng koreo. Ang user@host Mga URL-spoof form (pinagkakatiwalaang[.]com@…) ay matutukoy sa mail gateway at proxy; ang mga flag link na ang authority component ay nauuna sa isang @.
Ang pakete ay live sa npm noong panahon ng pagsusuri. Dahil ang nakatagong balangkas ay sumasaklaw sa buong linya ng nailathalang bersyon at sa kasalukuyan pinakahuli Taglay ng tag (1.0.307) ang kakayahan sa device-code, dapat sakupin ng registry takedown ang bawat bersyon, hindi lamang ang isang pabalik na bersyon.




