DeviceDoor npm-pakket dat een Microsoft 365-apparaatcode-phishingframework verspreidt

DeviceDoor: een openbaar npm-pakket dat een framework bevat voor phishing en bulkmail via Microsoft 365-apparaatcodes.

TL; DR

nolimit-agent is een npm-pakket waarvan de gepubliceerde versies — 1.0.299 door middel van 1.0.307, uitgebracht over een periode van vier dagen, van 26 juni 2026 tot 29 juni 2026 — elk met een compleet framework voor phishing en bulkmail in een verborgen, volledig geobfusceerde map. In elke versie verwijst het hoofditem naar .ad/x0.js, een van de circa 86 bestanden in een map met een puntnotatie, die ongeveer 4,200 string-array-blobs bevat die door JavaScript-obfuscators worden ondersteund; de installatiehook en de indeling van de entry zijn overal identiek.

Achter de verhulling schuilt een Microsoft 365 OAuth-apparaatcode-flow (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode) die, zodra een code is goedgekeurd, de Outlook-inbox en verzonden items van het slachtoffer leest via de Microsoft Graph API; een bulk-SMTP- en sms-verzendengine die wordt aangestuurd door door de operator aangeleverde ontvangerslijsten; berichttemplates voor merkimitatie; het construeren van open-redirect-links; en verkenning via DNS-over-HTTPS, WHOIS en GitHub-codezoekopdrachten. Runtime-verkeersbakens naar de infrastructuur van de operator op api[.]nolimitent[.]xyz:4100.

Betrokken: iedereen die een versie van het pakket installeert, en iedereen die Microsoft 365-mailbox waarvan de eigenaar een apparaatcode goedkeurt die via het apparaat wordt aangeboden. De meest recente versie, 1.0.307Dit is de meest recente tag en beschikt over dezelfde mogelijkheden voor apparaatcode-mailboxen — de kwaadaardige code is niet beperkt tot één eerdere versie.

ernst: kritisch. Betrokken ecosysteem: NPMDe belangrijkste indicator om als eerste naar te zoeken: de host api[.]nolimitent[.]xyz.

De aanval: hoe werkt het?

Een onschuldig ogende schaal om een ​​verborgen lading.

De verpakking heeft een gewone buitenkant. package.json verklaart een na installatie haak - 

text postinstall: node scripts/postinstall.js 

— en bij inspectie scripts/postinstall.js is onschadelijk: het installeert een Windows-opdrachtshim en sluit af. De hook is niet waar het gedrag zich voordoet. hoofd- en bak beide velden wijzen naar .advertentie/, een directory waarvan de punt aan het begin voorkomt dat deze in een gewone directory terechtkomt. ls uitvoer, waarvan de inhoud uniform machinaal is versleuteld. De statische scanner telde ongeveer 4,293 gecodeerde payload-reeksen verspreid over de .advertentie/ module set; javascript-obfuscator is een gedeclareerde ontwikkelingsafhankelijkheid, die overeenkomt met de string-array-rotatievorm van de gebundelde bestanden.

De splitsing is het eerste signaal dat de moeite waard is om te benoemen: de installatiehook die een reviewer zou onderzoeken is schoon, terwijl de operationele code zich in een andere map bevindt, verborgen en versleuteld, en alleen toegankelijk is wanneer het geëxporteerde entry point van het pakket wordt uitgevoerd.

Toegang tot de Microsoft 365-apparaatcode voor de mailbox

De module .ad/x12.js Het bevat de belangrijkste functionaliteit van het framework. Het stuurt de Microsoft 365 OAuth 2.0-apparaatautorisatie aan:

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

De apparaatcode-grant is een legitieme Microsoft-workflow, ontworpen voor apparaten met beperkte invoermogelijkheden: een service vraagt ​​om een ​​code en de gebruiker typt die code in. microsoft.com/apparaatlogin` op een tweede apparaat en keurt goed, waarna de aanvragende service tokens ontvangt. Wanneer de aanvragende service van iemand anders is dan de eigenaar van de mailbox, wordt er bij goedkeuring een token aan die derde partij verstrekt. Zodra een token is verkregen, `.ad/x12.js` leest de mailbox rechtstreeks via 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 $selecteer Projecties halen afzenderadressen uit de inbox en ontvangeradressen uit verzonden items – de basis voor het in kaart brengen van de correspondentie van een slachtoffer. Dit is toegang via een tussenpersoon (AiTM) op basis van toestemming in plaats van via het vastleggen van wachtwoorden: er zijn geen inloggegevens om te phishen in de klassieke zin, alleen een code om toegang te krijgen.

Een bulkmail- en sms-engine met sjablonen voor identiteitsvervalsing.

Rond de brievenbus bevindt zich een mailer. Het pakket bevat door de gebruiker bewerkbare gegevensbestanden — afzenderlijsten (afzenders.txt, smtps.txt) en een sjabloonbestand (functies.txt) — waarvan de placeholder-adressen lijken op een castinglijst voor imitaties: security@apple.com, login-verificatie, OAuth-service, facturering en accountnotificatie-afzenders tegen een yourdomain.com De invallende operator vervangt hem. De sms-kant voert een telefoongesprek.ebook en gatewayconfiguratie. De mailserver doorloopt de door de operator aangeleverde ontvangerslijsten en verzendt de e-mails via geconfigureerde SMTP-relays.

Om verbindingen te leggen, .ad/xu.js en .ad/xq.js Bouw URL's die misbruik maken van de ambiguïteit in URL-parsing en kliktracking. De vervalsingspatronen plaatsen een betrouwbaar ogende autoriteit vóór een @ Het zichtbare voorvoegsel verschilt dus van de werkelijke host:

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

Het framework verzamelt ook favicons van grote consumentenwebsites en enterprise E-mailproviders — een standaardtechniek voor het weergeven van een overtuigende prompt of landingspagina met de huisstijl van de provider.

Doelwit- en infrastructuurverkenning

Verschillende modules verzamelen context voordat ze gegevens verzenden. .ad/x0.js lost namen op via DNS-over-HTTPS (dns[.]google/resolve), .ad/xa.js WHOIS-zoekopdrachten (api[.]whois[.]vu), En .ad/x9.js voert een codezoekopdracht uit op GitHub (api[.]github[.]com/search/code?q=) — een patroon dat consistent is met het ontdekken van blootgestelde configuratiegegevens van de mailserver en SMTP-gegevens om de relaylijst te vullen. .ad/xs.js Vraagt ​​de CDX-index van de Wayback Machine op.

Commando en controle

Overal in de onduidelijke omgeving, .ad/x4.js verwijst naar het operator-eindpunt:

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

De gastheer deelt zijn onbeperkt merk met de eigen naamgeving van de uitgever, en de : 4100 De poort is het communicatiekanaal van het framework. Dit is de meest betrouwbare indicator voor verdedigers: een pakket, een ontwikkelaarswerkstation of een buildagent die verbinding maakt met de server. api[.]nolimitent[.]xyz heeft deze code uitgevoerd.

Indicatoren van compromissen

De onderstaande indicatoren zijn de indicatoren waarop een verdediger actie kan ondernemen: een lockfile doorzoeken, een host blokkeren of proxy- en DNS-logboeken doorzoeken. Microsoft-eindpunten verschijnen omdat het framework er misbruik van maakt; ze zijn zelf niet kwaadaardig en zouden niet geblokkeerd moeten worden.

Indicator Type Waar Verdedigingsactie
nolimit-agent (alle versies 1.0.299–1.0.307) Pakket NPM Grep lockfiles / install logs
api[.]nolimitent[.]xyz (:4100) C2-host .ad/x4.js Blokkeren; DNS- en proxylogboeken doorzoeken
.ad/ verborgen map als doelmap voor main/bin Structuur package.json Statisch signaal bij registerbeoordeling
trusted[.]com@ / %40 / :80@ linkformulieren URL-spoofing .ad/xu.js, .ad/xq.js E-mail-/proxy-URL-inspectie
Toekenning van apparaatcode + Grafiek inbox/sentitems dit artikel lezen Gedrag .ad/x12.js M365-aanmelding + Graph-auditcontrole

Bestandshashes vastgelegd tijdens triage:

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

  • pakket/pakket.json — sha256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644

Een Microsoft 365-tenantsignaal dat de moeite waard is om onafhankelijk van dit pakket te onderzoeken: succesvolle aanmeldingen met apparaatcode, direct gevolgd door Graph-lezingen van mailMappen/inbox en mailMappen/verzonden itemsvooral vanuit een sessie die de gebruiker niet herkent.

Toeschrijving en waargenomen gedrag

Wat waarneembaar is, staat los van wie erachter zit.

Waarneembare feiten: het pakket is gepubliceerd onder de handle geen limietagent met een niet-geverifieerd Gmail-adres en zonder gekoppelde bronrepository; package.json beschrijft het als een "geavanceerde e-mailverzender" en voegt er de volgende tags aan toe: rood team trefwoord; de runtimecode is geconcentreerd in een verborgen, geobfusceerde .advertentie/ map waarvan de toolchain (javascript-obfuscator) is een gedeclareerde afhankelijkheid; en de call-home host api[.]nolimitent[.]xyz hergebruikt de onbeperkt merk. Dit is een enkel pakket met één door de operator beheerd infrastructuurpunt — geen cluster van meerdere pakketten, en er is geen overlap met een eerder genoemde campagne vastgesteld.

De rood team Het trefwoord verandert de classificatie niet. Legitieme offensieve beveiligingssoftware met een dubbele functionaliteit doet dit transparant: leesbare broncode, door de operator aangeleverde doelen en geen verborgen verbinding met de server. Dit pakket keert al deze eigenschappen om: de operationele code is versleuteld en verborgen, en het maakt verbinding met een vaste infrastructuur van de operator in plaats van een door de gebruiker opgegeven doel. Het gedrag, niet het label, bepaalt het oordeel, dat is kwaadaardig.

De intentie wordt hier niet expliciet vermeld. Het bericht beschrijft wat de code doet — een apparaatcode opvragen, een mailbox via Graph uitlezen, bulkmail verzenden via geconfigureerde relays, een beacon naar een vaste host sturen — maar laat het motief onvermeld.

Twee effecten tijdens de installatie zijn van belang. Ten eerste, elke ontwikkelaar of CI-agent die installeert geen limietagent brengt het framework naar die host en legt de verbinding met de server tot stand. api[.]nolimitent[.]xyzTen tweede reikt de mogelijkheid om apparaatcodes te gebruiken verder dan de host waarop de installatie plaatsvindt: een Microsoft 365-mailbox waarvan de eigenaar wordt gevraagd een aangeboden code goed te keuren, wordt rechtstreeks via Graph gelezen, zonder dat er ooit een wachtwoord wordt verzonden.

De bredere trend is er een die we moeten internaliseren. Apparaatcode-phishing (AiTM) is verschoven van een op zichzelf staande phishinginfrastructuur naar een pakket op een openbaar register – distributie via npm installeren In plaats van via een link in een e-mail. Door de kit op deze manier te verpakken, ruilt de phishing-operator het hosting- en linkleveringsprobleem in voor het bereik van een register, en verbergt de operationele code achter een schone installatiehook en een versleutelde map met een puntbestandnaam die een snelle handmatige inspectie onmogelijk maakt.

Voor verdedigers:

  • Register- en afhankelijkheidscontrole. Behandel een pakket waarvan hoofd-/bak Dit resulteert in een verborgen (met een punt ervoor) map met uniform geobfusceerde eigen code, wat op basis van de structuur alleen al als een hoog risico wordt beschouwd, ongeacht of de installatiehook er netjes uitziet. Minificatie is geen obfuscatie — de controle is gebaseerd op de signatuur van de string-array-decoder, niet op de lengte van de regel.
  • Beveiliging van Microsoft 365. Beperk de autorisatiestroom voor apparaatcodes met behulp van voorwaardelijke toegang waar dit operationeel niet nodig is; het verkrijgen van apparaatcodes is een bekende AiTM-vector en wordt zelden door interactieve gebruikers gebruikt. Controleer aanmeldingen met apparaatcodes, gevolgd door onmiddellijke enumeratie van de Graph-mailbox.
  • Netwerkdetectie. Blokkeren en waarschuwen op api[.]nolimitent[.]xyzDoorzoek de uitgaande DNS- en proxylogs in de ontwikkelaars- en build-infrastructuur.
  • Detectie van het e-mailpad. De gebruiker@host URL-spoofformulieren (trusted[.]com@…) zijn detecteerbaar bij de mailgateway en proxy; markeer links waarvan het autoriteitscomponent voorafgaat aan een @.

Het pakket was op het moment van analyse beschikbaar op npm. Omdat het verborgen framework de volledige gepubliceerde versie en de huidige versie omvat. laatste De tag (1.0.307) bevat de mogelijkheid voor apparaatcode; de ​​verwijdering uit het register moet elke versie omvatten, niet slechts één oudere versie. 

sca-tools-software-compositie-analyse-tools
Prioriteer, herstel en beveilig uw softwarerisico's
Maak nu een gratis account aan.
Geen kredietkaart nodig.

Beveilig uw softwareontwikkeling en -levering

met Xygeni-productsuite