Pachetul DeviceDoor npm care livrează un framework de phishing cu cod de dispozitiv Microsoft 365

DeviceDoor: un pachet npm public care livrează un framework Microsoft 365 de phishing și e-mail în masă bazat pe codul dispozitivului

TL; DR

nolimit-agent este un pachet npm ale cărui versiuni publicate — 1.0.299 prin 1.0.307, lansate pe parcursul a patru zile, între 26.06.2026 și 29.06.2026 — fiecare conține un cadru complet pentru phishing și e-mailuri în masă într-un director ascuns, complet ofuscat. În fiecare versiune, intrarea principală se rezolvă în .ad/x0.js, unul dintre cele ~86 de fișiere dintr-un folder numit dotfile care conține aproximativ 4,200 de bulete de tip javascript-obfuscator string-array; hook-ul de instalare și aspectul intrării sunt identice pe toată linia.

În spatele ofuscării se află o Fluxul de cod al dispozitivului Microsoft 365 OAuth (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode) care, odată ce un cod este aprobat, citește inboxul Outlook al victimei și elementele trimise prin intermediul API-ului Microsoft Graph; un motor de trimitere SMTP și SMS în bloc, condus de liste de destinatari furnizate de operator; șabloane de mesaje de uzurpare a identității mărcii; construcția de linkuri de redirecționare deschisă; și recunoaștere prin DNS-over-HTTPS, WHOIS și căutare de cod GitHub. Beacon-uri de trafic în timpul rulării către infrastructura operatorului la api[.]nolimitent[.]xyz:4100.

Afectați: oricine instalează orice versiune a pachetului și orice Cutie poștală Microsoft 365 al cărui proprietar aprobă un cod de dispozitiv prezentat prin intermediul său. Cea mai recentă versiune, 1.0.307, este cea mai recentă etichetă actuală și are aceeași capacitate de cutie poștală cu cod de dispozitiv — codul rău intenționat nu este limitat la o singură versiune anterioară.

Severitate: criticEcosistem afectat: NPMSingurul indicator de căutat mai întâi: gazda api[.]nolimitent[.]xyz.

Atacul: cum funcționează

O cochilie benignă peste o sarcină utilă ascunsă

Pachetul prezintă o suprafață obișnuită. pachet.json declară a postinstalare cârlig – 

text postinstall: node scripts/postinstall.js 

— și la inspecție scripturi/postinstalare.js este inofensiv: instalează o comandă Windows shim și se închide. Comportamentul nu se află în hook. principal și bin ambele câmpuri indică spre .ad/, un director al cărui punct inițial îl împiedică să fie accesat în mod casual ls ieșire și al cărei conținut este uniform ofuscat de mașină. Scanerul static a numărat ~4,293 de intervale de sarcină utilă codificate pe .ad/ set de module; javascript-obfuscator este o dependență de dezvoltare declarată, care corespunde formei de rotație a matricei de șiruri a fișierelor incluse în pachet.

Divizarea este primul semnal care merită menționat: hook-ul de instalare pe care un recenzent l-ar examina este curat, în timp ce codul operațional se află la un director distanță, ascuns și ofuscat, accesibil doar atunci când punctul de intrare exportat al pachetului rulează.

Acces la cutia poștală prin cod de dispozitiv Microsoft 365

Modulul .ad/x12.js Poartă cea mai importantă capacitate a cadrului de lucru. Acesta determină acordarea de autorizare a dispozitivelor Microsoft 365 OAuth 2.0:

text POST login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode 

Acordarea codului dispozitivului este un flux Microsoft legitim conceput pentru dispozitive cu restricții de intrare: un serviciu solicită un cod, utilizatorul introduce codul respectiv în microsoft.com/devicelogin` pe un al doilea dispozitiv și aprobă, iar serviciul solicitant primește token-uri. Când serviciul solicitant aparține unei alte persoane decât proprietarul cutiei poștale, aprobarea înmânează acelei terțe părți un token. Odată ce un token este obținut, `.ad/x12.js` citește cutia poștală direct prin 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 

$selectați Proiecțiile extrag adresele expeditorilor din inbox și adresele destinatarilor din mesajele trimise — materia primă pentru cartografierea corespondenților unei victime. Acesta este accesul de tip adversar-in-the-middle (AiTM) prin consimțământ, mai degrabă decât prin capturarea parolei: nu există nicio acreditare pentru phishing în sensul clasic, ci doar un cod pentru a obține aprobarea.

Un motor de e-mailuri și SMS-uri în masă cu șabloane de uzurpare a identității

În jurul cutiei poștale se află un plic. Pachetul expediază fișiere de date editabile de către operator — liste de expeditori (expeditori.txt, smts.txt) și un fișier șablon (funcții.txt) — ale căror adrese substitutive sunt interpretate ca o foaie de distribuție pentru uzurpare de identitate: security@apple.com, login-verificare, serviciu OAuth, facturare și expeditori de notificări de cont împotriva unui yourdomain.com operatorul înlocuiește. Partea SMS poartă un telefonebook și configurarea gateway-ului. Programul de e-mail iterează listele de destinatari furnizate de operator și trimite prin intermediul releelor ​​SMTP configurate.

Pentru a face ca linkurile să aterizeze, .ad/xu.js și .ad/xq.js construiți adrese URL care exploatează ambiguitatea analizei URL și urmărirea clicurilor. Modelele false încorporează o autoritate aparent de încredere înaintea unui @ deci prefixul vizibil diferă de cel al gazdei reale:

text https://trusted[.]com@      https://trusted[.]com%40      https://trusted[.]com:80@ https://redirect[.]example[.]com/      https://track[.]example[.]com/click? 

Cadrul preia, de asemenea, favicon-uri de la principalii consumatori și enterprise furnizori de e-mail — o tehnică obișnuită pentru redarea unei solicitări sau a unei pagini de destinație convingătoare, cu marca furnizorului.

Recunoașterea țintelor și a infrastructurii

Mai multe module adună context înainte de trimitere. .ad/x0.js rezolvă numele prin DNS-over-HTTPS (dns[.]google/resolve), .ad/xa.js interogări WHOIS (api[.]whois[.]vu), Şi .ad/x9.js rulează căutarea de cod GitHub (api[.]github[.]com/căutare/cod?q=) — un model consistent cu descoperirea configurației serverului de mail expus și a acreditărilor SMTP pentru alimentarea listei de retransmitere. .ad/xs.js interoghează indicele CDX al Wayback Machine.

Comanda si control

Peste mulțimea ofuscată, .ad/x4.js face referire la punctul final al operatorului:

text http://api[.]nolimitent[.]xyz:4100 

Gazda își împărtășește nelimitat marcă cu numele propriu al editorului și : 4100 portul este canalul de apelare al framework-ului. Acesta este cel mai durabil indicator pentru apărători: un pachet, o stație de lucru a dezvoltatorului sau un agent de compilare care ajunge la api[.]nolimitent[.]xyz a rulat acest cod.

Indicatori de compromis

Indicatorii de mai jos sunt cei asupra cărora un apărător poate acționa - grep un fișier de blocare, blochează o gazdă sau caută proxy și jurnalele DNS. Punctele finale Microsoft apar deoarece framework-ul le folosește în mod abuziv; acestea nu sunt în sine rău intenționate și nu ar trebui blocate.

Indicator Tip Unde Acțiunea apărătorului
nolimit-agent (toate versiunile 1.0.299–1.0.307) Pachet NPM Fișiere de blocare Grep / jurnale de instalare
api[.]nolimitent[.]xyz (:4100) Gazdă C2 .ad/x4.js Blocare; căutare jurnal DNS + proxy
.ad/ director ascuns ca țintă principală/bin Structure package.json Semnal static în revizuirea registrului
trusted[.]com@ / %40 / :80@ formulare de link URL fals .ad/xu.js, .ad/xq.js Inspecția URL-ului pentru e-mail/proxy
Acordare cod dispozitiv + Grafic inbox/sentitems citit Comportament .ad/x12.js Conectare M365 + Revizuire audit Graph

Coduri hash de fișiere capturate la triaj:

  • pachet/.ad/x0.js — sha256 e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a

  • pachet/pachet.json — sha256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644

Un semnal de chiriaș Microsoft 365 care merită căutat independent de acest pachet: conectări reușite la codul dispozitivului, urmate imediat de citiri grafice ale acestuia. Foldere/inbox de e-mail și Foldere/sentimente de e-mail, mai ales dintr-o sesiune pe care utilizatorul nu o recunoaște.

Atribuire și comportament observat

Ceea ce este observabil rămâne separat de cine se află în spatele lui.

Fapte observabile: pachetul este publicat sub handle agent fără limită cu o adresă Gmail neverificată și fără un depozit sursă conectat; pachet.json îl descrie ca un „expeditor avansat de e-mailuri” și îl etichetează cu echipa rosie cuvânt cheie; codul de execuție este concentrat într-un spațiu ascuns și ofuscat .ad/ director al cărui lanț de instrumente (javascript-obfuscator) este o dependență declarată; și gazda call-home api[.]nolimitent[.]xyz reutilizează nelimitat marcă. Acesta este un singur pachet cu un reper de infrastructură controlat de operator — nu un cluster cu mai multe pachete și nu a fost identificată nicio suprapunere cu o campanie denumită anterior.

echipa rosie Cuvântul cheie nu modifică clasificarea. Instrumentele legitime de securitate ofensivă care oferă capabilități cu dublă utilizare fac acest lucru în mod transparent: sursă lizibilă, ținte furnizate de operator și fără apeluri de acces ascunse. Acest pachet inversează fiecare dintre aceste proprietăți - codul său operațional este ofuscat și ascuns și semnalizează către infrastructura fixă ​​a operatorului, mai degrabă decât către o țintă furnizată de utilizator. Comportamentul, nu eticheta, guvernează verdictul, care este rău intenționat.

Intenția nu este afirmată aici. Postarea descrie ce face codul — solicită un cod de dispozitiv, citește o cutie poștală prin Graph, trimite e-mailuri în bloc prin relee configurate, transmite semnal către o gazdă fixă ​​— și nu menționează motivul.

Impact, tendințe și îndrumări pentru apărare

Două efecte legate de timpul de instalare sunt importante. În primul rând, orice dezvoltator sau agent CI care instalează agent fără limită aduce framework-ul pe gazda respectivă și stabilește apelul către api[.]nolimitent[.]xyzÎn al doilea rând, capacitatea de cod al dispozitivului se extinde dincolo de gazda care instalează: o cutie poștală Microsoft 365 al cărei proprietar este determinat să aprobe un cod prezentat este citită direct prin Graph, fără ca nicio parolă să treacă vreodată prin fir.

Tendința mai largă este cea de internalizare. Phishing-ul bazat pe codul dispozitivului (AiTM) a trecut de la o infrastructură de phishing independentă la un pachet dintr-un registru public - distribuție prin npm install mai degrabă decât printr-un link trimis prin e-mail. Ambalarea kitului în acest fel schimbă problema de găzduire și livrare a linkurilor operatorului de phishing cu acoperirea unui registru și ascunde codul operațional în spatele unui hook de instalare curat și a unui director ofuscat denumit dotfile, care împiedică o parcurgere manuală rapidă.

Pentru apărători:

  • Revizuirea registrului și a dependențelor. Tratați un colet al cărui principal/bin se rezolvă într-un director ascuns (cu prefix punct) de cod first-party uniform ofuscat, ca fiind de risc ridicat doar din punct de vedere structural, independent de dacă hook-ul de instalare arată curat. Minimizarea nu este ofuscare - poartă pe semnătura decodorului de matrice de șiruri, nu pe lungimea liniei.
  • Întărirea securității Microsoft 365. Restricționați fluxul de autorizare a codului dispozitivului cu acces condiționat acolo unde nu este necesar din punct de vedere operațional; acordările de cod dispozitiv sunt un vector AiTM cunoscut și sunt rareori necesare utilizatorilor interactivi. Verificați conectările la cod dispozitiv urmate de enumerarea imediată a cutiei poștale Graph.
  • Detectarea rețelei. Blocare și alertare activate api[.]nolimitent[.]xyzCăutați jurnalele DNS și proxy de ieșire în infrastructura dezvoltatorului și a construcției.
  • Detectarea căii de e-mail. utilizator@gazdă Formulare URL-spoof (de încredere[.]com@…) sunt detectabile la gateway-ul de e-mail și la proxy; semnalează link-urile a căror componentă de autoritate precede o @.

Pachetul era disponibil pe npm în momentul analizei. Deoarece framework-ul ascuns acoperă întreaga linie de versiuni publicate și versiunea curentă Ultimele Eticheta (1.0.307) are capacitatea de a declanșa codul dispozitivului, eliminarea registrului ar trebui să acopere fiecare versiune, nu doar o singură versiune anterioară. 

sca-tools-software-instrumente-de-analiză-a-compoziției
Prioritizați, remediați și securizați riscurile software
Obține-ți contul gratuit.
Nu este necesar un card de credit.

Securizează-ți dezvoltarea și livrarea de software

cu suita de produse Xygeni