Ein Entwickler von JavaScript-Paketen führte ein Experiment durch, bei dem er ein Paket namens "everything" im NPM-Repository erstellte und veröffentlichte. Dieses Paket umfasst alle bestehenden Pakete im Repository als Abhängigkeiten. Um diese Funktionalität zu realisieren, ist das Paket "everything" direkt mit fünf Paketen "@everything-registry/chunk-N" verknüpft, die wiederum Abhängigkeiten zu über 3000 Paketen "sub-chunk-N" haben, wobei jedes dieser Pakete mit 800 bestehenden Paketen im Repository verbunden ist.
Die Veröffentlichung von "everything" im NPM führte zu zwei interessanten Effekten. Erstens wurde das Paket "everything" zu einem Werkzeug für DoS-Angriffe, da der Versuch, es zu installieren, dazu führt, dass Millionen von im NPM veröffentlichten Paketen heruntergeladen werden, was zu einer Erschöpfung des verfügbaren Speicherplatzes oder zum Stoppen von Build-Prozessen führen kann. Laut NPM-Statistiken wurde das Paket etwa 250 Mal heruntergeladen, aber nichts hindert jemanden daran, es nach einem Hack des Entwicklerkontos als Abhängigkeit zu einem anderen Paket hinzuzufügen. Darüber hinaus waren unbeabsichtigt einige Überwachungsdienste und -tools betroffen, die neue Pakete im NPM überwachen und überprüfen.
Zweitens blockierte die Veröffentlichung des Pakets "everything" die Möglichkeit, beliebige Pakete im NPM, die in seiner Abhängigkeitsliste waren, zu löschen. Ein Paket kann nur dann vom Autor aus NPM entfernt werden, wenn es nicht bereits als Abhängigkeit in anderen Paketen verwendet wird, aber nach der Veröffentlichung von "everything" wurden alle Pakete im Repository von Abhängigkeiten umfasst. Bemerkenswert ist, dass auch die Löschung des Pakets "everything" selbst blockiert wurde, da vor 9 Jahren ein Testpaket namens "everything-else" im Repository veröffentlicht wurde, in dem "everything" in der Abhängigkeitstabelle angegeben war. Somit war das Paket "everything" nach seiner Veröffentlichung in den Abhängigkeiten eines anderen Pakets.
Quelle: opennet.ru
