
Dependency Confusion
Dependency Confusion ist ein Angriff auf Software-Firmen, bei dem ein Angreifer ein öffentliches Programmpaket mit demselben Namen wie ein firmeninternes Paket veröffentlicht. Der Bauprozess der Firma lädt dann versehentlich die fremde Version und führt deren Schadcode aus.
Programme werden heute selten von Grund auf neu geschrieben. Stattdessen setzen Entwickler fertige Bausteine ein, die andere Leute geschrieben haben. Solche Bausteine heißen Pakete, und sie liegen in großen öffentlichen Sammlungen im Internet zum kostenlosen Abruf bereit. Viele Firmen schreiben zusätzlich eigene Pakete, die nur intern liegen und nicht öffentlich sind. Dependency Confusion nutzt aus, dass ein Programm beim Bauen nicht immer sicher unterscheidet, welche der beiden Quellen gemeint ist. Ein Angreifer lädt einen fremden Baustein unter genau dem internen Namen ins Internet hoch und hofft, dass die Firma ihn statt des eigenen einbaut.
Warum ein falscher Baustein das ganze Haus einreißt
Der Schaden entsteht nicht erst, wenn das fertige Programm läuft. Viele Paketsysteme erlauben es, dass beim Installieren eines Pakets sofort Befehle ausgeführt werden. Der Angreifer bekommt damit Zugriff auf den Rechner, auf dem die Software gebaut wird. Und genau dieser Rechner ist meistens besonders wertvoll: Er hat Passwörter, Zugangsschlüssel und Zugriff auf den Quellcode der Firma.
Dazu kommt die Reichweite. Ein einziges verseuchtes Paket landet in jeder Version der Software, die danach ausgeliefert wird. Kunden installieren also freiwillig ein Programm, das bereits manipuliert ist. Fachleute nennen so etwas einen Angriff auf die Lieferkette, englisch Supply-Chain-Angriff. Das Vertrauen zwischen Hersteller und Kunde wird dabei als Waffe benutzt.
Bekannt wurde die Methode 2021 durch den Sicherheitsforscher Alex Birsan. Er lud Pakete mit internen Namen großer Konzerne hoch, darunter Apple, Microsoft und PayPal. Sein Code meldete sich anschließend von über 35 Firmen zurück. Birsan hatte nichts zerstört, sondern nur nachgewiesen, dass es funktioniert. Er erhielt dafür mehr als 130.000 Dollar an Prämien aus Fehlermeldeprogrammen.
Die Namenslücke zwischen intern und öffentlich
Beim Bauen einer Software steht in einer Textdatei, welche Pakete gebraucht werden. Ein Hilfsprogramm, der Paketmanager, liest diese Liste und lädt alles herunter. Er sucht dabei oft in mehreren Quellen gleichzeitig: im internen Firmenspeicher und in der großen öffentlichen Sammlung. Steht der Name in beiden Quellen, muss er sich entscheiden.
Genau hier lag der Fehler in den Standardeinstellungen vieler Systeme. Sie wählten nicht die interne Quelle, sondern schlicht die höchste Versionsnummer. Der Angreifer lädt sein Paket deshalb als Version 99.0.0 hoch. Sein Paket gewinnt automatisch, ohne dass jemand etwas anklicken muss. Der Angriff braucht keine gestohlenen Passwörter und keine Sicherheitslücke im klassischen Sinn.
Die Namen der internen Pakete sind dabei kein großes Geheimnis. Sie tauchen in versehentlich veröffentlichtem Quellcode auf, in Fehlermeldungen oder in JavaScript-Dateien von Webseiten. Gegenmittel gibt es inzwischen mehrere. Firmen reservieren ihre internen Namen vorsorglich in der öffentlichen Sammlung. Außerdem lässt sich einstellen, dass bestimmte Namensbereiche ausschließlich intern gesucht werden dürfen.
Wo der Begriff in Sicherheitsmeldungen auftaucht
Als Nutzer bemerkt man Dependency Confusion nie direkt. Der Begriff erscheint in Meldungen über Sicherheitsvorfälle bei Software-Anbietern und in Warnungen von Behörden wie dem BSI. Betroffen sind vor allem die Paketsammlungen npm für JavaScript, PyPI für Python und RubyGems. Auch Systeme für Java und für Container-Software kennen das Problem.
Für die Wirtschaft ist das Thema relevant, weil Lieferkettenangriffe teuer und schwer zu versichern sind. Aufsichtsbehörden verlangen von Firmen zunehmend eine Stückliste ihrer Software, eine sogenannte SBOM. Darin steht, welcher fremde Baustein in welchem Produkt steckt. Wird ein Paket als bösartig entlarvt, lässt sich schneller sagen, wer betroffen ist.
Ein häufiger Irrtum ist, Dependency Confusion mit Typosquatting zu verwechseln. Beim Typosquatting setzt der Angreifer auf Tippfehler und nennt sein Paket etwa „reqeusts“ statt „requests“. Dependency Confusion braucht keinen Tippfehler. Der Name ist exakt richtig geschrieben, nur die Quelle ist die falsche.