TL; DR
nolimit-agent és un paquet npm les versions publicades del qual — 1.0.299 a través de 1.0.307, publicats durant quatre dies, del 26/06/2026 al 29/06/2026, cadascun amb un marc complet de phishing i correu massiu dins d'un directori ocult i completament ofuscat. En totes les versions, l'entrada principal es resol a .ad/x0.js, un dels ~86 fitxers d'una carpeta amb el nom dotfile que conté aproximadament 4,200 blobs de matriu de cadenes de javascript-obfuscator; el ganxo d'instal·lació i la disposició de l'entrada són idèntics a tota la línia.
Darrere de l'ofuscació hi ha un Flux de codi de dispositiu OAuth del Microsoft 365 (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode) que, un cop aprovat un codi, llegeix la safata d'entrada de l'Outlook de la víctima i els elements enviats a través de l'API de Microsoft Graph; un motor d'enviament massiu de SMTP i SMS impulsat per llistes de destinataris proporcionades per l'operador; plantilles de missatges d'imitació de marca; construcció d'enllaços de redirecció oberts; i reconeixement a través de DNS sobre HTTPS, WHOIS i cerca de codi GitHub. Balises de trànsit en temps d'execució a la infraestructura de l'operador a api[.]nolimitent[.]xyz:4100.
Afectats: qualsevol persona que instal·li qualsevol versió del paquet i qualsevol Bústia de correu del Microsoft 365 el propietari del qual aprova un codi de dispositiu presentat a través d'ell. La versió més recent, 1.0.307, és l'etiqueta més recent actual i té la mateixa capacitat de bústia de correu de codi de dispositiu: el codi maliciós no està limitat a una versió anterior.
Severitat: críticEcosistema afectat: npmL'únic indicador que cal buscar primer: l'amfitrió api[.]nolimitent[.]xyz.
L'atac: com funciona
Una closca benigna sobre una càrrega útil oculta
L'envàs presenta una superfície normal. paquet.json declara un postinstal·lació ganxo –
text postinstall: node scripts/postinstall.js — i en la inspecció scripts/postinstal·lació.js és inofensiu: instal·la un shim d'ordres de Windows i surt. El comportament no es troba al hook. El principal i paperera tots dos camps apunten a .ad/, un directori el punt inicial del qual el manté fora de la informació casual ls sortida, i el contingut de la qual està ofuscat uniformement per màquina. L'escàner estàtic va comptar ~4,293 trams de càrrega útil codificada a través del .ad/ conjunt de mòduls; javascript-ofuscator és una dependència de desenvolupament declarada, que coincideix amb la forma de rotació de matrius de cadenes dels fitxers agrupats.
La divisió és el primer senyal que val la pena anomenar: el ganxo d'instal·lació que un revisor examinaria és net, mentre que el codi operatiu es troba a un directori de distància, ocult i ofuscat, i només s'hi arriba quan s'executa el punt d'entrada exportat del paquet.
Accés a la bústia de correu amb codi de dispositiu del Microsoft 365
El mòdul .ad/x12.js Porta la capacitat més important del marc de treball. Impulsa la concessió d'autorització de dispositius Microsoft 365 OAuth 2.0:
text POST login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode La concessió de codi de dispositiu és un flux legítim de Microsoft dissenyat per a dispositius amb restriccions d'entrada: un servei sol·licita un codi, l'usuari escriu aquest codi a microsoft.com/devicelogin` en un segon dispositiu i aprova, i el servei sol·licitant rep els tokens. Quan el servei sol·licitant pertany a algú que no sigui el propietari de la bústia de correu, l'aprovació lliura un token a aquest tercer. Un cop obtingut un token, .ad/x12.js` llegeix la bústia de correu directament a través de 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 L' $seleccionar Les projeccions extreuen les adreces dels remitents de la safata d'entrada i les adreces dels destinataris dels elements enviats, la matèria primera per mapejar els corresponsals d'una víctima. Aquest és un accés d'adversari en el mig (AiTM) per consentiment en lloc de per captura de contrasenya: no hi ha cap credencial per a la suplantació d'identitat en el sentit clàssic, només un codi per obtenir l'aprovació.
Un motor de correu massiu i SMS amb plantilles d'impersonació
Al voltant de l'accés a la bústia hi ha un enviament de correu. El paquet envia fitxers de dades editables per l'operador: llistes de remitents (remitents.txt, smts.txt) i un fitxer de plantilla (funcions.txt) — les adreces provisionals del qual es llegeixen com a full de càsting per a la suplantació d'identitat: seguretat@apple.com, login-verificació, servei OAuth, facturació i remitents de notificacions de comptes contra un yourdomain.com substitut de l'operador. El costat SMS porta un telèfonebook i configuració de la passarel·la. El programa de correu itera les llistes de destinataris proporcionades per l'operador i envia a través de relés SMTP configurats.
Per fer que els enllaços aterrin, .ad/xu.js i .ad/xq.js crear URL que explotin l'ambigüitat de l'anàlisi d'URL i el seguiment de clics. Els patrons de falsificació incorporen una autoritat d'aspecte fiable abans d'un @ de manera que el prefix visible és diferent de l'amfitrió real:
text https://trusted[.]com@ https://trusted[.]com%40 https://trusted[.]com:80@ https://redirect[.]example[.]com/ https://track[.]example[.]com/click? El marc de treball també capta favicons dels principals consumidors i enterprise proveïdors de correu: una tècnica rutinària per representar una pàgina de destinació o indicació de marca del proveïdor convincent.
Reconeixement d'objectius i infraestructures
Diversos mòduls recopilen context abans d'enviar-lo. .ad/x0.js resol noms a través de DNS sobre HTTPS (dns[.]google/resolve), .ad/xa.js consultes WHOIS (api[.]whois[.]vu), I .ad/x9.js executa una cerca de codi de GitHub (api[.]github[.]com/cerca/codi?q=) — un patró coherent amb el descobriment de la configuració del servidor de correu exposada i les credencials SMTP per alimentar la llista de retransmissió. .ad/xs.js consulta l'índex CDX de Wayback Machine.
Ordre i control
A través del conjunt ofuscat, .ad/x4.js fa referència al punt final de l'operador:
text http://api[.]nolimitent[.]xyz:4100 L'amfitrió comparteix el seu nolimitat marca amb el nom propi de l'editor i la : 4100 el port és el canal de trucada del framework. Aquest és l'indicador més durador per als defensors: un paquet, una estació de treball de desenvolupador o un agent de compilació que arriba api[.]nolimitent[.]xyz ha executat aquest codi.
Indicadors de compromís
Els indicadors següents són els que un defensor pot utilitzar: grep a lockfile, bloquejar un host o cercar el proxy i els registres DNS. Els endpoints de Microsoft apareixen perquè el marc de treball els utilitza de manera abusiva; no són maliciosos en si mateixos i no s'han de bloquejar.
| Indicador | Tipus | On? | Acció del defensor |
|---|---|---|---|
nolimit-agent (totes les versions 1.0.299–1.0.307) | paquet | npm | Fitxers de bloqueig Grep / registres d'instal·lació |
api[.]nolimitent[.]xyz (:4100) | Amfitrió C2 | .ad/x4.js | Bloqueja; cerca registres DNS + proxy |
.ad/ directori ocult com a objectiu principal/bin | estructura | package.json | Senyal estàtic en la revisió del registre |
trusted[.]com@ / %40 / :80@ formularis d'enllaç | URL falsa | .ad/xu.js, .ad/xq.js | Inspecció d'URL de correu/proxy |
Concessió de codi de dispositiu + Graph inbox/sentitems llegir | Comportament | .ad/x12.js | Inici de sessió a M365 + revisió d'auditoria de Graph |
Hashes de fitxers capturats al triatge:
- paquet/.ad/x0.js — sha256 e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a
- paquet/paquet.json — sha256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644
Un senyal d'inquilí del Microsoft 365 que val la pena buscar independentment d'aquest paquet: inicis de sessió correctes del codi del dispositiu seguits immediatament per lectures de gràfics de Carpetes de correu/safata d'entrada i Carpetes de correu/sentits, especialment d'una sessió que l'usuari no reconeix.
Atribució i comportament observat
Allò que és observable roman separat de qui hi ha darrere.
Dades observables: el paquet es publica sota el nom comercial agent sense límits amb una adreça de Gmail no verificada i sense un repositori d'origen enllaçat; paquet.json el descriu com un "remitent de correu electrònic avançat" i l'etiqueta amb el equip vermell paraula clau; el codi d'execució es concentra en un lloc ocult i ofuscat .ad/ directori la cadena d'eines del qual (javascript-ofuscator) és una dependència declarada; i l'amfitrió de la call-home api[.]nolimitent[.]xyz reutilitza el nolimitat marca. Es tracta d'un paquet únic amb un punt de referència d'infraestructura controlat per l'operador, no d'un clúster de diversos paquets, i no s'ha identificat cap solapament amb una campanya anomenada anteriorment.
L' equip vermell La paraula clau no canvia la classificació. Les eines legítimes de seguretat ofensiva que inclouen capacitat de doble ús ho fan de manera transparent: codi font llegible, objectius proporcionats per l'operador i sense trucada a la llar oculta. Aquest paquet inverteix cadascuna d'aquestes propietats: el seu codi operatiu està ofuscat i ocult, i fa senyals a una infraestructura fixa de l'operador en lloc d'un objectiu proporcionat per l'usuari. El comportament, no l'etiqueta, regeix el veredicte, que és maliciós.
Aquí no s'afirma la intenció. La publicació descriu què fa el codi (sol·licitar un codi de dispositiu, llegir una bústia de correu a través del Graph, enviar correu massiu a través de relés configurats, enviar una balisa a un host fix) i no especifica el motiu.
Impacte, tendències i orientació per a defensors
Dos efectes en el temps d'instal·lació són importants. En primer lloc, qualsevol desenvolupador o agent de CI que instal·li agent sense límits porta el marc de treball a aquest host i estableix la trucada a casa api[.]nolimitent[.]xyzEn segon lloc, la capacitat del codi del dispositiu estén l'abast més enllà de l'amfitrió instal·lador: una bústia de correu del Microsoft 365, el propietari de la qual ha d'aprovar un codi presentat, es llegeix directament a través del Graph, sense que cap contrasenya creui mai el cable.
La tendència més general és la d'internalitzar. El phishing de codi de dispositiu (AiTM) ha passat d'una infraestructura de phishing independent a un paquet en un registre públic: distribució per npm instal·lar en lloc d'un enllaç enviat per correu electrònic. Empaquetar el kit d'aquesta manera intercanvia el problema d'allotjament i lliurament d'enllaços de l'operador de phishing per l'abast d'un registre, i amaga el codi operatiu darrere d'un ganxo d'instal·lació net i un directori ofuscat anomenat dotfile que impedeix una revisió manual ràpida.
Per als defensors:
- Revisió del registre i de les dependències. Tracta un paquet el qual principal/paperera es resol en un directori ocult (amb prefix de punt) de codi propi uniformement ofuscat com a d'alt risc només per l'estructura, independentment de si el ganxo d'instal·lació sembla net. La minificació no és ofuscació: porta a la signatura del descodificador de matrius de cadenes, no a la longitud de línia.
- Enduriment del Microsoft 365. Restringeix el flux d'autorització del codi del dispositiu amb accés condicional on no sigui necessari des del punt de vista operativ; les concessions de codi de dispositiu són un vector AiTM conegut i els usuaris interactius rarament les necessiten. Audita els inicis de sessió del codi del dispositiu seguits de l'enumeració immediata de la bústia de correu del Graph.
- Detecció de xarxa. Bloqueja i alerta activada api[.]nolimitent[.]xyzCerca registres DNS i proxy de sortida a través de la infraestructura de desenvolupador i construcció.
- Detecció de la ruta del correu. L' usuari@amfitrió Formularis d'URL suplantades (de confiança[.]com@…) són detectables a la passarel·la de correu i al proxy; marquen enllaços el component d'autoritat dels quals precedeix un @.
El paquet estava disponible a npm en el moment de l'anàlisi. Com que el marc de treball ocult abasta tota la línia de versions publicades i l'actual últim L'etiqueta (1.0.307) conté la capacitat de codi de dispositiu, la supressió del registre hauria de cobrir totes les versions, no només una versió anterior.




