Kwaadaardige code die je niet kunt zien: hoe aanvallers Unicode misbruiken in open source repositories

Unicode is de wereldwijde standaard voor het weergeven van tekst in vrijwel elke taal, elk schrift en elk symbool. De standaard omvat ook een categorie tekens zonder zichtbare weergave: zogenoemde onzichtbare of “non-printable” tekens. Die hebben legitieme toepassingen, zoals het sturen van tekstopmaak, het markeren van leesrichting (links-naar-rechts of rechts-naar-links), of het verfijnen van hoe bepaalde symbolen worden weergegeven in specifieke taalcontexten. Kortom: nuttige tekens, met een duidelijk doel.

Dat doel wordt nu misbruikt. Aanvallers verstoppen kwaadaardige code in precies die onzichtbare Unicode-tekens, waarna die code onopgemerkt in broncode terechtkomt. Wat jij ziet als een lege string of een stukje witruimte, bevat in werkelijkheid een gecodeerde payload.

Glassworm: een aanvaller die al een jaar actief is

De dreiging heeft inmiddels een naam: Glassworm. De aanvaller werd in maart 2025 voor het eerst gespot in kwaadaardige npm-pakketten en is sindsdien actief gebleven. In oktober 2025 werden gecompromitteerde VS Code-extensies gevonden. En in maart 2026 is er opnieuw een grootschalige golf waargenomen, ditmaal in meer dan 150 GitHub-repositories, aangevuld met nieuwe kwaadaardige pakketten op npm en in de VS Code Marketplace.

Onder de getroffen repositories bevinden zich bekende projecten zoals de starterpagina van Wasmer en verschillende repositories van de organisatie achter OpenCode en SST.

Hoe de aanval technisch werkt

De truc is eenvoudig maar effectief. Glassworm plaatst een klein stukje JavaScript-code in een bestand van een legitiem project. Die code ziet er onschuldig uit: een functie die een string verwerkt en het resultaat doorgeeft aan eval(). Het bijzondere zit in de string zelf. Die lijkt leeg, maar bevat onzichtbare Unicode-tekens in het bereik U+FE00 tot U+FE0F en U+E0100 tot U+E01EF. Die tekens coderen samen een verborgen payload, die tijdens uitvoering wordt gedecodeerd en direct uitgevoerd.

Wat er dan gebeurt is eerder al gedocumenteerd: het ophalen en uitvoeren van een tweede script, met als doel het stelen van tokens, inloggegevens en geheimen.

Waarom dit moeilijk te detecteren is

De aanval onderscheidt zich op een paar punten van gewone malware. Ten eerste is de kwaadaardige toevoeging volledig onzichtbaar bij visuele code review. Editors, terminals en code review-interfaces tonen niets. Ten tweede worden de commits zorgvuldig vormgegeven: documentatieupdates, versienummerverhogingen, kleine bugfixes. Ze zien eruit alsof ze van een reguliere bijdrager komen.

Screenshot From 2026 03 24 09 29 46
Screenshot van code gevonden door Aikido, op de laatste regel tussen de “ staat de kwaadaardige code, volledig onzichtbaar in vrijwel elke editor.

Bij meer dan 150 repositories tegelijk is dat niveau van maatwerk waarschijnlijk deels geautomatiseerd, mogelijk met hulp van AI. Dat maakt het schaalbaar en daarmee zorgwekkend.

Bredere context: supply chain risico

Dit type aanval illustreert een groter probleem in moderne softwareontwikkeling. Organisaties bouwen voort op open source code, externe pakketten en community-bijdragen. Dat is efficiënt, maar introduceert ook afhankelijkheden waarover de eigen organisatie geen directe controle heeft. Als een upstream-repository wordt gecompromitteerd met onzichtbare code, wordt die code mogelijk stilzwijgend opgenomen in de eigen software.

Standaard beveiligingsmaatregelen zoals linting, code reviews en statische analyse op basis van zichtbare patronen volstaan hier niet. Je scant immers op wat je ziet.

Hoe RiskGuard kan helpen

RiskGuard beschikt over tooling om broncode te scannen op dit type verborgen Unicode-injecties. Dat geldt voor zowel eigen codebases als externe afhankelijkheden. We integreren dit in bredere supply chain security assessments, waarbij we niet alleen kijken naar bekende kwetsbaarheden in pakketten, maar ook naar afwijkende patronen in de broncode zelf.

Wil je weten of jouw repositories of softwareomgeving blootstaat aan dit type aanval? Neem contact met ons op voor een scan of een gesprek over hoe je dit structureel inregelt.