GlassWorm-malware
Een nieuwe golf van de GlassWorm-malwarecampagne richt zich actief op softwareleveringsketens door gestolen GitHub-tokens te misbruiken om kwaadaardige code in honderden repositories te injecteren. Deze operatie richt zich voornamelijk op Python-gebaseerde projecten, waaronder Django-applicaties, code voor machine learning-onderzoek, Streamlit-dashboards en PyPI-pakketten.
De aanvalsvector is bedrieglijk eenvoudig maar zeer effectief: versleutelde malware wordt toegevoegd aan veelgebruikte bestanden zoals setup.py, main.py en app.py. Iedere ontwikkelaar die afhankelijkheden installeert via pip install of gekloonde code uitvoert vanuit een gecompromitteerde repository, activeert onbewust de schadelijke payload.
Inhoudsopgave
Stille overnames van repositories: de ForceMemo-techniek
Deze evolutie van de campagne, nu bekend als ForceMemo, introduceert een heimelijke methode om repositories te compromitteren. Kwaadwillenden krijgen toegang tot ontwikkelaarsaccounts en manipuleren repositories zonder conventionele sporen achter te laten.
Door legitieme commits te rebasen met kwaadaardige code en deze vervolgens geforceerd naar de standaardbranch te pushen, behouden aanvallers de oorspronkelijke commitmetadata, zoals bericht, auteur en tijdstempel, waardoor de inbraak effectief wordt gemaskeerd. Deze aanpak elimineert zichtbare indicatoren zoals pull requests of verdachte commitgeschiedenissen, waardoor detectie aanzienlijk moeilijker wordt.
Aanvalsuitvoeringsketen: van diefstal van inloggegevens tot aflevering van de payload
De ForceMemo-campagne volgt een gestructureerd inbraakproces in meerdere fasen:
- Ontwikkelomgevingen worden in eerste instantie gecompromitteerd via kwaadaardige Visual Studio Code- en Cursor-extensies die GlassWorm-componenten bevatten, ontworpen om gevoelige inloggegevens te verzamelen, waaronder GitHub-tokens.
- De gestolen inloggegevens worden vervolgens gebruikt om versleutelde, Base64-gecodeerde payloads te injecteren in Python-bestanden in alle repositories die aan het gecompromitteerde account zijn gekoppeld.
- De ingebedde malware voert omgevingscontroles uit, waarbij met name wordt voorkomen dat de malware wordt uitgevoerd op systemen die geconfigureerd zijn met een Russische landinstelling. Vervolgens wordt een Solana blockchain-wallet geraadpleegd om dynamisch de URL voor de levering van de payload op te halen.
- Er worden extra payloads gedownload, waaronder versleutelde JavaScript-code die is ontworpen voor het stelen van cryptovaluta en het exfiltreren van gegevens.
Op blockchain gebaseerd commando- en controlesysteem: een veerkrachtige infrastructuur
Een bepalend kenmerk van deze campagne is het gebruik van de Solana-blockchain als command-and-control (C2)-mechanisme. In plaats van traditionele servers slaan aanvallers payload-URL's op in transactiememo-velden die gekoppeld zijn aan specifieke walletadressen.
Uit analyse blijkt dat de activiteit die aan de primaire wallet is gekoppeld al op 27 november 2025 begon, maanden voordat er inbreuken op de repository werden geconstateerd. De wallet heeft tientallen transacties verwerkt, waarbij de locaties van de payloads regelmatig werden bijgewerkt, soms meerdere keren per dag. Deze gedecentraliseerde aanpak verhoogt de veerkracht en bemoeilijkt pogingen om de wallet te ontmantelen.
Het aanvalsoppervlak vergroten: npm en infecties die zich over meerdere ecosystemen verspreiden
De campagne heeft zich uitgebreid van Python-ecosystemen naar JavaScript-toeleveringsketens. Twee React Native npm-pakketten, react-native-international-phone-number (versie 0.11.8) en react-native-country-select (versie 0.3.91), werden tijdelijk gehackt en verspreid met ingebedde malware.
Deze kwaadaardige versies introduceerden pre-installatie-hooks die versleutelde JavaScript uitvoerden, waarmee een vergelijkbare infectieketen werd gestart. De malware omzeilt wederom Russische systemen, verkrijgt payload-instructies via een Solana-wallet en verspreidt platformspecifieke bedreigingen.
De uitvoering vindt volledig in het geheugen plaats met behulp van runtime-technieken zoals eval() of Node.js-sandboxing, waardoor er minimale forensische sporen achterblijven. Bovendien voorkomt een persistentiemechanisme herinfectie binnen een periode van 48 uur door lokaal een tijdstempel op te slaan.
Geavanceerde ontwijkings- en distributietactieken
Recente versies van GlassWorm tonen een toegenomen verfijning in de verspreiding en verhulling ervan. Door gebruik te maken van de extensionPack- en extensionDependencies-mechanismen verspreiden aanvallers kwaadaardige payloads via vertrouwde extensie-ecosystemen.
Eerdere campagnes, gelinkt aan dezelfde dader, hebben meer dan 151 GitHub-repositories gecompromitteerd door onzichtbare Unicode-tekens te gebruiken om kwaadaardige code te verbergen. Ondanks uiteenlopende obfuscatie- en verspreidingsstrategieën, maken alle campagnes consequent gebruik van dezelfde op Solana gebaseerde infrastructuur, wat een uniform operationeel kader bevestigt.
Kwaadaardige IDE-extensies: gericht op ontwikkelomgevingen
De campagne heeft ook ontwikkeltools geïnfiltreerd via een malafide extensie genaamd reditorsupporter.r-vscode-2.8.8-universal, die zich richt op de Windsurf IDE. Vermomd als een plugin voor R-taalondersteuning, zet deze een op Node.js gebaseerde informatiediefstaltool in.
Na installatie haalt de extensie versleutelde gegevens uit blockchaintransacties op, voert deze in het geheugen uit en implementeert gecompileerde componenten om gevoelige gegevens uit op Chromium gebaseerde browsers te extraheren. De persistentie wordt gewaarborgd door geplande taken en wijzigingen in het Windows-register, waardoor de uitvoering bij het opstarten van het systeem gegarandeerd is.
De malware richt zich specifiek op ontwikkelomgevingen en sluit Russische systemen uit, wat overeenkomt met het gedrag dat bij andere GlassWorm-varianten is waargenomen.
Indicatoren voor schaal en impact
Uit beveiligingsanalyses blijkt dat de campagne een aanzienlijk deel van het open-source ecosysteem heeft gecompromitteerd, met gevolgen voor meer dan 433 projecten op verschillende platforms. Hieronder vallen GitHub-repositories (Python en JavaScript), VS Code-extensies en npm-bibliotheken.
Alle infectiepaden leiden uiteindelijk naar de inzet van een op JavaScript gebaseerde tool om informatie te stelen, wat een consistent einddoel aantoont: het verzamelen van inloggegevens en het exfiltreren van data.
- Meer dan 433 bevestigde gecompromitteerde projecten en pakketten.
- Meerdere leveringsmethoden, waaronder GitHub, npm en IDE-extensies.
- Consistent gebruik van de Solana blockchain-infrastructuur voor payload-levering
- Herhaalde uitsluiting van Russische systemen in alle varianten.
Strategische beoordeling: een nieuw tijdperk van aanvallen op de toeleveringsketen
De ForceMemo-campagne vertegenwoordigt een aanzienlijke escalatie van bedreigingen voor de softwareleveringsketen. De combinatie van heimelijke manipulatie van de Git-geschiedenis, blockchain-gebaseerde C2-infrastructuur en platformoverschrijdende infectiemethoden getuigt van een hoge mate van operationele volwassenheid.
Het hergebruik van infrastructuur in combinatie met evoluerende leveringsmechanismen wijst op een adaptieve tegenstander die in staat is aanvallen op te schalen en tegelijkertijd persistentie en ontwijking te behouden. Deze verschuiving van geïsoleerde inbreuken naar gecoördineerde inbraken in meerdere ecosystemen onderstreept het groeiende risico waarmee moderne ontwikkelomgevingen en open-sourcegemeenschappen worden geconfronteerd.