Kwaadaardig npm-pakket geïndexeerd-btree verborg zijn lader in runtimecode vóór verwijdering

Er is waargenomen dat een kwaadaardig npm-pakket met de naam “indexed-btree” zijn kwaadaardige gedrag verbergt in de applicatiecode in plaats van levenscyclusscripts te gebruiken, wat aangeeft dat bedreigingsactoren waarschijnlijk van tactiek veranderen als reactie op recente beveiligingscontroles.

“Indexed-btree is een kwaadaardig npm-pakket dat het legitieme sorted-btree-pakket nabootst, een gewoon B-tree/indexeringshulpprogramma”, aldus Checkmarx. “In tegenstelling tot de veel voorkomende aanvallen die we in de supply chain-ruimte hebben gezien, is dit pakket helemaal niet afhankelijk van preinstall/postinstall. In plaats daarvan draait het volledig op applicatiecode tijdens runtime.”

Het pakket en de bijbehorende GitHub-repository kunnen niet langer worden gedownload van npm. Uit statistieken blijkt echter dat het pakket op 18 juni 2026 voor het eerst naar het register werd geüpload door een npm-gebruiker genaamd “charlessadler25”, waardoor in korte tijd miljoenen downloads werden verzameld.

Tot overmaat van ramp heeft de campagne mogelijk illegale winsten gegenereerd voor de dreigingsactor, waardoor hij ongeveer €230.933,57 aan cryptocurrency (dat wil zeggen 109 ETH) heeft verdiend.

De ontwikkeling komt op het moment dat npm versie 12 een beveiligingswijziging introduceerde om de automatische uitvoering van levenscyclusscripts zoals preinstall of postinstall te voorkomen, wat een van de meest voorkomende manieren is waarop malware wordt uitgevoerd via pakketten die via de repository worden gedistribueerd.

“Het is legitiem dat deze vaak worden gebruikt voor het compileren van de benodigde code, het seeden van gegevens of het opzetten van essentiële configuraties”, aldus Checkmarx. “Bij bedreigingsactoren wordt dit echter vaak misbruikt om automatisch kwaadaardige code uit te voeren zonder toestemming van de gebruiker tijdens de installatie van een kwaadaardig pakket.”

De laatste bevindingen van het beveiligingsbedrijf voor de toeleveringsketen van software laten zien dat slechte actoren hun tactieken veranderen als reactie op de verandering, waarbij ze installatiehaken mijden ten gunste van het rechtstreeks in de bibliotheek opnemen van de kwaadaardige code.

In dit geval wordt de malware-lader verborgen in een ‘BTree.prototype.set()’-methode, die vervolgens ‘sharedLoad.min.js’ activeert, een JavaScript-payload die de versluierde eerste fase van de malware insluit.

De malware is ontworpen om vingerafdrukken van de host te maken, de details door te sturen naar een hardgecodeerd Slack-kanaal en een Telegram-bot, en gebruikt de EtherHiding-techniek om gecodeerde blobs uit de volgende fase te halen uit een slim contract dat op het Sepolia-testnet is geïmplementeerd, en deze uiteindelijk samen te voegen om de tweede fase-payload te vormen.

De laatste stap omvat het verwijderen van de kwaadaardige artefacten en het verwijderen van de trigger uit de pakketcode om de sporen te verdoezelen.

Checkmarx zei dat indexed-btree een van de vele npm-pakketten is die aan dezelfde bewerking zijn gekoppeld en die sindsdien allemaal uit npm zijn verwijderd –

  • bestelde-kv-index
  • btree-leaderboard
  • prioriteit-slot-wachtrij
  • btree-assortiment-winkel
  • btree-kern
  • btree-tijd-index
  • btree-lru-cache
  • buur-sleutel-kaart
  • glijdend scorevenster
  • mutex-smederij

Om de dreiging tegen te gaan, wordt ontwikkelaars aangeraden om zich niet alleen te beperken tot het scannen tijdens de installatie en het blokkeren van levenscyclusscripts alleen, maar ook gebruik te maken van runtime-gedragsanalyse.

“Wat deze campagne bijzonder belangrijk maakt, is dat het laat zien dat aanvallers zich vrijwel onmiddellijk aanpassen aan een sterkere verdediging van de softwaretoeleveringsketen”, zegt Ensar Seker, CISO bij SOCRadar, in een verklaring gedeeld met The Hacker News. “Npm heeft de beveiliging van de installatietijd verbeterd door scripts voor de levenscyclus van afhankelijkheid te beperken, maar deze campagne laat zien dat aanvallers kwaadaardige uitvoeringen eenvoudigweg kunnen verplaatsen naar legitiem ogende runtime-functionaliteit.”

“De bredere les is dat beveiligingsmaatregelen het gedrag van aanvallers veranderen in plaats van de onderliggende dreiging te elimineren. Het blokkeren van levenscyclusscripts is een belangrijke verbetering, maar aanvallers zullen blijven zoeken naar alternatieve uitvoeringspaden. Verdedigers hebben daarom gelaagde controles nodig die kwaadaardig gedrag kunnen detecteren vóór de installatie, tijdens de uitvoering en na de implementatie.”

PolinRider duikt weer op op Packagist

De onthulling komt op het moment dat Socket zei dat het kwaadaardige code verwijderde in de “dev-main”-versie van “visanduma/nova-two-factor”, een Packagist-pakket met meer dan 700.000 cumulatieve downloads, als onderdeel van een aanhoudende Noord-Koreaanse kwaadaardige cybercampagne genaamd PolinRider.

Een bepalend kenmerk van PolinRider is het patroon van de bedreigingsacteur om ontwikkelaarsaccounts te compromitteren om kwaadaardige inhoud in broncodeopslagplaatsen te injecteren en routinematige ontwikkelaarsacties uit te voeren, zoals het klonen van een opslagplaats of het openen ervan in een geïntegreerde ontwikkelomgeving (IDE), als triggers om de infectieketen te activeren.

Dit houdt vaak het herschrijven van de Git-geschiedenis in, het verbergen van payloads in configuratie- of lettertypebestanden, het opzetten van kwaadaardige VS Code auto-run taken en het vertrouwen op takedown-resistente technieken zoals EtherHiding en zijn stealth-gerichte opvolger, NullReceiver, voor gefaseerde levering van payloads via de blockchain.

“Een analyse van de Visanduma GitHub-organisatie geeft aan dat haar repository’s sinds medio juni 2026 zijn gecompromitteerd”, aldus Socket-beveiligingsonderzoeker Karlo Zanki. “De kwaadaardige wijzigingen zijn geïntroduceerd via het LaHiRu-ontwikkelaarsaccount.”

Een opmerkelijke verschuiving die in de laatste iteratie is waargenomen, is de directe invoeging van zwaar versluierd JavaScript in “index.php” en de uitvoering ervan via PHP’s “shell_exec()”-functie. Deze aanpak suggereert niet alleen dat een PHP-toegangspunt de JavaScript-infectieketen kan aanroepen, maar suggereert ook dat de bedreigingsactoren hun uitvoeringsmethoden aanpassen op basis van het gecompromitteerde project in plaats van een vast leveringspad te gebruiken.

“De activiteit versterkt een bepalend kenmerk van PolinRider: het compromitteren van pakketregistratie is vaak een gevolg van een bredere, op Git gebaseerde inbraak in plaats van het primaire doel van de campagne”, aldus Socket. “De operators gebruiken gewone broncode-samenwerking om ontwikkelaarsomgevingen te bereiken, zich in extra repository’s te verspreiden en de toegang in de loop van de tijd te behouden.”

“Gecompromitteerde bronrepository’s geven de operators de mogelijkheid om bijdragers te infecteren, toegang te krijgen tot privéprojecten en deze te verspreiden via normale ontwikkelingsworkflows. Pakketpublicatie wordt een extra distributiepad wanneer een gecompromitteerde repository een nieuwe release produceert.”

Thijs Van der Does