Endor Labs erklärt die Ursache der Lücke technisch: protobuf.js baut JavaScript-Funktionen aus protobuf-Schemata, indem es Zeichenketten aneinanderreiht und sie über den Function()-Konstruktor ausführt. Dabei prüft die Bibliothek aus dem Schema abgeleitete Bezeichner wie etwa Nachrichtennamen nicht.

Über diese fehlende Validierung kann ein Angreifer ein manipuliertes Schema einschleusen, das beliebigen Code in die erzeugte Funktion injiziert. Der Code wird ausgeführt, sobald die Anwendung eine Nachricht auf Basis dieses Schemas verarbeitet. Damit öffnet sich der Weg zu Remote Code Execution auf Servern oder in Anwendungen, die von Angreifern beeinflusste Schemata laden.

Nach Darstellung von Endor Labs verschafft das Zugriff auf Umgebungsvariablen, Zugangsdaten, Datenbanken und interne Systeme und ermöglicht sogar seitliche Bewegungen innerhalb der Infrastruktur. Betroffen sein können auch Entwicklerrechner, sofern sie nicht vertrauenswürdige Schemata lokal laden und dekodieren.

Die Schwachstelle betrifft protobuf.js in den Versionen 8.0.0/7.5.4 und älter. Endor Labs empfiehlt das Update auf die Versionen 8.0.1 und 7.5.5, die das Problem beheben. Der Patch bereinigt Typnamen, indem er nicht-alphanumerische Zeichen entfernt, und verhindert so, dass ein Angreifer die synthetische Funktion vorzeitig schließt. Langfristig, so merkt Endor Labs an, wäre es allerdings die bessere Lösung, von Angreifern erreichbare Bezeichner gar nicht mehr durch Function() zu schleusen.

Gemeldet wurde die Lücke vom Endor-Labs-Forscher und Bug-Bounty-Jäger Cristian Staicu am 2. März. Die protobuf.js-Maintainer veröffentlichten am 11. März einen Patch auf GitHub. Die korrigierten npm-Pakete folgten am 4. April für den 8.x-Zweig und am 15. April für den 7.x-Zweig.

Neben dem Update auf die gepatchten Versionen rät Endor Labs Systemadministratoren, transitive Abhängigkeiten zu prüfen, das Laden von Schemata grundsätzlich als nicht vertrauenswürdige Eingabe zu behandeln und in Produktivumgebungen vorkompilierte beziehungsweise statische Schemata zu bevorzugen.