Eksperimentējiet, izveidojot NPM pakotni, kas ir atkarīga no visām repozitorijā esošajām pakotnēm

Viens no JavaScript pakotņu izstrādātājiem eksperimentēja, izveidojot un ievietojot NPM repozitorijā pakotni “viss”, kas aptver visas repozitorijā esošās pakotnes ar atkarībām. Lai ieviestu šo funkciju, pakotnei “viss” ir tiešas atkarības ar piecām “@everything-registry/chunk-N” pakotnēm, kurām savukārt ir atkarības no vairāk nekā 3000 “sub-chunk-N” pakotnēm, no kurām katra ir saistīta ar 800 esošās pakotnes repozitorijā.

"Visa" ievietošanai NPM bija divi interesanti efekti. Pirmkārt, pakotne “viss” ir kļuvusi par sava veida rīku DoS uzbrukumu veikšanai, jo mēģinājums to instalēt noved pie miljoniem NPM mitinātu pakotņu lejupielādes un pieejamās diska vietas izsmelšanas vai veidošanas procesu izpildes apturēšanas. Saskaņā ar NPM statistiku, pakotne tika lejupielādēta aptuveni 250 reizes, taču neviens neuztraucas pievienot to kā atkarību citai pakotnei pēc tam, kad izstrādātāja konts tika uzlauzts, lai veiktu sabotāžu. Turklāt daži pakalpojumi un rīki, kas pārrauga un pārbauda jaunās NPM mitinātās pakotnes, neapzināti tika pakļauti uzbrukumam.

Otrkārt, pakotnes “viss” publicēšana efektīvi bloķēja iespēju noņemt visas NPM pakotnes, kas nokļuva tās atkarību sarakstā. Pakotni no NPM autors var izņemt tikai tad, ja tā jau nav izmantota citu pakotņu atkarībās, bet pēc “viss” publicēšanas izrādījās, ka atkarības aptver visas repozitorijā esošās paketes. Zīmīgi, ka tika bloķēta arī pašas pakotnes “viss” noņemšana, jo pirms 9 gadiem repozitorijā tika ievietota testa pakotne “viss pārējais”, kas atkarību sarakstā iekļāva virkni “viss”. Tādējādi pēc publicēšanas pakete “viss” kļuva atkarīga no citas pakotnes.

Avots: opennet.ru

Pievieno komentāru