- En angriber kompromitterede npm-kontoen tilhørende den primære vedligeholder af Axios og udgav version 1.14.1 og 0.30.4 med en fantomafhængighed, plain-crypto-js, som implementerede en cross-platform RAT under installationen.
- Malwaren kontaktede en C2-server (sfrclak[.]com) og downloadede specifikke nyttelast til Windows, macOS og Linux, udførte systemrekognoscering, vedligeholdt periodiske beacons og i nogle tilfælde etablerede persistens.
- Angrebet, som Google og andre forskere tilskriver den nordkoreanske aktør UNC1069, kombinerede et eksponeringsvindue på omkring tre timer med en sofistikeret social engineering-kampagne mod vedligeholderen for at stjæle deres legitimationsoplysninger.
- Organisationer, der var i stand til at installere de berørte versioner, skal forpligte sig til at handle, søge efter RAT-artefakter, rotere legitimationsoplysninger, fastlåse sikre versioner af Axios og styrke deres forsyningskæde, CI/CD og afhængighedsstyringskontroller.
JavaScript-udviklingsfællesskabet har netop oplevet en af de skræmmende situationer, der får én til at genoverveje, hvor meget man stoler på sine afhængigheder, som det ses ved sårbarhedsproblemer i biblioteker . Axios, et af de mest anvendte HTTP-biblioteker i økosystemet, blev manipuleret på npm til at distribuere en fjernadgangstrojan (RAT) gennem tilsyneladende legitime versioner. Hændelsen varede kun et par timer, men den har gjort det klart, at softwareforsyningskæden hænger i en meget tyndere tråd, end mange troede.
Det alvorlige problem er ikke blot, at angriberne formåede at snige malware ind i en pakke, der downloades titusindvis eller hundredvis af millioner gange om ugen. Det virkelige problem er, at de gjorde det ved at kapre den primære vedligeholders npm-konto og udgive "officielle" versioner, der så normale ud og ikke rørte en eneste linje af Axios' kildekode . Al den ondsindede adfærd lå i en fantomafhængighed, der var specifikt designet til angrebet.
Hvordan Axios' engagement i npm opstod
For at forstå omfanget af hændelsen, er vi nødt til at starte med indgangspunktet. Angriberen formåede at tage kontrol over npm-kontoen tilhørende "jasonsaayman", den primære vedligeholder af Axios, og ændrede den tilhørende e-mailadresse til en under deres kontrol , hostet på Proton Mail. Fra det øjeblik havde de frie hænder til at udgive nye versioner af pakken, som om de var vedligeholderen.
Ved hjælp af disse loginoplysninger uploadede han to ondsindede versioner af Axios: 1.14.1 og 0.30.4 , der dækkede begge projektets hovedgrene. Uploadene blev foretaget med kun 39 minutters mellemrum og blev ifølge StepSecuritys analyse foretaget direkte fra npm ved hjælp af en klassisk langlivet token, der fuldstændig omgik den sædvanlige CI/CD-pipeline baseret på GitHub Actions.
Atten timer før det sidste angreb havde aktøren allerede udgivet en "ren" version relateret til den ondsindede afhængighed i npm-registreringsdatabasen . Dette indledende trin tjente til at generere en historik og forhindre visse automatiserede kontroller i at blive udløst, når en helt ny pakke dukkede op på tidspunktet for angrebet.
Det slående er, at angriberne ikke ændrede Axios' kildekode eller foretog nogen synlige ændringer i GitHub-arkivet . Faktisk havde version 1.14.1 og 0.30.4 ingen tilsvarende commits eller tags på GitHub; de eksisterede kun på npm. Den vigtigste forskel lå i pakkens afhængighedsfil, som blev offentliggjort i registreringsdatabasen.
Under normale omstændigheder deklarerer Axios kun tre afhængigheder: follow-redirects, form-data og proxy-from-env . I de kompromitterede versioner opstod der dog en fjerde afhængighed, en der tidligere ikke eksisterede i projektet: plain-crypto-js, version 4.2.1. Dette fantombibliotek blev ikke brugt nogen steder i Axios' kodebase, men det inkluderede et post-installationsscript, der kørte automatisk, når pakken blev installeret med npm, pnpm eller lignende værktøjer.
plain-crypto-js: den fantomafhængighed, der er implementeret af RAT
Nøglen til angrebet lå i denne yderligere afhængighed. plain-crypto-js blev udgivet på npm af en bruger ved navn "nrwise", også med en Proton Mail-e-mailadresse, og dens eneste formål var at udføre et forvirret postinstallationsscript i Node.js (setup.js) . Scriptet fungerede som en dropper, det vil sige som det indledende installationsprogram til malwarens anden fase.
Da Axios blev installeret i en af dens forgiftede versioner, udløste npm-livscyklussen efter installationen automatisk plain-crypto-js-koden uden at udvikleren krævede nogen særlig handling . Dropperen forbandt til en kommando- og kontrolserver (C2) aktiv i sfrclakcom-domænet, lyttede på port 8000 og downloadede en nyttelast specifikt for operativsystemet på den berørte maskine. Denne adfærd kan identificeres gennem netværkstrafikanalyse.
Forskere hos StepSecurity og andre analyseteams beskriver en meget forsigtig adfærd. Efter at have udført den ondsindede nyttelast fjernede dropperen sine egne spor: den slettede postinstall-scriptet, erstattede package.json-filen med en "ren" version og efterlod en node_modules-fil, der ved første øjekast virkede harmløs . På denne måde fandt en efterfølgende manuel inspektion ikke den ondsindede kode direkte i Axios.
For at identificere manipulationen var det eneste pålidelige spor i låsefilerne (package-lock.json, pnpm-lock.yaml, yarn.lock) og tilstedeværelsen af specifikke versioner: axios 1.14.1 eller 0.30.4 og plain-crypto-js 4.2.1, foruden to versioner af den pakke med mellemnumre (4.2.0, 4.2.2), der er linket sammen i nogle analyser. Socket opdagede senere, at den samme malware også blev distribueret gennem pakkerne @shadanai/openclaw (forskellige versioner 2026.3.xx) og @qqbrowser/openclaw-qbot (0.0.130), og sikkerhedsteknikker som honeypots kan også hjælpe med at identificere lignende kampagner.
RAT på tværs af platforme: Windows, macOS og Linux i rampelyset
Når setup.js-scriptet var udført, fungerede det som en orkestrator, der var i stand til at detektere operativsystemet og følge en platformspecifik angrebssti . Kampagnen var tydeligvis forberedt på forhånd: ifølge StepSecurity havde angriberne tre separate nyttelaster prækompileret, en for hvert system.
På macOS-systemer startede efterinstallationsprocessen en AppleScript, der downloadede en trojaniseret binær fil fra sfrclakcom:8000-serveren . Denne binære fil blev gemt i /Library/Caches/com.apple.act.mond-stien, dens tilladelser blev justeret for at gøre den eksekverbar, og endelig blev den startet i baggrunden ved hjælp af /bin/zsh. Da RAT'en kørte, blev selve AppleScript'en slettet for yderligere at komplicere den retsmedicinske analyse.
På Windows-maskiner lokaliserede malwaren systemets PowerShell-binære fil, kopierede den til %PROGRAMDATA%\wt.exe for at skjule den som Windows-terminalen og genererede en midlertidig VBScript . Denne VBScript kontaktede derefter C2-serveren for at downloade et yderligere PowerShell RAT-script, udførte det og slettede derefter den downloadede fil. Desuden oprettede Windows-varianten filen %PROGRAMDATA%\system.bat med en downloadrutine, der tillod malwaren at hente sig selv ved hvert login og tilføjede en udførelsesnøgle til Windows-registreringsdatabasen for at sikre persistens.
På Linux og andre Unix-lignende systemer udover macOS brugte dropperen Node.js's execSync til at starte en shell-kommando, der downloadede et Python-script fra sfrclakcom, gemte det som /tmp/ld.py og udførte det med nohup for at holde det kørende i baggrunden . I modsætning til Windows udviste denne variant ikke en robust persistensmekanisme, hvilket tyder på en hurtigere dataeksfiltreringsorienteret tilgang eller lejlighedsvis implementering af persistens via efterfølgende kommandoer.
SafeDep og Elastic Security Labs analyserede nyttelasterne på andet niveau og konkluderede, at RAT'erne til macOS (C++ Mach-O binær) og Linux (Python-script) delte det samme kommandosæt, C2-protokol, meddelelsesformat og operationelle adfærd . Denne type analyse er typisk afhængig af scanningstjenester som VirusTotal , som letter korrelationen af prøver og IOC'er.
I alle tilfælde udførte hver kompromitteret vært en øjeblikkelig systemrekognoscering: brugermapper, drevrødder, aktive processer og andre metadata . Disse oplysninger blev sendt til kommando- og kontrolserveren, og agenten opretholdt en beacon-løkke på cirka 60 sekunder og ventede på nye instruktioner, herunder udførelse af yderligere scripts eller indsprøjtning af binære filer i hukommelsen.
Eksponeringsvindue, mål og tilskrivning til Nordkorea
De ondsindede versioner af Axios var tilgængelige på npm i cirka tre timer i en omhyggeligt valgt tidsramme. De kompromitterede pakker blev offentliggjort lige før midnat søndag (et tidspunkt, der maksimerede forsvarernes reaktionstid), og hændelsen blev inddæmmet tidligt mandag morgen , efter at sikkerhedsfirmaer havde advaret myndighederne om den unormale adfærd.
I løbet af den relativt korte periode registrerede Huntress mindst 135 systemer, der oprettede forbindelse til angriberens server . I betragtning af at Axios registrerer mere end 80-100 millioner downloads om ugen (ifølge forskellige kilder endda mere end 300 millioner i nogle perioder), repræsenterer dette tal sandsynligvis kun toppen af isbjerget, begrænset til de systemer, der kommer til de analysefirmaers opmærksomhed, som har offentliggjort deres data.
Google tilskrev, gennem sit Threat Intelligence-team, angrebet til en formodet nordkoreansk aktør mærket UNC1069 . Elastic Security Labs forstærkede denne hypotese ved at finde en stærk lighed mellem RAT leveret på macOS og WAVESHAPER, en C++-bagdør opdaget af Mandiant og også knyttet til den samme trusselsgruppe.
Google-analytikere understregede, at nordkoreanske grupper har specialiseret sig i angreb på forsyningskæden og tyveri af kryptovaluta i årevis . Mønsteret er ensartet: kompromittering af udviklingsinfrastruktur, udbredte biblioteker eller pålidelig software for derefter at bevæge sig sidelæns mod mål, der administrerer værdifulde aktiver, private nøgler eller legitimationsoplysninger.
Flere rapporter fremhævede også, at modereringen og designet af angrebet indikerede et velkoordineret team : tre parallelle implementeringer af den samme RAT (PowerShell, C++ og Python), en ensartet C2-protokol, næsten identisk adfærd på tværs af alle varianter og en klar selvrensende strategi for at undgå at efterlade spor. Elastic understregede, at denne konsistens peger på en enkelt udvikler eller en gruppe, der arbejder ud fra et fælles designdokument, langt fra improvisation.
Ud over de rent tekniske aspekter er et af de mest foruroligende punkter i sagen, hvordan den primære vedligeholders npm-konto blev kapret. Axios-manageren forklarede senere selv, at han havde tofaktorgodkendelse aktiveret på næsten alle sine tjenester , og alligevel endte han med at give adgang uden at vide det.
Ifølge den obduktionsanalyse, som teamet delte, udførte angriberne en yderst omfattende social engineering-operation, understøttet af AI-drevne værktøjer, for at vinde deres tillid . De efterlignede grundlæggeren af en virksomhed og kopierede dens visuelle identitet, fotografi og endda virksomhedens branding. De skabte et rigtigt Slack-rum med virksomhedens logo, kanaler med opslag, der angiveligt var synkroniseret med LinkedIn, og endda falske profiler af medarbejdere og andre open source-softwarevedligeholdere.
I dette miljø planlagde de et møde via Microsoft Teams, hvor en hel gruppe fagfolk tilsyneladende deltog . Under mødet simulerede de et teknisk problem og indikerede, at en komponent i deres system var forældet. Vedligeholdelsesteknikeren, der antog, at det var et legitimt krav relateret til selve videokonferenceværktøjet, downloadede og installerede den foreslåede fil.
Den fil var faktisk den fjernadgangstrojaner, der tillod angriberne at skifte til offerets legitimationsoplysninger og i sidste ende tage kontrol over den npm-konto, der blev brugt til at udgive Axios . Hele processen var så velorganiseret med så mange troværdige detaljer, at offeret beskrev den som "perfekt koordineret, professionel og fuldstændig overbevisende".
Dette menneskelige element i hændelsen gør det klart, at selv tekniske foranstaltninger som 2FA er utilstrækkelige, når social engineering på højt niveau kombineres med visuel efterligning, deepfakes eller detaljeret kloning af organisationer . Det svageste led er endnu engang menneskelig interaktion.
Indvirkning på organisationer og udviklere, der bruger Axios
Fra et praktisk synspunkt er hovedproblemet at afgøre, hvem der rent faktisk var berørt. Enhver organisation, der installerede [email protected] eller [email protected] i det vindue, hvor de var tilgængelige, bør antage, at den maskine eller pipeline, der udførte installationen, kan være kompromitteret.
Anbefalingerne fra firmaer som StepSecurity, Aikido, Huntress og Elastic er utvetydige. I tilfælde af mistanke er en proaktiv tilgang nødvendig, ikke blot at "slette og geninstallere node_modules ". Den kloge fremgangsmåde er at genopbygge de berørte maskiner eller miljøer fra betroede billeder og omhyggeligt gennemgå CI/CD-loggene for at identificere, hvilke job eller pipelines der kan have udført de kompromitterede versioner.
Derudover er det afgørende at rotere alle legitimationsoplysninger og hemmeligheder, som RAT'en måtte have tilgået fra disse noder : npm-tokens, cloududbydernøgler, pipeline-hemmeligheder, databaselegitimationsoplysninger, SSH-nøgler osv. At lade disse legitimationsoplysninger være i omløb efter et sådant angreb åbner døren for lydløs lateral bevægelse.
På et teknisk niveau bør teams gennemgå deres låsefiler (package-lock.json, pnpm-lock.yaml, yarn.lock) for referencer til de kompromitterede versioner af Axios og plain-crypto-js . Hvis disse elementer findes, er næste skridt at inspicere de berørte systemer for potentielle RAT-artefakter: /Library/Caches/com.apple.act.mond på macOS, %PROGRAMDATA%\wt.exe og %PROGRAMDATA%\system.bat på Windows eller /tmp/ld.py på Linux.
Parallelt hermed anbefales det eksplicit at indstille sikre versioner af Axios, såsom 1.14.0 og 0.30.3, og bruge overrides eller resolutioner for at forhindre transitive afhængigheder i at blive omdannet til uønskede versioner . Blokering af udgående trafik til sfrclakcom-domænet er også en fornuftig inddæmningsforanstaltning, i det mindste mens angrebets fulde omfang analyseres.
Sikkerhedslektioner for softwareforsyningskæden
Axios-hændelsen er ikke en isoleret begivenhed, men endnu et led i en kæde af angreb i forsyningskæden, der inkluderer sager som SolarWinds, Kaseya, 3CX, Polyfill.io og sårbarheder, der udnyttes i Log4j. Kerneideen er altid den samme: at kompromittere en udbredt, betroet komponent for at maksimere rækkevidden i stedet for at forsøge at angribe maskine for maskine.
En af de oftest gentagne erfaringer fra eksperter er, at tillid ikke udelukkende kan afhænge af et biblioteks popularitet eller en vedligeholders omdømme . Hvis udgivelseskanalen (npm-kontoen, CI/CD-pipelinen, byggeinfrastrukturen) kompromitteres, arver alt, der udgives gennem den, denne risiko. Manuel kodegennemgang er heller ikke tilstrækkelig, hvis malware gemmer sig i transitive afhængigheder og sletter sig selv efter udførelse.
Det er også blevet fremhævet, at "standardhastigheden" for afhængighedsopdateringer har en pris i form af angrebsflade . Det er utroligt praktisk altid at implementere den nyeste version automatisk, men det åbner døren for, at en ondsindet opdatering kan sprede sig på få minutter. Nogle organisationer overvejer allerede politikker, såsom at kræve, at en ny version skal have været i økosystemet i en vis periode før implementering, eller at ændringer i kritiske pakker skal gennemgå yderligere manuel gennemgang.
Hvad angår udviklingsinfrastruktur, skal CI/CD-miljøer behandles som meget følsomme aktiver . Enhver RAT, der udføres under afhængighedsinstallation, vil næsten helt sikkert søge pipeline-hemmeligheder og adgang til andre miljøer. Segmentering af disse noder, overvågning af dem nøje og periodisk rotation af deres hemmeligheder er ikke længere en "ideel" anbefaling, men en nødvendighed.
Endelig kræver det at opdage disse typer angreb en kombination af information fra flere kilder: installerede versioner, låsefiler, operativsystemindikatorer for kompromittering og netværkstelemetri . Værktøjer, der genererer og administrerer Software Bill of Materials (SBOM'er), hjælper med hurtigt at spore, hvilke projekter der bruger hvilke pakker, hvilket er afgørende, når massive advarsler som denne udløses.
Hele denne episode med Axios illustrerer, i hvilken grad afhængighedsøkosystemet, uanset hvor modent og konsolideret det end måtte synes, stadig er stærkt afhængigt af tillid og konstant årvågenhed. Et tilsyneladende harmløst bibliotek, der vedligeholdes af en enkelt person, der bliver offer for et veludført social engineering-angreb, kan i løbet af få timer blive en global vektor til implementering af RAT'er på tværs af platforme mod virksomheder, freelancere og organisationer af alle størrelser . Styrkelse af kontrollen omkring udgivelseskonti, pipelines og kritiske afhængigheder er ikke længere en valgfri bedste praksis, men en forudsætning for fortsat udvikling i et miljø, hvor angribere er i stigende grad tålmodige, ressourcefulde og udstyret med bedre værktøjer.

