Het NPM-ecosysteem is opnieuw slachtoffer van een grootschalige cyberaanval. Na de eerste Shai-Hulud worm in september zijn nu meer dan 1000 pakketversies gecompromitteerd. De aanval richt zich op het stelen van credentials en verspreidt zich automatisch via NPM-pakketten.
Enkele maanden na de eerste grote aanval in september wordt het pakketregister opnieuw getroffen door een variant van de Shai-Hulud worm. Het JFrog-onderzoeksteam ontdekte naast de oorspronkelijke 459 geïdentificeerde pakketten nog eens 181 extra gecompromitteerde versies. De aanval beslaat inmiddels meer dan 1000 pakketversies.
De malware werkt vergelijkbaar met de eerdere aanval. Het gaat om een self-propagating worm die gebruikerssecrets steelt, deze uploadt naar een publieke GitHub-repo en zichzelf vervolgens opnieuw verpakt in alle beschikbare NPM-pakketten van de gebruiker. De aanvallers werken met een nieuwe payload die zich bevindt in bun_environment.js in plaats van bundle.js.
Sha1-Hulud: The Second Coming
De aanvallers hebben deze campagne zelf gedoopt tot “Sha1-Hulud: The Second Coming”. Dit is zichtbaar in de repository-beschrijvingen waar gestolen credentials worden opgeslagen. De nieuwe variant genereert willekeurige repository-namen in plaats van de voorspelbare “/shai-hulud” structuur van de eerste aanval.
De malware steelt toegangstokens van verschillende providers, waaronder GitHub, NPM, AWS, GCP en Azure. Ook alle credentials die TruffleHog kan identificeren worden meegenomen. Het scala aan ondersteunde providers voor die tool is breed.
Getroffen ontwikkelaars moeten snel handelen
Gebruikers met een van de gecompromitteerde pakketversies moeten onmiddellijk in actie komen. Alle toegangstokens die op de getroffen machine waren opgeslagen moeten worden gereset. Dit geldt voor de eerdergenoemde providers en alle andere diensten die TruffleHog herkent.
Gebruikers moeten in hun GitHub-account controleren op nieuwe repositories met willekeurige namen. Deze kunnen bestanden bevatten als contents.json, environment.json, cloud.json, actionsSecrets.json en truffleSecrets.json. Bij NPM-accounts is het zaak om te checken op nieuwe pakketversies met een postinstall-script dat “node setup_bun.js.js” uitvoert. Gevonden versies moeten direct worden verwijderd.
Klanten van JFrog Xray en Curation zijn volledig beschermd tegen deze aanvalsvector. Alle pakketten uit de campagne staan gemarkeerd als malware. Voor Curation-klanten is het aan te raden om Compliant Version Selection in te schakelen. Hiermee wordt transparant de laatste niet-malafide versie van elk pakket geserveerd. Ook het activeren van de “Package version is immature” policy helpt. Die weert pakketversies die te nieuw zijn, waardoor organisaties immuun blijven voor soortgelijke dependency hijack-aanvallen.
Tip: Kritiek lek in JavaScript-bibliotheek expr-eval blootgelegd