TL; DR
nolimit-agent is in npm-pakket wêrfan de publisearre ferzjes — 1.0.299 oant 1.0.307, útbrocht oer fjouwer dagen fan 2026-06-26 oant 2026-06-29 — elk mei in folslein phishing- en bulk-mail-raamwurk binnen in ferburgen, folslein ferburgen map. Yn elke ferzje wurdt de haadyngong oplost nei .ad/x0.js, ien fan ~86 bestannen yn in map mei de namme dotfile dy't sawat 4,200 javascript-obfuscator string-array blobs befettet; de ynstallaasjehook en yngongslayout binne identyk oer de hiele line.
Efter de fertsjustering sit in Microsoft 365 OAuth apparaatkoadestream (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode) dat, as in koade ienris goedkard is, it Outlook-postfak fan it slachtoffer lêst en ferstjoerde items fia de Microsoft Graph API; in bulk SMTP- en SMS-ferstjoermotor oandreaun troch troch de operator levere ûntfangerlisten; sjabloanen foar merkimitaasjeberjochten; konstruksje fan iepen trochferwizingskeppelings; en ferkenning fia DNS-oer-HTTPS, WHOIS en GitHub-koadesykjen. Runtime ferkearsbakens nei operatorynfrastruktuer by api[.]nolimitent[.]xyz:4100.
Beynfloede: elkenien dy't in ferzje fan it pakket ynstalleart, en elke Microsoft 365 postfak waans eigener in apparaatkoade goedkart dy't dertroch presintearre wurdt. De meast resinte ferzje, 1.0.307, is de hjoeddeiske lêste tag en hat deselde apparaatkoade-postfakmooglikheden - de kweade koade is net beheind ta ien efterferzje.
Ernst: krityskBetroffen ekosysteem: npmDe iene yndikator om earst nei te sykjen: de host api[.]nolimitent[.]xyz.
De oanfal: hoe't it wurket
In goedaardige skulp oer in ferburgen lading
It pakket presintearret in gewoan oerflak. pakket.json ferklearret in nei ynstallaasje heak –
text postinstall: node scripts/postinstall.js - en by ynspeksje skripts/postinstall.js is ûnskealik: it ynstallearret in Windows-kommando-shim en slút ôf. De hook is net wêr't it gedrach libbet. De main en bin fjilden wize beide nei .advertinsje/, in map wêrfan de earste punt it bûten tafallich hâldt ls útfier, en waans ynhâld unifoarm masine-fertsjustere is. De statyske scanner telde ~4,293 kodearre payload-spans oer de .advertinsje/ moduleset; javascript-obfuscator is in ferklearre ûntwikkelingsôfhinklikens, dy't oerienkomt mei de string-array-rotaasjefoarm fan 'e bondele bestannen.
De splitsing is it earste sinjaal dat it neamen wurdich is: de ynstallaasjeheak dy't in resinsint ûndersocht soe is skjin, wylst de operasjonele koade ien map fierderop sit, ferburgen en fertsjustere, allinich berikt as it eksportearre yngongspunt fan it pakket rint.
Tagong ta Microsoft 365-postfak mei apparaatkoade
De module .ad/x12.js hat de wichtichste mooglikheden fan it framework. It driuwt de Microsoft 365 OAuth 2.0 apparaatautorisaasjeferliening oan:
text POST login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode De apparaatkoadefergunning is in legitime Microsoft-stream ûntworpen foar apparaten mei beheinde ynfier: in tsjinst freget in koade oan, de brûker typt dy koade yn microsoft.com/apparaatlogin` op in twadde apparaat en goedkart, en de oanfrege tsjinst ûntfangt tokens. As de oanfrege tsjinst ta immen oars as de postfakeigner heart, jout goedkarring dy tredde partij in token. Sadree't in token is krigen, .ad/x12.js` lêst de postfak direkt fia 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 De $selektearje projeksjes helje stjoerdersadressen út 'e postfak en ûntfangeradressen út ferstjoerde items - it grûnstof foar it yn kaart bringen fan 'e korrespondinten fan in slachtoffer. Dit is tagong ta tsjinstanner-yn-it-midden (AiTM) troch tastimming ynstee fan troch wachtwurd fêst te lizzen: d'r is gjin ynloggegevens foar phishing yn 'e klassike sin, allinich in koade om goedkard te wurden.
In bulkpost- en SMS-motor mei imitaasjesjabloanen
Om de tagong fan 'e postfak sit in ferstjoerder. It pakket ferstjoert troch de operator bewurkbere gegevensbestannen - stjoerderslisten (stjoerders.txt, smtps.txt) en in sjabloanbestân (funksjes.txt) — waans plakhâlderadressen lêzen wurde as in castingblêd foar imitaasje: feiligens@apple.com, login-ferifikaasje, OAuth-tsjinst, fakturearring en akkountnotifikaasje-ôfstjoerders tsjin in yourdomain.com ynfaller dy't de operator ferfangt. De SMS-kant hat in tillefoanebook en gateway-konfiguraasje. De mailer iterearret troch de operator levere ûntfangerlisten en ferstjoert fia konfigurearre SMTP-relays.
Om keppelings lân te meitsjen, .ad/xu.js en .ad/xq.js URL's bouwe dy't URL-parsing-ambiguïteit en kliktracking eksploitearje. De parodi-patroanen ynbêde in betrouber útsjende autoriteit foar in @ dus it sichtbere foarheaksel ferskilt fan 'e echte host:
text https://trusted[.]com@ https://trusted[.]com%40 https://trusted[.]com:80@ https://redirect[.]example[.]com/ https://track[.]example[.]com/click? It ramt pakt ek favicons fan grutte konsuminten en enterprise e-postproviders - in routinetechnyk foar it werjaan fan in oertsjûgjende prompt of lâningsside mei in providermerk.
Doelwit- en ynfrastruktuerferkenning
In oantal modules sammelje kontekst foardat se ferstjoerd wurde. .ad/x0.js lost nammen op fia DNS-oer-HTTPS (dns[.]google/oplosse), .ad/xa.js fragen WHOIS (api[.]whois[.]vu), En .ad/x9.js fiert GitHub-koadesykjen út (api[.]github[.]com/sykje/koade?q=) - in patroan dat oerienkomt mei it ûntdekken fan bleatstelde e-posttsjinnerkonfiguraasje en SMTP-gegevens om de relaylist te fieden. .ad/xs.js freget de CDX-yndeks fan 'e Wayback Machine op.
Kommando en kontrôle
Oer de ferburgen set hinne, .ad/x4.js ferwiist nei it einpunt fan 'e operator:
text http://api[.]nolimitent[.]xyz:4100 De gasthear dielt syn ûnbeheind merk mei de eigen namme fan 'e útjouwer, en de : 4100 port is it call-home-kanaal fan it framework. Dit is de ienige duorsumste yndikator foar ferdigeners: in pakket, in ûntwikkelderswurkstasjon, of in build-agent dy't berikt api[.]gjin beheining[.]xyz hat dizze koade útfierd.
Yndikatoaren fan kompromis
De yndikatoaren hjirûnder binne dejingen wêrop in ferdigener hannelje kin - grep in lockfile, in host blokkearje, of proxy- en DNS-logs sykje. Microsoft-einpunten ferskine om't it framework se misbrûkt; se binne sels net kwea-aardich en moatte net blokkearre wurde.
| indicator | Type | Wêr | Aksje fan ferdigener |
|---|---|---|---|
nolimit-agent (alle ferzjes 1.0.299–1.0.307) | Pakket | npm | Grep lockfiles / ynstallaasjelogs |
api[.]nolimitent[.]xyz (:4100) | C2-host | .ad/x4.js | Blokkearje; sykje yn DNS + proxy-logs |
.ad/ ferburgen map as haad-/bin-doel | Struktuer | package.json | Statysk sinjaal yn registerbeoardieling |
trusted[.]com@ / %40 / :80@ keppelingsformulieren | URL-parodi | .ad/xu.js, .ad/xq.js | Ynspeksje fan e-post/proxy-URL |
Apparaatkoadefergunning + Grafyk inbox/sentitems lêze | Hâlden en dragen | .ad/x12.js | M365 oanmelde + Graph auditbeoardieling |
Triemhashes fongen by triage:
- pakket/.ad/x0.js — sha256 e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a
- pakket/pakket.json — sha256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644
In Microsoft 365-hierdersinjaal dat it wurdich is om te sykjen, ûnôfhinklik fan dit pakket: suksesfolle oanmeldingen mei apparaatkoade, fuortendaliks folge troch grafyklêzingen fan postmappen/postfak en postMappen/ferstjoerings, foaral fan in sesje dy't de brûker net werkenne.
Attribúsje en waarnommen gedrach
Wat waarnimber is, bliuwt apart fan wa't derachter sit.
Waarnimbere feiten: it pakket wurdt publisearre ûnder de handgreep nolimit-agent mei in net-ferifiearre Gmail-adres en gjin keppele boarne-opslachplak; syn pakket.json beskriuwt it as in "avansearre e-poststjoerder" en tagget it mei de read-team kaaiwurd; de runtime-koade is konsintrearre yn in ferburgen, fertsjustere .advertinsje/ map waans arkketen (javascript-obfuscator) is in ferklearre ôfhinklikens; en de call-home host api[.]gjin beheining[.]xyz brûkt de ûnbeheind merk. Dit is ien pakket mei ien troch de operator kontroleare ynfrastruktuerlandmark - gjin kluster mei meardere pakketten, en der waard gjin oerlaap mei in earder neamde kampanje identifisearre.
De read-team kaaiwurd feroaret de klassifikaasje net. Legitime offensive-feiligens-ark dy't dûbel gebrûk mooglik makket, dogge dat transparant: lêsbere boarne, troch de operator levere doelen, en gjin ferburgen call-home. Dit pakket ynvertearret elk fan dy eigenskippen - de operasjonele koade is ferburgen en ferburgen, en it beaconet nei fêste operatorynfrastruktuer ynstee fan in doel dat de brûker leveret. It gedrach, net it label, bepaalt it oardiel, dat kwea-aardich is.
Yntinsje wurdt hjir net oanjûn. De post beskriuwt wat de koade docht - in apparaatkoade oanfreegje, in postfak oer Graph lêze, bulkpost ferstjoere fia konfigurearre relays, nei in fêste host beaconje - en lit motyf ûnfermeld.
Ynfloed, trends en begelieding fan ferdigeners
Twa effekten op ynstallaasjetiid binne wichtich. Earst, elke ûntwikkelder of CI-agint dy't ynstallearret nolimit-agent bringt it ramtwurk nei dy host en stelt de call-home yn api[.]gjin beheining[.]xyzTwadder wreidet de apparaatkoade-mooglikheid berik út fierder as de ynstallearjende host: in Microsoft 365-postfak wêrfan de eigener oantrune wurdt om in presintearre koade goed te keuren, wurdt direkt fia Graph lêzen, sûnder dat der ea in wachtwurd oer de tried komt.
De bredere trend is dy fan internalisearjen. Phishing mei apparaatkoade (AiTM) is fan in standalone phishing-ynfrastruktuer nei in pakket yn in iepenbier register ferpleatst - distribúsje troch npm ynstallearje ynstee fan fia in e-postkeppeling. It op dizze manier ynpakken fan 'e kit ferhannelet it hosting- en keppelingleveringsprobleem fan 'e phishing-operator foar it berik fan in register, en ferberget de operasjonele koade efter in skjinne ynstallaasjehook en in obfuscated map mei de namme dotfile dy't in rappe hânmjittige skim ferslacht.
Foar ferdigeners:
- Registry- en ôfhinklikheidsoersjoch. Behannelje in pakket waans main/bin lost him op yn in ferburgen (mei in punt-foarheaksel) map fan unifoarm fertsjustere koade fan earste partij as heechrisiko allinich op struktuer, ûnôfhinklik fan oft de ynstallaasjeheak der skjin útsjocht. Minifikaasje is gjin fertsjustering - poarte op 'e string-array-dekoder-hântekening, net op rigellingte.
- Microsoft 365 ferhurding. Beheine de autorisaasjestream foar apparaatkoade mei betingste tagong wêr't it net operasjoneel fereaske is; apparaatkoadeferlieningen binne in bekende AiTM-fektor en wurde selden nedich troch ynteraktive brûkers. Kontrôle foar oanmeldingen mei apparaatkoade folge troch direkte opsomming fan Graph-postfakken.
- Netwurkdeteksje. Blokkearje en warskôgje oan api[.]gjin beheining[.]xyzSykje útgeande DNS- en proxy-logs derfoar by ûntwikkelders en bouwynfrastruktuer.
- Deteksje fan postpaden. De brûker@host URL-parodyformulieren (fertroude[.]com@…) binne detektearber by de postgateway en proxy; markearje keppelings waans autoriteitskomponint foarôfgiet oan in @.
It pakket wie live op npm op it momint fan analyze. Omdat it ferburgen ramt de hiele publisearre ferzjeline en de hjoeddeiske omfiemet lêste tag (1.0.307) hat de apparaatkoade-mooglikheid, register takedown moat elke ferzje dekke, net allinich ien efterferzje.




