TL; DR
nolimit-agent è un pacchetto npm le cui versioni pubblicate — 1.0.299 attraverso 1.0.307, rilasciato in quattro giorni dal 26-06-2026 al 29-06-2026 — ciascuno porta un Framework completo per la gestione di attacchi di phishing e invio massivo di email. all'interno di una directory nascosta e completamente offuscata. In ogni versione la voce principale si risolve in .ad/x0.js, uno degli ~86 file in una cartella denominata dotfile che contiene circa 4,200 blob di array di stringhe javascript-obfuscator; l'hook di installazione e il layout di ingresso sono identici su tutta la linea.
Dietro l'offuscamento si cela un Flusso del codice dispositivo OAuth di Microsoft 365 (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode) che, una volta approvato un codice, legge la casella di posta Outlook della vittima e gli elementi inviati tramite l'API Microsoft Graph; un motore di invio SMTP e SMS in massa gestito da elenchi di destinatari forniti dall'operatore; modelli di messaggi di impersonificazione del marchio; costruzione di link di reindirizzamento aperto; e ricognizione tramite DNS-over-HTTPS, WHOIS e ricerca di codice GitHub. Beacon di traffico in fase di esecuzione all'infrastruttura dell'operatore a api[.]nolimitent[.]xyz:4100.
Soggetti interessati: chiunque installi qualsiasi versione del pacchetto e qualsiasi Casella di posta di Microsoft 365 il cui proprietario approva un codice dispositivo presentato tramite esso. La versione più recente, 1.0.307, è l'etichetta più recente attualmente disponibile e possiede la stessa capacità di casella di posta del codice dispositivo: il codice dannoso non è limitato a una singola versione precedente.
Gravità: criticoEcosistema interessato: npmL'unico indicatore da cercare per primo: l'host api[.]nolimitent[.]xyz.
L'attacco: come funziona
Un involucro innocuo che nasconde un carico utile celato.
La confezione presenta una superficie ordinaria. pacchetto.json dichiara un post-installazione gancio -
text postinstall: node scripts/postinstall.js — e all'ispezione scripts/postinstall.js è innocuo: installa uno shim di comando di Windows ed esce. Il comportamento non risiede nell'hook. principale and bidone entrambi i campi puntano .a.D/, una directory il cui punto iniziale la tiene fuori dalla casualità ls output e il cui contenuto è uniformemente offuscato dalla macchina. Lo scanner statico ha contato ~4,293 intervalli di payload codificati attraverso il .a.D/ set di moduli; offuscatore javascript è una dipendenza di sviluppo dichiarata, che corrisponde alla struttura di rotazione degli array di stringhe dei file inclusi.
La separazione è il primo segnale degno di nota: l'hook di installazione che un revisore esaminerebbe attentamente è pulito, mentre il codice operativo si trova in una directory a parte, nascosto e offuscato, accessibile solo quando viene eseguito il punto di ingresso esportato del pacchetto.
Accesso alla casella di posta tramite codice dispositivo Microsoft 365
Il modulo .ad/x12.js Contiene la funzionalità più importante del framework. Gestisce la concessione di autorizzazione del dispositivo OAuth 2.0 di Microsoft 365:
text POST login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode La concessione del codice dispositivo è un flusso Microsoft legittimo progettato per dispositivi con limitazioni di input: un servizio richiede un codice, l'utente digita quel codice in microsoft.com/dispositivologinsu un secondo dispositivo e approva, e il servizio richiedente riceve i token. Quando il servizio richiedente appartiene a qualcuno diverso dal proprietario della casella di posta, l'approvazione consegna a tale terza parte un token. Una volta ottenuto un token, Il file `.ad/x12.js` legge la casella di posta direttamente tramite 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 Migliori $seleziona Le proiezioni estraggono gli indirizzi del mittente dalla casella di posta in arrivo e gli indirizzi del destinatario dagli elementi inviati: la materia prima per mappare i corrispondenti di una vittima. Si tratta di un accesso "avversario nel mezzo" (AiTM) basato sul consenso anziché sul furto di password: non esiste una credenziale per il phishing nel senso classico del termine, ma solo un codice per ottenere l'approvazione.
Un sistema per l'invio massivo di email e SMS con modelli per la simulazione di identità.
Intorno all'accesso alla cassetta postale si trova un dispositivo di spedizione. Il pacco spedisce file di dati modificabili dall'operatore: elenchi dei mittenti (mittenti.txt, smtps.txt) e un file modello (funzioni.txt) — i cui indirizzi segnaposto sembrano un elenco di candidati per un'impersonificazione: security@apple.com, login-verifica, servizio OAuth, fatturazione e mittenti di notifica dell'account rispetto a un yourdomain.com sostituto l'operatore che sostituisce. Il lato SMS porta un telefonoebook e la configurazione del gateway. Il sistema di invio email elabora gli elenchi di destinatari forniti dall'operatore e li invia tramite i server SMTP configurati.
Per far atterrare i collegamenti, .ad/xu.js and .ad/xq.js crea URL che sfruttano l'ambiguità del parsing degli URL e il tracciamento dei clic. I modelli di spoofing incorporano un'autorità dall'aspetto affidabile prima di un @ quindi il prefisso visibile differisce dall'host reale:
text https://trusted[.]com@ https://trusted[.]com%40 https://trusted[.]com:80@ https://redirect[.]example[.]com/ https://track[.]example[.]com/click? Il framework cattura anche le favicon dei principali consumatori e enterprise fornitori di posta elettronica: una tecnica standard per creare un prompt o una landing page convincente con il marchio del fornitore.
Ricognizione di obiettivi e infrastrutture
Diversi moduli raccolgono il contesto prima dell'invio. .ad/x0.js risolve i nomi tramite DNS-over-HTTPS (dns[.]google/resolve), .ad/xa.js interroga WHOIS (api[.]whois[.]vu), E .ad/x9.js esegue la ricerca del codice GitHub (api[.]github[.]com/search/code?q=) — uno schema coerente con la scoperta di configurazioni di server di posta e credenziali SMTP esposte da utilizzare per alimentare la lista di inoltro. .ad/xs.js interroga l'indice CDX di Wayback Machine.
Comando e controllo
Attraverso l'insieme oscurato, .ad/x4.js fa riferimento all'endpoint dell'operatore:
text http://api[.]nolimitent[.]xyz:4100 L'ospite condivide il suo nessun limite marchio con il nome proprio dell'editore e il : 4100 La porta è il canale di chiamata home del framework. Questo è l'indicatore più duraturo per i difensori: un pacchetto, una workstation di sviluppo o un agente di build che raggiunge api[.]nolimitent[.]xyz ha eseguito questo codice.
Indicatori di compromesso
Gli indicatori seguenti sono quelli su cui un difensore può intervenire: analizzare un file di blocco, bloccare un host o esaminare i log del proxy e del DNS. Gli endpoint Microsoft compaiono perché il framework li sfrutta in modo improprio; non sono di per sé dannosi e non dovrebbero essere bloccati.
| Tipo | Dove | Azione del difensore | |
|---|---|---|---|
nolimit-agent (tutte le versioni da 1.0.299 a 1.0.307) | CONFEZIONE | npm | Grep lockfiles / install logs |
api[.]nolimitent[.]xyz (:4100) | Host C2 | .ad/x4.js | Blocca; cerca nei log DNS + proxy |
.ad/ directory nascosta come destinazione principale/bin | Structure | package.json | Segnale statico nella revisione del registro |
trusted[.]com@ / %40 / :80@ moduli di collegamento | parodia del sito | .ad/xu.js, .ad/xq.js | Ispezione dell'URL di posta/proxy |
Concessione del codice dispositivo + grafico inbox/sentitems read | Comportamento | .ad/x12.js | Accesso a M365 + Revisione del controllo Graph |
Hash dei file acquisiti al momento del triage:
- pacchetto/.ad/x0.js — sha256 e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a
- pacchetto/pacchetto.json — sha256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644
Un segnale del tenant di Microsoft 365 che vale la pena cercare indipendentemente da questo pacchetto: accessi al codice dispositivo riusciti seguiti prontamente da letture del grafico di Cartelle di posta/posta in arrivo and Cartelle/sentimenti di posta, soprattutto da una sessione che l'utente non riconosce.
Attribuzione e comportamento osservato
Ciò che è osservabile rimane separato da chi si cela dietro di esso.
Fatti osservabili: il pacchetto è pubblicato con l'handle nolimit-agent con un indirizzo Gmail non verificato e nessun repository sorgente collegato; il suo pacchetto.json lo descrive come un “mittente di email avanzato” e lo etichetta con il squadra rossa parola chiave; il codice runtime è concentrato in un nascosto e offuscato .a.D/ directory la cui toolchain (offuscatore javascript) è una dipendenza dichiarata; e l'host di chiamata a casa api[.]nolimitent[.]xyz riutilizza il nessun limite marchio. Si tratta di un singolo pacchetto con un unico punto di riferimento infrastrutturale controllato dall'operatore, non di un cluster multi-pacchetto, e non è stata identificata alcuna sovrapposizione con una campagna precedentemente denominata.
Migliori squadra rossa La parola chiave non cambia la classificazione. Gli strumenti di sicurezza offensiva legittimi che offrono funzionalità a doppio uso lo fanno in modo trasparente: codice sorgente leggibile, target forniti dall'operatore e nessuna comunicazione nascosta con server esterni. Questo pacchetto inverte ciascuna di queste proprietà: il suo codice operativo è offuscato e nascosto e comunica con un'infrastruttura fissa dell'operatore anziché con un target fornito dall'utente. È il comportamento, non l'etichetta, a determinare il verdetto, che è di natura malevola.
Qui non viene esplicitato alcun intento. Il post descrive cosa fa il codice — richiede un codice dispositivo, legge una casella di posta tramite Graph, invia email in blocco attraverso i relay configurati, invia un beacon a un host fisso — e non ne dichiara il motivo.
Impatto, tendenze e linee guida per i difensori
Due effetti relativi al momento dell'installazione sono importanti. In primo luogo, qualsiasi sviluppatore o agente CI che installa nolimit-agent porta il framework su quell'host e stabilisce la chiamata a casa api[.]nolimitent[.]xyzIn secondo luogo, la funzionalità di codifica del dispositivo estende la portata oltre l'host di installazione: una casella di posta di Microsoft 365 il cui proprietario viene indotto ad approvare un codice presentato viene letta direttamente tramite Graph, senza che alcuna password transiti mai attraverso la rete.
La tendenza più ampia è quella di internalizzare. Il phishing del codice dispositivo (AiTM) è passato da un'infrastruttura di phishing autonoma a un pacchetto su un registro pubblico — distribuzione da installazione di npm anziché tramite un link inviato via email. Confezionando il kit in questo modo, si sostituisce il problema di hosting e di consegna del link da parte dell'operatore di phishing con la portata di un registro, e si nasconde il codice operativo dietro un hook di installazione pulita e una directory offuscata con un nome di file di configurazione che impedisce una rapida scansione manuale.
Per i difensori:
- Registro e revisione della dipendenza. Trattare un pacco il cui principale/bidone si risolve in una directory nascosta (con prefisso punto) di codice proprietario uniformemente offuscato come ad alto rischio sulla base della sola struttura, indipendentemente dal fatto che l'hook di installazione sembri pulito. La minimizzazione non è offuscamento: il controllo si basa sulla firma del decodificatore di array di stringhe, non sulla lunghezza della riga.
- Protezione di Microsoft 365. Limita il flusso di autorizzazione del codice dispositivo con l'accesso condizionale laddove non sia richiesto a livello operativo; le concessioni del codice dispositivo sono un vettore AiTM noto e raramente sono necessarie per gli utenti interattivi. Verifica gli accessi tramite codice dispositivo seguiti dall'enumerazione immediata delle caselle di posta Graph.
- Rilevamento di rete. Blocca e avvisa su api[.]nolimitent[.]xyzCercalo nei log DNS in uscita e nei log proxy dell'infrastruttura di sviluppo e di compilazione.
- Rilevamento del percorso di posta. Migliori utente@host moduli di spoofing URL (trusted[.]com@…) sono rilevabili nel gateway di posta e nel proxy; segnala i collegamenti il cui componente di autorità precede un @.
Il pacchetto era attivo su npm al momento dell'analisi. Poiché il framework nascosto si estende all'intera linea di versioni pubblicate e all'attuale con i più recenti Il tag (1.0.307) contiene la funzionalità del codice dispositivo, la rimozione dal registro dovrebbe riguardare ogni versione, non solo una singola versione precedente.




