Een tweede aanval op pakketten in de NPM-repository is vastgesteld, uitgevoerd met behulp van een gemodificeerde zelfverspreidende Shai-Hulud-worm die kwaadaardige software in afhankelijkheden injecteert. Als gevolg van de aanval zijn er kwaadaardige releases van 605 pakketten gepubliceerd, die in totaal meer dan 100 miljoen downloads bevatten.
Voor de aanval hebben de aanvallers via phishing de accountgegevens onderschept van de onderhoudsmedewerker van een van de populaire pakketten, dat als afhankelijkheid wordt gebruikt door een groot aantal pakketten. Door gebruik te maken van het onderschepte account publiceerden de aanvallers een release van het pakket, waarin code was toegevoegd voor het activeren van de worm bij de installatie van het aangetaste pakket in de afhankelijkheden. De opgestarte worm zoekt naar inloggegevens in de huidige omgeving, door de TruffleHog-tool te laden en uit te voeren.
Bij ontdekking van een verbindingstoken voor de NPM-directory publiceert de worm automatisch nieuwe kwaadaardige releases voor pakketten die in de huidige omgeving worden ontwikkeld. Op deze manier wordt de hele afhankelijkheidsboom in ketens besmet. Naast het NPM-token slaat de worm ook toegangssleutels op voor GitHub en cloudservices zoals AWS, Azure en GCP (Google Cloud Platform), evenals omgevingsvariabelen en andere gevoelige gegevens die de TruffleHog-scanner kan обнаружить.
Gegevens gevonden in het systeem worden op GitHub geplaatst via het aanmaken van repositories met chaotische namen (bijvoorbeeld 'qzx15djl71alh6p80h') en de zin 'Sha1-Hulud: The Second Coming' in de beschrijving. Ook worden ze gecodeerd in de logs van GitHub Actions weergegeven. In de aangemaakte repository wordt een bestand in JSON-indeling (bijvoorbeeld jsonactionsSecrets.json of contents.json) geplaatst, waarin een string met informatie over het systeem, omgevingsvariabelen en onderschepte gegevens die via base64 zijn gecodeerd, aanwezig is. Voor het extern doorgeven van informatie uit de continue integratiesystemen op basis van GitHub creëert de worm een GitHub Actions-handler met de naam '.github/workflows/formatter_123456789.yml' en configureert deze een runner met de naam SHA1HULUD.
De verschillen met de vergelijkbare aanval in september hebben betrekking op een andere methode voor het invoegen van kwaadaardige code in pakketten. In de door de worm geproduceerde kwaadaardige releases wordt de implementatie van het JavaScript-platform Bun aangekondigd. In het bestand package.json wordt in de sectie "preinstall", die de scripts definieert die vóór de installatie worden uitgevoerd, het commando "node setup_bun.js" toegevoegd.

In het bestand "setup_bun.js" bevindt zich code voor het uitvoeren van het obfuscerende script "bun_environment.js", dat de code van de worm bevat. Voor zijn verdere verspreiding zoekt de worm naar de code van pakketten, brengt wijzigingen aan in het bestand package.json (verhoogt het versienummer en voegt de aanroep van setup_bun.js toe), voegt de bestanden setup_bun.js en bun_environment.js toe, verpakt het pakket opnieuw en voert het commando "npm publish" uit om de nieuwe release te publiceren.
Onder de gecompromitteerde populaire pakketten bevinden zich: @zapier/zapier-sdk (2,8 miljoen downloads per week), @posthog/core (2,8 miljoen), posthog-node (1,5 miljoen), @asyncapi/specs (1,4 miljoen), @postman/tunnel-agent (1,2 miljoen). Het wordt verondersteld dat de aanval begon met de compromittering van het ondersteunende pakket @asyncapi/specs.
Bron: opennet.ru
