In NPM wurde ein Mangel festgestellt, der es ermöglicht, die Existenz von Paketen in geschlossenen Repositories zu ermitteln. Das Problem entsteht durch unterschiedliche Reaktionszeiten, wenn ein externer Benutzer, der keinen Zugriff auf das Repository hat, nach einem bestehenden oder nicht existierenden Paket fragt. Bei fehlendem Zugriff auf alle Pakete in privaten Repositories gibt der Server registry.npmjs.org einen Fehler mit dem Code „404“ zurück, aber im Fall der Existenz eines Pakets mit dem angeforderten Namen wird der Fehler mit spürbarer Verzögerung ausgegeben. Ein Angreifer kann dieses Merkmal nutzen, um die Verfügbarkeit von Paketen bei der Namenssuche anhand von Wörterbüchern zu bestimmen.
Die Bestimmung von Paketnamen in geschlossenen Repositories kann für einen Angriff durch das Mischen von Abhängigkeiten erforderlich sein, der das Überlappen von Abhängigkeiten in öffentlichen und internen Repositories manipuliert. Wenn der Angreifer weiß, welche internen NPM-Pakete in den Unternehmensrepositories vorhanden sind, kann er Pakete mit denselben Namen und neueren Versionsnummern in einem öffentlichen NPM-Repository veröffentlichen. Wenn interne Bibliotheken bei der Erstellung nicht explizit auf ihr Repository festgelegt werden, wird der Paketmanager npm das öffentliche Repository als prioritär betrachten und das vom Angreifer vorbereitete Paket herunterladen.
GitHub wurde im März über das Problem informiert, lehnte jedoch ab, einen Schutz gegen den Angriff hinzuzufügen, und verwies auf architektonische Einschränkungen. Unternehmen, die private Repositories verwenden, wird empfohlen, regelmäßig nach überschneidenden Namen im öffentlichen Repository zu suchen oder unter ihrem Namen Platzhalter mit Namen zu erstellen, die die Namen von Paketen in privaten Repositories wiederholen, damit Angreifer ihre Pakete mit überschneidenden Namen nicht hochladen können.
Quelle: opennet.ru
