- Een aanvaller heeft het npm-account van de belangrijkste beheerder van Axios gehackt en versies 1.14.1 en 0.30.4 uitgebracht met een spookafhankelijkheid, plain-crypto-js, die tijdens de installatie een platformonafhankelijke RAT (Remote Access Trojan) implementeerde.
- De malware maakte contact met een C2-server (sfrclak[.]com) en downloadde specifieke payloads voor Windows, macOS en Linux. Daarbij voerde de malware systeemverkenning uit, verstuurde periodiek signalen en wist in sommige gevallen persistentie te creëren.
- De aanval, die door Google en andere onderzoekers wordt toegeschreven aan de Noord-Koreaanse actor UNC1069, combineerde een kwetsbaarheidsperiode van ongeveer drie uur met een geavanceerde social engineering-campagne tegen de beheerder om diens inloggegevens te stelen.
- Organisaties die de getroffen versies hebben kunnen installeren, moeten zich ertoe verbinden actie te ondernemen, te zoeken naar RAT-artefacten, inloggegevens te rouleren, beveiligde versies van Axios vast te zetten en hun supply chain, CI/CD en beheer van afhankelijkheden te versterken.
De JavaScript-ontwikkelingsgemeenschap heeft onlangs een schrikmoment meegemaakt dat je doet nadenken over hoeveel vertrouwen je in je afhankelijkheden hebt, zoals blijkt uit kwetsbaarheden in bibliotheken . Axios, een van de meest gebruikte HTTP-bibliotheken in het ecosysteem, werd op npm gemanipuleerd om een remote access trojan (RAT) te verspreiden via ogenschijnlijk legitieme versies. Het incident duurde slechts een paar uur, maar het heeft duidelijk gemaakt dat de softwareleveringsketen aan een veel dunnere draad hangt dan velen dachten.
Het ernstige probleem is niet alleen dat de aanvallers erin geslaagd zijn malware te verbergen in een pakket dat tientallen of honderden miljoenen keren per week wordt gedownload. Het echte probleem is dat ze dit deden door het npm-account van de hoofdbeheerder te kapen en "officiële" versies te publiceren die er normaal uitzagen en geen enkele regel van de Axios-broncode aanraakten . Al het kwaadaardige gedrag zat verborgen in een spookafhankelijkheid die speciaal voor de aanval was ontworpen.
Hoe Axios' betrokkenheid bij npm tot stand kwam.
Om de omvang van het incident te begrijpen, moeten we beginnen bij het beginpunt. De aanvaller slaagde erin de controle over het npm-account van "jasonsaayman", de belangrijkste beheerder van Axios, over te nemen en het bijbehorende e-mailadres te wijzigen naar een adres onder hun controle , gehost op Proton Mail. Vanaf dat moment hadden ze vrij spel om nieuwe versies van het pakket te publiceren alsof ze de beheerder waren.
Met die inloggegevens uploadde hij twee kwaadaardige versies van Axios: 1.14.1 en 0.30.4 , waarmee hij beide belangrijke branches van het project besmette. De uploads vonden plaats met slechts 39 minuten tussenpoos en werden, volgens de analyse van StepSecurity, rechtstreeks vanuit npm uitgevoerd met behulp van een klassiek, langdurig token, waarmee de gebruikelijke CI/CD-pipeline op basis van GitHub Actions volledig werd omzeild.
Achttien uur voor de uiteindelijke aanval had de aanvaller al een 'schone' versie van de betreffende afhankelijkheid in het npm-register gepubliceerd . Deze voorbereidende stap diende om een geschiedenis te creëren en te voorkomen dat geautomatiseerde controles werden geactiveerd wanneer er op het moment van de aanval een volledig nieuw pakket verscheen.
Opvallend is dat de aanvallers de broncode van Axios niet hebben aangepast en ook geen zichtbare wijzigingen hebben aangebracht in de GitHub-repository . Versies 1.14.1 en 0.30.4 hadden zelfs geen corresponderende commits of tags op GitHub; ze bestonden alleen op npm. Het belangrijkste verschil zat in het afhankelijkheidsbestand van het pakket, dat wel in de registry was gepubliceerd.
Axios declareert onder normale omstandigheden slechts drie afhankelijkheden: follow-redirects, form-data en proxy-from-env . In de gecompromitteerde versies verscheen echter een vierde afhankelijkheid, die voorheen niet in het project voorkwam: plain-crypto-js, versie 4.2.1. Deze spookbibliotheek werd nergens in de Axios-codebasis gebruikt, maar bevatte een post-installatiescript dat automatisch werd uitgevoerd bij het installeren van het pakket met npm, pnpm of vergelijkbare tools.
plain-crypto-js: de spookafhankelijkheid die door de RAT wordt ingezet.
De sleutel tot de aanval lag in die extra afhankelijkheid. plain-crypto-js werd gepubliceerd op npm door een gebruiker genaamd "nrwise", die ook een Proton Mail-e-mailadres had, en het enige doel ervan was om een versleuteld post-installatiescript in Node.js (setup.js) uit te voeren . Dat script fungeerde als een dropper, oftewel als de eerste installatieprocedure voor de tweede fase van de malware.
Bij het installeren van Axios in een van de besmette versies activeerde de npm post-install lifecycle automatisch de plain-crypto-js code zonder dat de ontwikkelaar hiervoor iets hoefde te doen . De dropper maakte verbinding met een command-and-control (C2) server die actief was in het sfrclakcom-domein en luisterde op poort 8000, en downloadde een payload die specifiek was voor het besturingssysteem van de getroffen machine; dit gedrag kan worden vastgesteld door middel van netwerkverkeersanalyse.
Onderzoekers van StepSecurity en andere analyseteams beschrijven een zeer zorgvuldige werkwijze. Na het uitvoeren van de kwaadaardige payload verwijderde de dropper zijn eigen sporen: het verwijderde het postinstall-script, verving het package.json-bestand door een "schone" versie en liet een node_modules-bestand achter dat op het eerste gezicht onschadelijk leek . Op deze manier werd de kwaadaardige code bij een latere handmatige inspectie niet direct in Axios gevonden.
Om de manipulatie te identificeren, was de enige betrouwbare aanwijzing te vinden in de lockfiles (package-lock.json, pnpm-lock.yaml, yarn.lock) en de aanwezigheid van specifieke versies: axios 1.14.1 of 0.30.4 en plain-crypto-js 4.2.1, naast twee versies van dat pakket met tussenliggende nummers (4.2.0, 4.2.2) die in sommige analyses werden genoemd. Socket ontdekte later dat dezelfde malware ook werd verspreid via de pakketten @shadanai/openclaw (diverse versies 2026.3.xx) en @qqbrowser/openclaw-qbot (0.0.130). Beveiligingstechnieken zoals honeypots kunnen ook helpen bij het identificeren van soortgelijke campagnes.
Cross-platform RAT: Windows, macOS en Linux in de schijnwerpers
Na uitvoering fungeerde het setup.js-script als een orchestrator die het besturingssysteem kon detecteren en een platformspecifiek aanvalspad kon volgen . De campagne was duidelijk van tevoren voorbereid: volgens StepSecurity hadden de aanvallers drie afzonderlijke payloads vooraf gecompileerd, één voor elk systeem.
Op macOS-systemen startte het installatieproces na de installatie een AppleScript dat een met een Trojaans paard besmet binair bestand downloadde van de server sfrclakcom:8000 . Dit binaire bestand werd opgeslagen in de map /Library/Caches/com.apple.act.mond, de machtigingen werden aangepast zodat het uitvoerbaar was, en ten slotte werd het op de achtergrond gestart met /bin/zsh. Nadat de RAT (Remote Access Trojan) actief was, werd het AppleScript zelf verwijderd om forensisch onderzoek verder te bemoeilijken.
Op Windows-machines lokaliseerde de malware het PowerShell-bestand van het systeem, kopieerde het naar %PROGRAMDATA%\wt.exe om het te vermommen als de Windows-terminal en genereerde een tijdelijk VBScript . Dit VBScript nam vervolgens contact op met de C2-server om een extra PowerShell RAT-script te downloaden, voerde dit uit en verwijderde vervolgens het gedownloade bestand. Bovendien creëerde de Windows-variant het bestand %PROGRAMDATA%\system.bat met een downloadroutine waarmee de malware zichzelf bij elke aanmelding kon herstellen en voegde een uitvoeringssleutel toe aan het Windows-register om persistentie te garanderen.
Op Linux en andere Unix-achtige systemen, met uitzondering van macOS, gebruikte de dropper Node.js' execSync om een shell-commando uit te voeren dat een Python-script downloadde van sfrclakcom, het opsloeg als /tmp/ld.py en het uitvoerde met nohup om het op de achtergrond te laten draaien . In tegenstelling tot Windows vertoonde deze variant geen robuust persistentiemechanisme, wat suggereert dat de aanpak meer gericht was op snelle data-exfiltratie of het incidenteel implementeren van persistentie via latere commando's.
SafeDep en Elastic Security Labs analyseerden de payloads op het tweede niveau en concludeerden dat de RAT's voor macOS (C++ Mach-O-binair bestand) en Linux (Python-script) dezelfde commandoset, C2-protocol, berichtindeling en werkingsgedrag deelden . Dit type analyse is doorgaans afhankelijk van scandiensten zoals VirusTotal , die de correlatie van samples en IOC's vergemakkelijken.
In alle gevallen voerde elke geïnfecteerde host direct een systeemverkenning uit: gebruikersmappen, schijflocaties, actieve processen en andere metadata . Deze informatie werd naar de command-and-controlserver gestuurd en de agent hield een beacon-loop van ongeveer 60 seconden in stand, wachtend op nieuwe instructies, waaronder de uitvoering van extra scripts of het injecteren van binaire bestanden in het geheugen.
Blootstellingsperiode, doelstellingen en toeschrijving aan Noord-Korea
De kwaadaardige versies van Axios waren gedurende ongeveer drie uur beschikbaar op npm, binnen een zorgvuldig gekozen tijdsbestek. De gecompromitteerde pakketten werden vlak voor middernacht op zondag gepubliceerd (een tijdstip dat de reactietijd van de beveiligers maximaliseerde) en het incident was in de vroege maandagochtend onder controle , nadat beveiligingsbedrijven de autoriteiten hadden gealarmeerd over het afwijkende gedrag.
In die relatief korte periode detecteerde Huntress minstens 135 systemen die verbinding maakten met de server van de aanvaller . Aangezien Axios meer dan 80-100 miljoen downloads per week registreert (volgens verschillende bronnen zelfs meer dan 300 miljoen in sommige periodes), vertegenwoordigt dat aantal waarschijnlijk slechts het topje van de ijsberg, beperkt tot de systemen die onder de aandacht komen van analysebureaus die hun gegevens openbaar hebben gemaakt.
Google heeft via zijn Threat Intelligence-team de aanval toegeschreven aan een vermoedelijke Noord-Koreaanse actor met de aanduiding UNC1069 . Elastic Security Labs bevestigde deze hypothese door een sterke gelijkenis te vinden tussen de RAT die op macOS werd geïnstalleerd en WAVESHAPER, een C++-backdoor die door Mandiant werd ontdekt en eveneens aan dezelfde dreigingsgroep is gekoppeld.
Analisten van Google benadrukten dat aan Noord-Korea gelieerde groepen zich al jaren specialiseren in aanvallen op de toeleveringsketen en diefstal van cryptovaluta . Het patroon is consistent: het compromitteren van ontwikkelingsinfrastructuur, veelgebruikte bibliotheken of vertrouwde software om vervolgens door te groeien naar doelen die waardevolle activa, privésleutels of inloggegevens beheren.
Diverse rapporten benadrukten ook dat de opzet en uitvoering van de aanval duidden op een goed gecoördineerd team : drie parallelle implementaties van dezelfde RAT (PowerShell, C++ en Python), een consistent C2-protocol, vrijwel identiek gedrag in alle varianten en een duidelijke zelfreinigende strategie om geen sporen achter te laten. Elastic benadrukte dat deze consistentie wijst op één ontwikkelaar of een groep die werkte vanuit een gedeeld ontwerpdocument, en dus niet op improvisatie.
Afgezien van de puur technische aspecten, is een van de meest verontrustende punten van de zaak hoe het npm-account van de hoofdbeheerder werd gehackt. De Axios-manager legde later zelf uit dat hij tweefactorauthenticatie had ingeschakeld voor bijna al zijn services , en dat hij desondanks onbewust toegang had verleend.
Volgens de analyse na de aanval, die door het team is gedeeld, hebben de aanvallers een zeer geavanceerde social engineering-operatie opgezet, ondersteund door AI-tools, om het vertrouwen van de slachtoffers te winnen . Ze deden zich voor als de oprichter van een bedrijf en kopieerden de visuele identiteit, foto en zelfs de huisstijl. Ze creëerden een echte Slack-ruimte met het bedrijfslogo, kanalen met berichten die zogenaamd gesynchroniseerd waren met LinkedIn, en zelfs nepprofielen van medewerkers en andere beheerders van open-source software.
Binnen die omgeving planden ze een vergadering via Microsoft Teams waaraan een hele groep professionals leek deel te nemen . Tijdens de vergadering simuleerden ze een technisch probleem en gaven aan dat een onderdeel van hun systeem verouderd was. De onderhoudstechnicus, ervan uitgaande dat het een legitieme vereiste was die verband hield met de videoconferentietool zelf, downloadde en installeerde het voorgestelde bestand.
Dat bestand was in feite de remote access Trojan waarmee de aanvallers toegang kregen tot de inloggegevens van het slachtoffer en uiteindelijk de controle over het npm-account overnamen waarmee Axios werd gepubliceerd . Het hele proces was zo goed georganiseerd, met zoveel geloofwaardige details, dat het slachtoffer het omschreef als "perfect gecoördineerd, professioneel en volkomen overtuigend".
Het menselijke aspect van dit incident maakt duidelijk dat zelfs technische maatregelen zoals tweefactorauthenticatie (2FA) ontoereikend zijn wanneer geavanceerde sociale manipulatie wordt gecombineerd met visuele imitatie, deepfakes of gedetailleerde klonen van organisaties . De zwakste schakel is, wederom, de menselijke interactie.
Impact op organisaties en ontwikkelaars die Axios gebruiken
Vanuit praktisch oogpunt is het grootste probleem vaststellen wie er daadwerkelijk door getroffen is. Elke organisatie die [email protected] of [email protected] heeft geïnstalleerd gedurende de periode dat deze software beschikbaar was, moet ervan uitgaan dat de machine of de pipeline die de installatie heeft uitgevoerd mogelijk is gecompromitteerd.
De aanbevelingen van bedrijven als StepSecurity, Aikido, Huntress en Elastic zijn eenduidig. Bij vermoeden van een besmetting is een proactieve aanpak noodzakelijk, en niet simpelweg "de node_modules verwijderen en opnieuw installeren ". De verstandige aanpak is om de getroffen machines of omgevingen opnieuw op te bouwen met behulp van vertrouwde images en de CI/CD-logs zorgvuldig te controleren om te achterhalen welke taken of pipelines mogelijk de gecompromitteerde versies hebben uitgevoerd.
Bovendien is het cruciaal om alle inloggegevens en geheimen die de RAT mogelijk van die nodes heeft verkregen, te roteren : npm-tokens, cloudprovider-sleutels, pipeline-geheimen, databasegegevens, SSH-sleutels, enzovoort. Als deze gegevens na een dergelijke aanval in omloop blijven, blijft de deur openstaan voor ongemerkte laterale verspreiding.
Op technisch niveau moeten teams hun lock-bestanden (package-lock.json, pnpm-lock.yaml, yarn.lock) controleren op verwijzingen naar de gecompromitteerde versies van Axios en plain-crypto-js . Als deze elementen worden gevonden, is de volgende stap het inspecteren van de getroffen systemen op mogelijke RAT-artefacten: /Library/Caches/com.apple.act.mond op macOS, %PROGRAMDATA%\wt.exe en %PROGRAMDATA%\system.bat op Windows, of /tmp/ld.py op Linux.
Parallel daaraan wordt aanbevolen om expliciet veilige versies van Axios in te stellen, zoals 1.14.0 en 0.30.3, en overrides of resoluties te gebruiken om te voorkomen dat transitieve afhankelijkheden naar ongewenste versies verwijzen . Het blokkeren van uitgaand verkeer naar het sfrclakcom-domein is ook een verstandige maatregel om de aanval in te dammen, in ieder geval totdat de volledige omvang ervan is geanalyseerd.
Beveiligingslessen voor de softwaretoeleveringsketen
Het Axios-incident is geen op zichzelf staand geval, maar een schakel in een keten van aanvallen op de toeleveringsketen, waaronder gevallen als SolarWinds, Kaseya, 3CX, Polyfill.io en kwetsbaarheden die in Log4j zijn misbruikt. Het kernidee is altijd hetzelfde: een veelgebruikt, vertrouwd onderdeel compromitteren om het bereik te maximaliseren , in plaats van te proberen elke machine afzonderlijk aan te vallen.
Een van de meest herhaalde lessen van experts is dat vertrouwen niet alleen gebaseerd kan zijn op de populariteit van een bibliotheek of de reputatie van een beheerder . Als het releasekanaal (het npm-account, de CI/CD-pipeline, de buildinfrastructuur) gecompromitteerd is, erft alles wat via dat kanaal wordt uitgebracht dat risico. Handmatige codebeoordeling is ook onvoldoende als malware zich verbergt in transitieve afhankelijkheden en zichzelf na uitvoering verwijdert.
Er is ook benadrukt dat de "standaardsnelheid" voor afhankelijkheidsupdates ten koste gaat van het aanvalsoppervlak . Altijd automatisch de nieuwste versie gebruiken is enorm handig, maar het opent de deur voor een kwaadaardige update die zich binnen enkele minuten kan verspreiden. Sommige organisaties overwegen al beleidsmaatregelen zoals het vereisen dat een nieuwe versie gedurende een bepaalde periode in het ecosysteem aanwezig moet zijn voordat deze wordt geaccepteerd, of het vereisen dat wijzigingen in kritieke pakketten een extra handmatige beoordeling ondergaan.
Wat de ontwikkelingsinfrastructuur betreft, moeten CI/CD-omgevingen als zeer gevoelige systemen worden beschouwd . Elke RAT die tijdens de installatie van afhankelijkheden wordt uitgevoerd, zal vrijwel zeker proberen pijplijngeheimen te bemachtigen en toegang te krijgen tot andere omgevingen. Het segmenteren van deze knooppunten, het nauwlettend monitoren ervan en het periodiek vernieuwen van hun geheimen is niet langer een "ideale" aanbeveling, maar een noodzaak.
Tot slot vereist het detecteren van dit soort aanvallen het combineren van informatie uit meerdere bronnen: geïnstalleerde versies, lockfiles, indicatoren van compromis in het besturingssysteem en netwerktelemetrie . Tools die softwarelijstdocumenten (SBOM's) genereren en beheren, helpen om snel te achterhalen welke projecten welke pakketten gebruiken, wat essentieel is wanneer er massale waarschuwingen zoals deze worden geactiveerd.
Deze hele episode met Axios illustreert hoezeer het ecosysteem van afhankelijkheden, hoe volwassen en geconsolideerd het ook lijkt, nog steeds sterk afhankelijk is van vertrouwen en constante waakzaamheid. Een ogenschijnlijk onschuldige bibliotheek, beheerd door één persoon die het slachtoffer wordt van een goed uitgevoerde social engineering-aanval, kan binnen enkele uren een wereldwijd verspreidingsgebied worden voor het inzetten van platformoverschrijdende RAT's tegen bedrijven, freelancers en organisaties van elke omvang . Het versterken van de controle rondom publicatieaccounts, pipelines en kritieke afhankelijkheden is niet langer een optionele best practice, maar een voorwaarde voor voortdurende ontwikkeling in een omgeving waar aanvallers steeds geduldiger, vindingrijker en beter uitgerust zijn.

