Schadelijke npm-pakketten verzamelen cryptosleutels, CI-geheimen en API-tokens

Onderzoekers op het gebied van cyberbeveiliging hebben onthuld dat er volgens hen sprake is van een actieve ‘Shai-Hulud-achtige’ supply chain-wormcampagne die een cluster van ten minste 19 kwaadaardige npm-pakketten heeft ingezet om het verzamelen van inloggegevens en diefstal van cryptocurrency-sleutels mogelijk te maken.

De campagne heeft de codenaam gekregen ZANDWORM_MODE door supply chain-beveiligingsbedrijf Socket. Net als bij eerdere Shai-Hulud-aanvalsgolven, wordt de kwaadaardige code die in de pakketten is ingebed, geleverd met mogelijkheden om systeeminformatie, toegangstokens, omgevingsgeheimen en API-sleutels uit ontwikkelaarsomgevingen over te hevelen en zich automatisch te verspreiden door gestolen npm- en GitHub-identiteiten te misbruiken om het bereik ervan te vergroten.

“Het voorbeeld behoudt de kenmerken van Shai-Hulud en voegt GitHub API-exfiltratie toe met DNS-fallback, hook-gebaseerde persistentie, SSH-propagatie fallback, MCP-serverinjectie met ingebedde promptinjectie gericht op AI-coderingsassistenten en LLM API Key harvesting”, aldus het bedrijf.

De pakketten, gepubliceerd naar npm door twee aliassen van npm-uitgevers, official334 en javaorg, worden hieronder vermeld –

Er zijn ook vier sleeper-pakketten geïdentificeerd die geen kwaadaardige functies bevatten:

  • ethers
  • iru-caches
  • iruche
  • uudi

De pakketten gaan verder dan op npm gebaseerde propagatie door een bewapende GitHub-actie op te nemen die CI/CD-geheimen verzamelt en deze exfiltreert via HTTPS met DNS-fallback. Ze beschikken ook over een destructieve routine die fungeert als een kill-schakelaar door het wissen van de homedirectory te activeren als de toegang tot GitHub en npm verloren gaat. De ruitenwisserfunctionaliteit is momenteel standaard uitgeschakeld.

Een ander belangrijk onderdeel van de malware is een ‘McpInject’-module die zich specifiek richt op AI-coderingsassistenten door een kwaadaardige Model Context Protocol (MCP)-server in te zetten en deze in hun toolconfiguraties te injecteren. De MCP-server doet zich voor als een legitieme toolprovider en registreert drie ogenschijnlijk ongevaarlijke tools, die elk een snelle injectie insluiten om de inhoud van ~/.ssh/id_rsa, ~/.ssh/id_ed25519, ~/.aws/credentials, ~/.npmrc en .env-bestanden te lezen, en deze in een lokale map te plaatsen voor latere exfiltratie.

De module richt zich op Claude Code, Claude Desktop, Cursor, Microsoft Visual Studio Code (VS Code) Continue en Windsurf. Het verzamelt ook API-sleutels voor negen aanbieders van grote taalmodellen (LLM): Anthropic, Cohere, Fireworks AI, Google, Grok, Mistral, OpenAI, Replicate en Together.

Bovendien bevat de payload een polymorfe engine die is geconfigureerd om een ​​lokale Ollama-instantie aan te roepen met het DeepSeek Coder-model om variabelen te hernoemen, de controlestroom te herschrijven, ongewenste code in te voegen en tekenreeksen te coderen om detectie te omzeilen. Hoewel de engine is uitgeschakeld in de momenteel gedetecteerde pakketten, suggereert de opname van de functie dat de operators in de toekomst meer iteraties van de malware willen uitbrengen.

De hele aanvalsketen ontvouwt zich in twee fases: een component uit de eerste fase die inloggegevens en cryptocurrency-sleutels vastlegt en vervolgens een tweede fase laadt die vervolgens een diepere verzameling van inloggegevens van wachtwoordbeheerders, wormachtige propagatie, MCP-injectie en volledige exfiltratie uitvoert. De tweede fase wordt pas geactiveerd nadat 48 uur (samen met een jitter per machine van maximaal 48 extra uren) zijn verstreken.

Gebruikers die een van de bovengenoemde pakketten hebben geïnstalleerd, wordt geadviseerd deze met onmiddellijke ingang te verwijderen, npm/GitHub-tokens en CI-geheimen te rouleren, en alle package.json, lockfiles en .github/workflows/ te controleren op onverwachte wijzigingen.

“Verschillende feature flags en vangrails suggereren nog steeds dat de bedreigingsacteur mogelijkheden herhaalt (bijvoorbeeld schakelaars die destructieve routines uitschakelen of polymorf herschrijven in sommige builds)”, aldus Socket. “Dezelfde wormcode die in meerdere typosquatting-pakketten en aliassen van uitgevers voorkomt, duidt echter op opzettelijke verspreiding in plaats van op een toevallige vrijgave.”

“Het destructieve en verspreidingsgedrag blijft reëel en riskant, en verdedigers moeten deze pakketten behandelen als actieve compromisrisico’s in plaats van als goedaardige testartefacten.”

De onthulling komt op het moment dat Veracode en JFrog twee andere kwaadaardige npm-pakketten hebben beschreven, respectievelijk genaamd “buildrunner-dev” en “eslint-verify-plugin”, die zijn ontworpen om een ​​trojan voor externe toegang (RAT) te leveren die zich richt op Windows-, macOS- en Linux-systemen. De .NET-malware die door buildrunner-dev wordt ingezet, is Pulsar RAT, een open-source RAT die wordt geleverd via een PNG-afbeelding die wordt gehost op i.ibb(.)co.

Eslint-verify-plugin daarentegen “doet zich voor als een legitiem ESLint-hulpprogramma terwijl het een geavanceerde, meerfasige infectieketen inzet die zich richt op macOS- en Linux-omgevingen”, aldus JFrog.

Op Linux gebruikt het pakket een Poseidon-agent voor het Mythic C2-framework. Het vergemakkelijkt een breed scala aan post-exploitatiemogelijkheden, waaronder bestandsbewerkingen, het verzamelen van inloggegevens en zijdelingse verplaatsing. De macOS-infectiereeks voert Apfell uit, een JavaScript for Automation (JXA)-agent voor macOS, om uitgebreide gegevensverzameling uit te voeren en een nieuwe macOS-gebruiker met beheerdersrechten te creëren.

Sommige van de door de agent gestolen gegevens zijn als volgt:

  • Systeeminformatie
  • Systeemreferenties via een nep-wachtwoorddialoogvenster
  • Google Chrome-browserbladwijzers
  • Inhoud klembord
  • Bestanden die zijn gekoppeld aan iCloud-sleutelhanger en Chrome-cookies, inloggegevens en bladwijzers
  • Schermafbeeldingen
  • Metagegevens van bestanden

“Het eslint-verify-plugin-pakket is een direct voorbeeld van hoe een kwaadaardig npm-pakket kan escaleren van een eenvoudige installatiehaak naar een compromis voor het volledige systeem”, aldus JFrog. “Door zich voor te doen als een legitiem hulpprogramma, hebben de aanvallers met succes een meerfasige infectieketen verborgen.”

De bevindingen volgen ook op een rapport van Checkmarx, waarin een frauduleuze VS Code-extensie werd gemarkeerd die bekend staat als “solid281” en die de officiële Solidity-extensie imiteert, maar geheime functies herbergt om automatisch een zwaar versluierde lader uit te voeren bij het opstarten van de applicatie en ScreenConnect op Windows en een Python reverse shell op macOS- en Linux-machines te laten vallen.

“Dit weerspiegelt bredere patronen die door andere teams zijn gerapporteerd: Solidity-ontwikkelaars lijken specifiek te zijn getarget, inclusief campagnes die valse Solidity-extensies gebruikten om ScreenConnect te installeren en vervolgens vervolgpayloads te implementeren”, merkte Checkmarx op.

Thijs Van der Does