Protobuf JS stellt Systeme auf Remote-Code Ausführung Sicherheitslücke

Veröffentlicht 4 min de lectura 123 Lesen

In protobub.js, der JavaScript-Implementierung von Protocol Buffers, die Tausende von Projekten auf Node.js verwenden, ist eine kritische Sicherheitslücke bei der Ausführung von Remote-Codes (CERs) aufgetreten. Das Problem lenkte die Aufmerksamkeit, nachdem die Forscher ein öffentliches Konzept veröffentlichten und die Betreuer Patches veröffentlichten; angesichts der Popularität der Buchhandlung - die in der Nähe von 50 Millionen Downloads pro Woche- die Feststellung verdient sofortige Aufmerksamkeit durch Entwicklungsteams und Operationen.

Der Fehler liegt darin, wie die Buchhandlung Code dynamisch aus den Systemen generiert. Anstatt sichere Strukturen zu bauen, protobub.js concatene chains zu bilden JavaScript-Funktionen und führen sie mit dem Function () Builder, Anwendung sehr wenig oder keine Validierung auf die aus dem Schema extrahierten Kennungen (Botschaftsnamen, Typen, etc.). Ein von einem Angreifer manipuliertes Schema kann schädlichen Code in diese Kette einfügen, so dass bei der abschließenden Auswertung der synthetischen Funktion der injizierte Code im Kontext des Prozesses ausgeführt wird, der das Schema lädt.

Protobuf JS stellt Systeme auf Remote-Code Ausführung Sicherheitslücke
Bild generiert mit IA.

Dieser Vektor verwandelt ein schädliches Schema in eine Tür, um auf Umgebungsvariablen, Geheimnisse, Datenbankverbindungen und andere interne Ressourcen zuzugreifen; es erlaubt auch Seitenbewegungen, wenn die Anwendung in der gemeinsamen Infrastruktur eingesetzt wird. Es ist nicht nur ein Risiko für Server: Wenn Entwickler unzuverlässige Systeme auf ihren lokalen Maschinen laden und decodieren, können ihre Arbeitsumgebungen auch beeinträchtigt werden.

Das Problem wurde vom Forscher Cristian Staicu entdeckt und von der Sicherheitsfirma Endor Labs in einem ausführlichen Bericht dokumentiert; Schwachstelle wird in GitHub als GHSA-xq3m-2v4x-88gg und Endor Labs erklärt den Mechanismus und zeigt ein PoC in seiner Analyse ( Bericht von Endor Labs) Obwohl die Verfasser des Berichts festgestellt haben, daß die Halterung ist einfach in Produktionsumgebungen wurde bisher keine weit verbreitete schädliche Aktivität bestätigt.

Die Schwachstelle betrifft Versionen von protobub.js vor oder gleich 8.0.0 und 7.5.4. Die Betreuer veröffentlichten Korrekturen, die in den Hauptzweigen verfügbar sind: Die 8.x-Serie wurde mit der Version 8.0.1 und der 7.x-Serie mit der 7.5.5 korrigiert; die npm-Pakete mit den Patches wurden im April veröffentlicht (Updates für 8.x und 7.x an verschiedenen Terminen). Die Repository- und Sicherheitshinweise finden Sie auf der Projektseite in GitHub: protobub.js in GitHub und ihr Pressemitteilungen.

Die dringende Lösung, die auf das Patch angewendet wird, besteht darin, die Typennamen zu sanitieren und nicht-alphanumerische Zeichen zu beseitigen, um zu verhindern, dass ein Angreifer die synthetische Funktion schließt und schädliche Anweisungen hinzufügt. Die Experten weisen jedoch darauf hin, dass eine robustere Korrektur über die dynamische Codegenerierung mit Funktion () hinausgeht, um Kennungen zu verarbeiten, die aus externen Quellen stammen können: Die Vermeidung des "Rundsprungs" von Kennungen durch generierten Code ist eine sicherere und langlebigere Designreparatur.

Wenn Ihr Projekt von protobub.js abhängt, handeln Sie jetzt: Aktualisierungen der abgebuchten Versionen, Überprüfungen der Abhängigkeiten für gefährdete Versionen (auch als Übergangsabhängigkeiten) und behandelt die Belastung von Systemen als unzuverlässige Eingabe. Für Produktionsanlagen empfiehlt es sich, vorkompilierte oder statische Systeme zu verwenden, anstatt Code in der Laufzeit zu erstellen und zu bewerten. Endor Labs schlägt auch vor, transiente Abhängigkeiten zu auditieren und CI / CD-Pipelines zu überprüfen, die ungeprüfte Systeme einführen können.

Protobuf JS stellt Systeme auf Remote-Code Ausführung Sicherheitslücke
Bild generiert mit IA.

In der Praxis können Sie überprüfen, welche Version mit Paketmanager-Befehlen installiert ist (z.B. durch Inspizieren von Package.json oder unter Verwendung von Werkzeugen wie npm ls) und Kraftaktualisierungen für sichere Versionen (z.B. npm install protobujs @ ^ 8.0.1 oder Version 7.5.5 je nach Branche, die Sie verwenden). Darüber hinaus wird empfohlen, automatische Software-Scans in die Pipeline und Richtlinien zu integrieren, die das Herunterladen und Ausführen von Systemen von unkontrollierten Ursprungs verhindern.

Die öffentliche Offenlegung umfasste eine PoC in der eigenen Sicherheitsberatung des Projekts, die es technischen Teams erleichtert, das Problem zu replizieren, es in kontrollierten Umgebungen zu validieren; offizielle Beratung in GitHub enthält den Link zu diesem Beispiel und zur technischen Diskussion ( Beratung in GitHub) Wenn Sie mehr Kontext zu finden und technische Empfehlungen benötigen, ist die Analyse von Endor Labs gut dokumentiert und lohnt es sich, es sorgfältig zu lesen: Bericht von Endor Labs.

Die Lektion für die Entwicklungsgemeinschaft ist zweifach: Zum einen bringt die große Bequemlichkeit, Code dynamisch zu generieren, Risiken, wenn die Eingaben nicht gut validiert sind; zum anderen lässt sich durch die riesige Abhängigkeit von geteilten Bibliotheken eine einzige Schwachstelle ausbreiten. Updating, Auditing und Reduzierung der Belichtungsfläche bleibt die beste Verteidigung.

Deckung

Verwandte Artikel

Weitere Neuigkeiten zum selben Thema.