Voor de tweede keer in korte tijd hebben aanvallers malware verspreid via npm-packages. De daders weten daarmee zeer veel slachtoffers te maken: naast directe gebruikers van gecompromitteerde npm-packages ook indirecte gebruikers. Wat is npm eigenlijk en waarom hebben veel mensen te maken met packages daarvan?
Kort gezegd is npm is de standaardpackagemanager voor stukken JavaScript-code. Achter deze basale uitleg schuilt wat complexiteit, zeker in het licht van recente securityincidenten op dit gebied.
Malware-infecties
Eerst was er het nieuws dat npm-packages met meer dan twee miljard wekelijkse downloads zijn geïnfecteerd met malware. Deze infectie was niet het doel, maar slechts het middel. Via de besmette npm-packages wisten de onbekende aanvallers cryptovalutastelers te installeren op systemen van vele mensen.
Net meer dan een week later volgde het securitynieuws dat 187 npm-packages zijn geïnfecteerd met malware die credentials steelt. Bij de getroffen stukken software zaten ook packages van securityleverancier CrowdStrike. Volgens securityexperts zitten waarschijnlijk dezelfde daders achter deze twee aanvallen op en via npm-packages.
Disney, Spotify, Apple
Deze twee recente gevallen zijn niet uniek of gloednieuw. In juli dit jaar was een npm-package met 2,8 miljoen wekelijkse downloads al gecompromitteerd. En in oktober vorig jaar probeerden cybercriminelen cryptovaluta te stelen door kwaadwillige code toe te voegen aan de populaire animatietool Lottie Player.
Die infectie was mogelijk doordat aanvallers hadden ingebroken op het GitHub-account van LottieFiles. Dat bedrijf maakt animatietools die gebruikt worden door onder meer Disney, Spotify en Apple. Via het GitHub-account voegden de aanvallers kwaadwillige code toe aan de npm-package van Lottie Player.
Bovenstaande materie kan bekende kost zijn voor developers en securitykenners. Niet iedereen weet echter wat npm is en waarom dat een domino-effect kan hebben. Het is hoe dan ook een techkwestie die securityzorgen geeft, want de aanvallen via npm-packages hebben niet alleen de makers van die software-elementen geraakt. Via die zogeheten maintainers zijn veel andere techgebruikende mensen geraakt.
Softwareontwikkeling en -distributie
Dat hangt samen met moderne manieren voor het ontwikkelen, distribueren, aanbieden en gebruiken van software. Npm is een beheertool voor zogeheten packages; dat zijn stukken software. Het packagen van software is het proces van het 'verpakken' van diverse code-elementen, die dan samen een functioneel geheel vormen. Dat geheel kan een volledige applicatie of app zijn, maar kan ook zelf weer een component zijn voor andere software.
Onder Linux-gebruikers kan het woord package bekend zijn. Het commando apt-get
geeft na invoeren op de opdrachtregel een lijst van packages, afkomstig uit een zogeheten repository. Dat is een onlinebron van Linux-packages, die standaard van de maker van de gebruikte Linux-distributie is, zoals Ubuntu, Red Hat, Debian, SUSE, enzovoorts. Je kunt dit zien als de commandpromptgedreven voorloper van de bekende appstores. Linux had dit echter al vér voordat iOS, Android, macOS en Windows ieder appstores kregen van hun makers, respectievelijk Apple, Google, Apple en Microsoft.
Packagemanager voor developers
Packages zijn dus te beschouwen als een vrij normaal fenomeen in de softwarewereld, waarvan veel developers gebruikmaken. Npm-packages zijn dan weer specifieke softwarestukken: geschreven in de programmeertaal JavaScript. Npm is daarvoor een zogeheten packagemanager, waarmee stukken JavaScript-code zijn te downloaden, verwerken, gebruiken en weer verspreiden in andere software.
Oorspronkelijk was JavaScript lokaal draaiende code in een webbrowser op de computer van een websitebezoeker. Later is JavaScript doorontwikkeld: het kan nu ook zonder browser worden uitgevoerd met het Node.js-platform, wat een zogeheten runtimeomgeving voor softwarecode is. Npm is de standaardpackagemanager voor Node.js. Daarbij is 'npm' overigens niet een afkorting voor 'Node.js package manager'; het is een naar zichzelf terugverwijzend backronym, waarbij 'npm' staat voor 'npm is not an acronym'.
Node.js is opensource, gratis beschikbaar en draait op Windows, macOS, Linux en Unix. Developers kunnen met dat platform uiteenlopende soorten software maken: krachtige servertoepassingen, fraaie webapps, technische commandprompttools, handige scripts, nuttige bibliotheken (library's), enzovoorts. Ze doen dat door packages te gebruiken van andere developers.
Domino-effect
Daarin zit het nut van npm niet alleen voor softwareontwikkelaars, maar ook voor sluwe cybercriminelen. Die laatste kunnen met een stiekeme supplychainaanval op een maintainer van een veelgebruikte package automatisch vele andere stukken software bereiken, plus de gebruikers van die producten verderop in de softwareketen. De aanvallen op npm-packages zijn dus eigenlijk aanvallen vía npm-packages.
De vergelijking valt opnieuw te trekken met het fenomeen van appstores, de onlinewinkels waar gewone gebruikers applicaties kunnen vinden en downloaden. In de begintijd van appstores verschenen daarin nogal eens kwaadwillige apps. Dit was voordat bedrijven als Apple, Google en Microsoft strikter gingen kijken naar de digitale waar die via hun appwinkels werd verspreid. Technische keuringen en procedures voor het indienen van apps waren het gevolg.
Security vereist waakzaamheid
Voor npm-packages zijn er zeker securityvoorzieningen, maar die blijken door de decentrale aard van het nuttige opensourceplatform niet sluitend genoeg te zijn. Aanvallers die de inloggegevens van een individuele ontwikkelaar buitmaken, kunnen een package voorzien van malware en dan digitaal ondertekenen, zodat het legitiem lijkt te zijn. Daarnaast lijkt het erop dat 'afnemers' van npm-packages niet altijd audits uitvoeren op de code die zij – soms volautomatisch – downloaden en gebruiken in hun eigen software.
Verschillende schakels in de ketens van softwareontwikkeling en -distributie kunnen dus zwak blijken te zijn. De Owasp Foundation waarschuwt dan ook voor de risico's van npm-packages en biedt best practices voor veilig npm-gebruik. Deze adviezen omvatten het uitvoeren van audits op code, maar ook basale zaken als het gebruik van tweefactorauthenticatie.
De recente hackaanval op npm-packages met meer dan 2 miljard wekelijkse downloads had uiteindelijk geen enorme impact, maar moet mensen wel wakker schudden. De kern van het JavaScript-ecosysteem is geraakt, stelt cto Brian Fox van Sonatype, dat tools biedt voor veilige softwareontwikkeling.
Groot en groeiend
Hoewel dat bedrijf een commercieel motief heeft, valt niet te ontkennen dat hier een securityprobleem speelt. Dat probleem is niet gloednieuw, maar wel grotendeels ongezien en groeiend. Eind 2024 bleek een kwaadwillige npm-package al een jaar ongemerkt aan cryptomining en datadiefstal te doen. Eind 2018 schreef Tweakers over een npm-infectie waarmee cryptovaluta werd gestolen. De recente aanvallen via npm zijn van groter formaat en kunnen een voorbode zijn van massaler misbruik.
Redactie: Jasper Bakker • Eindredactie: Marger Verschuur