Experimentieren Sie mit der Erstellung eines NPM-Pakets, das von allen Paketen im Repository abhängig ist

Einer der Entwickler von JavaScript-Paketen experimentierte damit, ein „Alles“-Paket zu erstellen und im NPM-Repository zu platzieren, das alle vorhandenen Pakete im Repository mit Abhängigkeiten abdeckt. Um diese Funktion zu implementieren, verfügt das „everything“-Paket über direkte Abhängigkeiten mit fünf „@everything-registry/chunk-N“-Paketen, die wiederum Abhängigkeiten von mehr als 3000 „sub-chunk-N“-Paketen haben, an die sich jedes bindet 800 vorhandene Pakete im Repository.

Die Platzierung von „alles“ in NPM hatte zwei interessante Auswirkungen. Erstens ist das „Everything“-Paket zu einer Art Tool zur Durchführung von DoS-Angriffen geworden, da der Versuch, es zu installieren, dazu führt, dass Millionen von in NPM gehosteten Paketen heruntergeladen werden und der verfügbare Speicherplatz erschöpft oder die Ausführung von Build-Prozessen gestoppt wird. Laut NPM-Statistiken wurde das Paket etwa 250 Mal heruntergeladen, aber niemand macht sich die Mühe, es als Abhängigkeit zu einem anderen Paket hinzuzufügen, nachdem das Konto des Entwicklers gehackt wurde, um Sabotage zu begehen. Darüber hinaus waren einige Dienste und Tools, die neue von NPM gehostete Pakete überwachen und prüfen, unabsichtlich Angriffen ausgesetzt.

Zweitens blockierte die Veröffentlichung des Pakets „everything“ effektiv die Möglichkeit, alle Pakete in NPM zu entfernen, die in der Liste der Abhängigkeiten landeten. Ein Paket aus NPM kann vom Autor nur dann entfernt werden, wenn es nicht bereits in den Abhängigkeiten anderer Pakete verwendet wird, aber nach der Veröffentlichung von „allem“ stellte sich heraus, dass die Abhängigkeiten alle Pakete im Repository abdecken. Bemerkenswert ist, dass auch die Entfernung des Pakets „everything“ selbst blockiert wurde, da vor 9 Jahren ein Testpaket „everything-else“ im Repository veröffentlicht wurde, das die Zeichenfolge „everything“ in die Liste der Abhängigkeiten aufnahm. Somit war das „Everything“-Paket nach der Veröffentlichung letztendlich von einem anderen Paket abhängig.

Source: opennet.ru

Kommentar hinzufügen