TL; DR
nolimit-agent hè un pacchettu npm chì e so versioni publicate — 1.0.299 à traversu 1.0.307, publicati in quattru ghjorni da u 2026-06-26 à u 2026-06-29 - ognunu porta un quadru cumpletu di phishing è di mail in massa in un cartulare piattu è cumpletamente offuscatu. In ogni versione, l'entrata principale si risolve in .ad/x0.js, unu di ~86 fugliali in una cartella chjamata dotfile chì cuntene circa 4,200 blob di string-array javascript-obfuscator; u hook d'installazione è u layout di l'entrata sò identichi in tutta a linea.
Daretu à l'offuscazione si trova un Flussu di codice di dispusitivu Microsoft 365 OAuth (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode) chì, una volta chì un codice hè appruvatu, leghje a casella di posta Outlook di a vittima è l'articuli inviati attraversu l'API Microsoft Graph; un mutore di inviu SMTP è SMS in massa guidatu da elenchi di destinatari furniti da l'operatore; mudelli di missaghji di impersonificazione di marca; custruzzione di ligami di reindirizzamentu aperti; è ricunniscenza via DNS-over-HTTPS, WHOIS è ricerca di codice GitHub. Beacon di trafficu in tempu di esecuzione à l'infrastruttura di l'operatore à api[.]nolimitent[.]xyz:4100.
Affettatu: chiunque installa qualsiasi versione di u pacchettu, è qualsiasi Casella postale di Microsoft 365 u pruprietariu di u quale appruva un codice di dispusitivu presentatu per mezu di ellu. A versione più recente, 1.0.307, hè l'ultima tag attuale è porta a listessa capacità di cassetta postale di codice di dispusitivu - u codice maliziosu ùn hè micca limitatu à una versione retroattiva.
Severità: criticaEcosistema affettatu: npmL'unicu indicatore da circà prima: l'ospite api[.]nolimitent[.]xyz.
L'attaccu: cumu funziona
Una cunchiglia benigna sopra un carico utile nascostu
U pacchettu presenta una superficia ordinaria. package.json dichjara un postinstallazione ganciu –
text postinstall: node scripts/postinstall.js — è à l'ispezione scripts/postinstall.js hè innocu: installa un shim di cumanda di Windows è esce. U ganciu ùn hè micca induve u cumpurtamentu stà. U principale e werde i campi puntanu tramindui in .ad/, un annuariu chì u puntu iniziale u mantene fora di a casualità ls output, è u so cuntenutu hè uniformemente offuscatu da a macchina. U scanner staticu hà cuntatu ~ 4,293 intervalli di carica utile codificata in tuttu u .ad/ inseme di moduli; javascript-obfuscator hè una dipendenza di sviluppu dichjarata, chì currisponde à a forma di string-array-rotation di i fugliali raggruppati.
A divisione hè u primu signale chì vale a pena di numinà: u ganciu d'installazione chì un revisore scrutinerebbe hè pulitu, mentre chì u codice operativu si trova à un cartulare di distanza, piattu è offuscatu, righjuntu solu quandu u puntu d'entrata esportatu di u pacchettu hè in esecuzione.
Accessu à a cassetta postale cù u codice di u dispositivu Microsoft 365
U modulu .ad/x12.js Porta a capacità più impurtante di u framework. Guida a cuncessione di autorizazione di u dispositivu Microsoft 365 OAuth 2.0:
text POST login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode A cuncessione di codice di u dispositivu hè un flussu Microsoft legittimu cuncipitu per i dispositi cù input vincolatu: un serviziu dumanda un codice, l'utente scrive quellu codice in microsoft.com/devicelogin` nant'à un secondu dispusitivu è appruva, è u serviziu chì dumanda riceve gettoni. Quandu u serviziu chì dumanda appartene à qualchissia altru ch'è u pruprietariu di a casella postale, l'appruvazione dà à quella terza parte un gettu. Una volta ottenutu un gettu, .ad/x12.js` legge a cassetta postale direttamente per mezu di 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 lu $ selezziunà E pruiezioni estraenu l'indirizzi di i mittenti da a casella di posta è l'indirizzi di i destinatari da l'articuli mandati - a materia prima per mappà i currispundenti di una vittima. Questu hè un accessu avversariu in u mezu (AiTM) per accunsentu piuttostu chè per cattura di password: ùn ci hè micca credenziale per u phishing in u sensu classicu, solu un codice per esse appruvatu.
Un mutore di mail è SMS in massa cù mudelli d'impersonificazione
Intornu à l'accessu à a cassetta postale si trova un mittente. U pacchettu spedisce i fugliali di dati mudificabili da l'operatore - liste di mittenti (mittenti.txt, smts.txt) è un schedariu di mudellu (funzioni.txt) - chì l'indirizzi di i so titulari di locu si leghjenu cum'è una scheda di casting per l'impersonificazione: security@apple.com, login-verificazione, serviziu OAuth, fatturazione è mittenti di notificazioni di contu contr'à un yourdomain.com L'operatore rimpiazza l'operatore. U latu SMS porta un telefunuebook è a cunfigurazione di u gateway. U mailer itera e liste di destinatari furnite da l'operatore è manda per mezu di relè SMTP cunfigurati.
Per fà atterrà i ligami, .ad/xu.js e .ad/xq.js custruisce URL chì sfruttanu l'ambiguità di l'analisi di l'URL è u tracciamentu di i clicchi. I mudelli di spoof incorporanu una autorità chì pare affidabile prima di un @ cusì u prefissu visibile hè diversu da u veru host:
text https://trusted[.]com@ https://trusted[.]com%40 https://trusted[.]com:80@ https://redirect[.]example[.]com/ https://track[.]example[.]com/click? U quadru piglia ancu favicon da i principali cunsumatori è enterprise fornitori di mail - una tecnica di rutina per rende un prompt o una pagina di destinazione cunvincente di a marca di u fornitore.
Ricognizione di bersagli è infrastrutture
Parechji moduli raccolgenu u cuntestu prima di mandà. .ad/x0.js risolve i nomi via DNS-over-HTTPS (dns[.]google/resolve), .ad/xa.js dumande WHOIS (api[.]whois[.]vu), E .ad/x9.js esegue a ricerca di codice GitHub (api[.]github[.]com/ricerca/codice?q=) — un mudellu coerente cù a scuperta di a cunfigurazione di u servitore di posta esposta è di e credenziali SMTP per alimentà a lista di relay. .ad/xs.js interroga l'indice CDX di Wayback Machine.
Cumandamentu è cuntrollu
Attraversu l'inseme offuscatu, .ad/x4.js cita u puntu finale di l'operatore:
text http://api[.]nolimitent[.]xyz:4100 L'ospite sparte u so senza limiti marca cù u nome di l'editore, è u : 4100 u portu hè u canale di chjama di u framework. Questu hè l'indicatore unicu più durevule per i difensori: un pacchettu, una stazione di travagliu di sviluppatore, o un agente di compilazione chì ghjunghje api[.]nolimitent[.]xyz hà eseguitu stu codice.
Indicatori di compromessi
L'indicatori quì sottu sò quelli chì un difensore pò agisce - grep a lockfile, bluccà un host, o circà proxy è logs DNS. I endpoints Microsoft appariscenu perchè u framework ne abusa; ùn sò micca elli stessi maliziosi è ùn devenu micca esse bluccati.
| pressure | Type | induva | Azzione difensore |
|---|---|---|---|
nolimit-agent (tutte e versioni 1.0.299–1.0.307) | pacchettu | npm | File di serratura Grep / registri d'installazione |
api[.]nolimitent[.]xyz (:4100) | Ospite C2 | .ad/x4.js | Bluccà; circà i registri DNS + proxy |
.ad/ cartulare ammucciatu cum'è destinazione principale/bin | struttura | package.json | Segnale staticu in a rivista di u registru |
trusted[.]com@ / %40 / :80@ forme di ligame | URL falsificata | .ad/xu.js, .ad/xq.js | Ispezione di l'URL di mail/proxy |
Cuncessione di codice di dispusitivu + Graficu inbox/sentitems leghje | Cumpurtamentu | .ad/x12.js | Cunnessione M365 + Revisione di l'audit graficu |
Hash di file catturati à u triage:
- pacchettu/.ad/x0.js — sha256 e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a
- pacchettu/pacchettu.json — sha256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644
Un signale di tenant di Microsoft 365 chì vale a pena di circà indipendentemente da questu pacchettu: accessi riesciuti à u codice di u dispositivu seguiti subitu da letture di Graph di Cartelle di posta/casella di entrata e mailFolders/sentitems, in particulare da una sessione chì l'utilizatore ùn ricunnosce micca.
Attribuzione è cumpurtamentu osservatu
Ciò chì hè osservabile ferma separatu da quale ci hè daretu.
Fatti osservabili: u pacchettu hè publicatu sottu u manicu agente senza limiti cù un indirizzu Gmail micca verificatu è senza repositoriu di fonte ligatu; u so package.json u descrive cum'è un "mittente di email avanzatu" è l'etichetta cù u squadra rossa parola chjave; u codice di runtime hè cuncintratu in un locu nascostu è offuscatu .ad/ cartulare chì a so catena di strumenti (javascript-obfuscator) hè una dipendenza dichjarata; è l'ospite di chjama api[.]nolimitent[.]xyz riutiliza u senza limiti marca. Questu hè un pacchettu unicu cù un puntu di riferimentu di l'infrastruttura cuntrullata da l'operatore - micca un cluster multi-pacchetti, è ùn hè stata identificata alcuna sovrapposizione cù una campagna precedentemente nominata.
lu squadra rossa A parola chjave ùn cambia micca a classificazione. L'arnesi di sicurezza offensivi legittimi chì furniscenu capacità di doppiu usu facenu cusì in modu trasparente: fonte leggibile, obiettivi furniti da l'operatore è nisuna chjama di casa nascosta. Stu pacchettu inverte ognuna di queste proprietà - u so codice operativu hè offuscatu è nascostu, è face segnali à l'infrastruttura fissa di l'operatore invece di un target furnitu da l'utente. U cumpurtamentu, micca l'etichetta, guverna u verdettu, chì hè maliziosu.
L'intenzione ùn hè micca dichjarata quì. U post descrive ciò chì face u codice - dumandà un codice di dispusitivu, leghje una casella postale via Graph, mandà mail in massa attraversu relè cunfigurati, fà un beacon à un host fissu - è lascia u mutivu senza esse dichjaratu.
Impattu, tendenze è guida di i difensori
Dui effetti di u tempu d'installazione sò impurtanti. Prima, qualsiasi sviluppatore o agente CI chì installa agente senza limiti porta u framework nant'à quellu host è stabilisce a chjama à casa api[.]nolimitent[.]xyzSiconda, a capacità di u codice di u dispusitivu si stende oltre l'ospite chì installa: una casella postale Microsoft 365 chì u so pruprietariu hè induttu à appruvà un codice presentatu hè letta direttamente attraversu Graph, senza chì alcuna password attraversi mai u filu.
A tendenza più larga hè quella di internalizà. U phishing di u codice di u dispositivu (AiTM) hè passatu da una infrastruttura di phishing autonoma à un pacchettu in un registru publicu - distribuzione per npm install invece di un ligame mandatu per email. Imballà u kit in questu modu scambia u prublema di hosting è di consegna di ligami di l'operatore di phishing per a portata di un registru, è piatta u codice operativu daretu à un hook d'installazione pulitu è un cartulare offuscatu chjamatu dotfile chì scunfighja una rapida scansione manuale.
Per i difensori:
- Revisione di u registru è di e dipendenze. Trattate un pacchettu chì principale/werde si risolve in un cartulare oculatu (cù prefissu di puntu) di codice di prima parte uniformemente offuscatu cum'è à altu risicu solu per a struttura, indipendentemente da se u hook d'installazione pare pulitu. A minificazione ùn hè micca offuscazione - porta nantu à a firma di u decodificatore di array di stringhe, micca nantu à a lunghezza di a linea.
- Rinforzu di Microsoft 365. Restringe u flussu d'autorizazione di u codice di u dispusitivu cù l'accessu cundiziunale induve ùn hè micca necessariu operativamente; e cuncessioni di codice di u dispusitivu sò un vettore AiTM cunnisciutu è sò raramente necessarie da l'utilizatori interattivi. Verifica per l'accessu à u codice di u dispusitivu seguitu da l'enumerazione immediata di a cassetta postale Graph.
- Detezione di rete. Bluccà è avvisà attivatu api[.]nolimitent[.]xyzRicerca i log DNS è proxy in uscita in tuttu l'infrastruttura di sviluppatore è di custruzzione.
- Rilevazione di u percorsu di a posta. lu utilizatore@ospite Forme di URL-spoof (fiducia[.]com@…) sò rilevabili à a porta di posta è à u proxy; segnalanu i ligami chì u cumpunente di l'autorità precede un @.
U pacchettu era in diretta nant'à npm à u mumentu di l'analisi. Siccomu u framework piattu abbraccia tutta a linea di versione publicata è l'attuale ùltima L'etichetta (1.0.307) porta a capacità di codice di u dispositivu, a rimozione di u registru deve copre ogni versione, micca solu una sola versione retroattiva.




