Egy JavaScript-csomagok fejlesztője kísérletet végzett az "everything" nevű csomag létrehozására és közzétételére az NPM-tárban, amely kapcsolódó függőségekkel rendelkezik az összes létező csomaghoz a tárban. A "everything" csomag funkciójának megvalósítása érdekében közvetlen függőségekkel kapcsolódik öt "@everything-registry/chunk-N" csomaghoz, amelyek viszont több mint 3000 "sub-chunk-N" csomaghoz kötődnek, amelyben mindegyik 800 létező csomaghoz kapcsolódik a tárban.
Az "everything" NPM-be való közzététele két érdekes hatáshoz vezetett. Először is, az "everything" csomag egyfajta eszközzé vált DoS-támadások végrehajtásához, mivel a telepítési kísérlet millió csomag letöltéséhez vezet az NPM-ből, ami a rendelkezésre álló lemeztárolás kimerülését vagy a build folyamatok leállását okozza. Statisztikák szerint az NPM csomagot körülbelül 250 alkalommal töltötték le, de semmi sem akadályozza meg, hogy más csomag függőségei közé kerüljön a fejlesztő fiókjának feltörése után. Ezen kívül, akaratlanul is, néhány szolgáltatás és eszköz, amely új csomagok figyelését és ellenőrzését végzi az NPM-ben, kitettsé vált a támadásnak.
Másodsorban az "everything" csomag publikálása gyakorlatilag blokkolta minden olyan csomag eltávolítását az NPM-ből, amelyek a függőségei listáján szerepeltek. Az NPM-ből csak a csomag szerzője tud eltávolítani egy csomagot, ha az még nem használt más csomagok függőségeiben, de az "everything" közzététele után minden csomag a függőségek alá került a tárban. Érdekes, hogy az "everything" csomag eltávolítása is blokkolva lett, mivel 9 évvel ezelőtt a tárban közzétették a "everything-else" tesztcsomagot, amelyben az "everything" szerepelt a függőségek listáján. Így az "everything" csomag a közzétételt követően egy másik csomag függőségei alá került.
Forrás: opennet.ru
