Experimentujte s vytvořením balíčku NPM, který je závislý na všech balíčcích v úložišti

Jeden z vývojářů balíčků JavaScript experimentoval s vytvořením a umístěním balíčku „všechno“ do úložiště NPM, který pokrývá všechny existující balíčky v úložišti se závislostmi. Pro implementaci této funkce má balíček „vše“ přímé závislosti s pěti balíčky „@vše-registry/chunk-N“, které zase mají závislosti na více než 3000 balíčcích „sub-chunk-N“, z nichž každý se váže na 800 existujících balíčků v úložišti.

Umístění „všeho“ do NPM mělo dva zajímavé efekty. Za prvé, balíček „všechno“ se stal jakýmsi nástrojem pro provádění DoS útoků, protože pokus o jeho instalaci vede ke stažení milionů balíčků hostovaných v NPM a vyčerpání dostupného místa na disku nebo zastavení provádění procesů sestavení. Podle statistik NPM byl balíček stažen asi 250krát, ale nikdo se neobtěžuje jej přidat jako závislost na jiném balíčku poté, co byl účet vývojáře hacknut za účelem spáchání sabotáže. Některé služby a nástroje, které monitorují a kontrolují nové balíčky hostované NPM, byly navíc nevědomky vystaveny útoku.

Za druhé, publikování balíčku „všechno“ účinně zablokovalo možnost odstranit všechny balíčky v NPM, které skončily v jeho seznamu závislostí. Balíček z NPM může autor odstranit pouze v případě, že již není použit v závislostech jiných balíčků, ale po zveřejnění „všeho“ se ukázalo, že závislosti pokrývají všechny balíčky v úložišti. Je pozoruhodné, že bylo zablokováno i odstranění samotného balíčku „všechno“, protože před 9 lety byl v úložišti zveřejněn testovací balíček „vše-ostatní“, který obsahoval řetězec „všechno“ v seznamu závislostí. Po zveřejnění tak skončil balíček „všechno“ závislý na jiném balíčku.

Zdroj: opennet.ru

Přidat komentář