Ein Abhängigkeitsangriff ermöglicht die Codeausführung bei PayPal, Microsoft, Apple, Netflix, Uber und 30 anderen Unternehmen

Vor ein paar Tagen Es wurde eine überraschend einfache Methode veröffentlicht, mit der Abhängigkeiten in Anwendungen angegriffen werden können die mit internen Paket-Repositories entwickelt werden. Die Forscher, die das Problem identifiziert haben Sie konnten Ihren Code ausführen auf den internen Servern von 35 Unternehmen, darunter PayPal, Microsoft, Apple, Netflix, Uber, Tesla und Shopify.

Die Hacks wurden im Rahmen der Bug Bounty-Programme in Abstimmung mit den angegriffenen Unternehmen durchgeführt, und die Täter haben bereits Prämien in Höhe von 130.000 USD für die Identifizierung von Schwachstellen erhalten.

Die Methode basiert auf der Tatsache, dass Viele Unternehmen verwenden in ihren internen Anwendungen Standard-Repository-Abhängigkeiten von NPM, PyPI und RubyGemssowie interne Abhängigkeiten, die nicht öffentlich verteilt oder aus ihren eigenen Repositorys heruntergeladen werden.

Das Problem ist, dass Paketmanager wie npm, pip und gem Sie versuchen, die internen Abhängigkeiten der Unternehmen auch aus den öffentlichen Repositories herunterzuladen. Für einen Angriff Definieren Sie einfach die Namen der Pakete mit internen Abhängigkeiten und erstellen Sie Ihre eigenen Pakete mit denselben Namen in den öffentlichen Repositories von NPM, PyPI und RubyGems.

Das Problem ist nicht spezifisch für NPM, PyPI und RubyGems und manifestiert sich auch auf anderen Systemen wie NuGet, Maven und Yarn.

Die Idee für die vorgeschlagene Methode kam, nachdem ein Forscher versehentlich bemerkt hatte, dass in öffentlich verfügbarem Code, der auf GitHub veröffentlicht wurde, Viele Unternehmen entfernen die Erwähnung zusätzlicher Abhängigkeiten nicht aus ihren Manifestdateien Wird in internen Projekten oder bei der Implementierung erweiterter Funktionen verwendet. Ähnliche Spuren wurden im JavaScript-Code für Webdienste sowie in den Node.JS-, Python- und Ruby-Projekten vieler Unternehmen gefunden.

Die Hauptlecks betrafen die Einbettung des Inhalts aus den package.json-Dateien im öffentlich verfügbaren JavaScript-Code während des Erstellungsprozesses sowie unter Verwendung der tatsächlichen Pfadelemente in require () -Aufrufen, mit denen Abhängigkeitsnamen beurteilt werden können.

Das Scannen von mehreren Millionen Unternehmensdomänen ergab mehrere tausend JavaScript-Paketnamen die nicht im NPM-Repository waren. Nachdem der Forscher eine Datenbank mit internen Paketnamen zusammengestellt hatte, beschloss er, ein Experiment durchzuführen, um die Infrastruktur von Unternehmen zu hacken, die an den Bug Bounty-Programmen teilnehmen. Die Ergebnisse waren überraschend effektiv Der Forscher konnte seinen Code auf vielen Entwicklungscomputern und Servern ausführen, die für das Erstellen oder Testen auf der Basis kontinuierlicher Integrationssysteme verantwortlich sind.

Beim Herunterladen von Abhängigkeiten installierten die Paketmanager npm, pip und gem hauptsächlich Pakete aus den primären öffentlichen Repositorys NPM, PyPI und RubyGems, die als vorrangig eingestuft wurden.

Das Vorhandensein ähnlicher Pakete mit denselben Namen in den Repositories privater Unternehmen wurde ignoriert, ohne dass eine Warnung angezeigt oder Abstürze verursacht wurden das könnte die Aufmerksamkeit der Administratoren auf sich ziehen. In PyPI wurde die Downloadpriorität von der Versionsnummer beeinflusst (unabhängig vom Repository wurde die neueste Version des Pakets heruntergeladen). In NPM und RubyGems war die Priorität nur vom Repository abhängig.

Der Forscher hat Pakete in NPM-, PyPI- und RubyGems-Repositorys abgelegt, die die Namen der gefundenen internen Abhängigkeiten kreuzen, und dem Skript, das vor der Installation ausgeführt wird (in NPM vorinstalliert), Code hinzugefügt, um Informationen über das System zu sammeln und die empfangenen Informationen an zu senden der externe Host.

Um Informationen über den Erfolg des Hacks zu übermitteln, umgehen Sie Firewalls, die den externen Verkehr blockieren. Dies ist die Methode zum Organisieren der verdeckten Kanalkommunikation über das DNS-Protokoll. Der ausgeführte Code löste den Host in der angreifenden Domäne unter der Kontrolle der angreifenden Domäne auf, wodurch Informationen über erfolgreiche Vorgänge auf dem DNS-Server gesammelt werden konnten. Informationen über den Host, den Benutzernamen und den aktuellen Pfad wurden übergeben.

75% aller aufgezeichneten Codeausführungen waren mit dem Herunterladen von NPM-Paketen verbunden, hauptsächlich aufgrund der Tatsache, dass in JavaScript deutlich mehr interne Modulnamen als in Python und Ruby Abhängigkeitsnamen vorhanden waren.

Quelle: https://medium.com/


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.