Üks JavaScript-pakettide arendajatest viis läbi eksperimenti, luues ja paigutades NPM-repositooriumisse paketi «everything», mis hõlmab kõik olemasolevad paketid repositooriumis. Selle võimaluse rakendamiseks on pakett «everything» seotud viie otse sõltuvusega paketiga «@everything-registry/chunk-N», mis omakorda seob rohkem kui 3000 paketti «sub-chunk-N», millest igas on seos 800 olemasoleva paketiga repositooriumis.
Paketi «everything» asetamine NPM-i tõi kaasa kaks huvitavat efekti. Esiteks sai pakett «everything» omamoodi tööriistaks DoS-rünnakute teostamiseks, kuna selle paigaldamise katse toob kaasa miljonite NPM-is paigutatud pakettide allalaadimise ja olemasoleva kettaruumiga varude ammendumise või ehitusprotsesside seiskumise. NPM-i statistika kohaselt on paketti alla laaditud umbes 250 korda, kuid keegi ei takista selle lisamist sõltuvusse ühelt teiselt paketilt pärast arendaja konto häkkimist diversiooni toimepanemiseks. Lisaks said tahtmatult rünnaku ohvriks mõned teenused ja tööriistad, mis jälgivad ja kontrollivad NPM-is paigutatud uusi pakette.
Teiseks tõkestas paketi «everything» avaldamine tegelikult tõhusalt igasuguste pakettide kustutamise NPM-is, mis olid tema sõltuvuste loendis. NPM-i paketti saab autori poolt kustutada ainult juhul, kui see ei ole teiste pakettide sõltuvustes kasutusel, kuid pärast «everything» avaldamist kattusid kõik reposti sees olevad paketid sõltuvustega. Pealegi on tähelepanuväärne, et paketi «everything» kustutamine osutus samuti blokeerituks, kuna 9 aastat tagasi oli repositooriumis avaldatud testpakett «everything-else», kus oligi märgitud rida «everything» sõltuvuste loendis. Nii olles pakett «everything» pärast avaldamist sattunud teise paketi sõltuvustesse.
Allikas: opennet.ru
