Experimentați cu crearea unui pachet NPM care depinde de toate pachetele din depozit

Unul dintre dezvoltatorii de pachete JavaScript a experimentat crearea și plasarea în depozitul NPM a pachetului „totul”, care acoperă toate pachetele existente în depozit cu dependențe. Pentru a implementa această caracteristică, pachetul „totul” are dependențe directe cu cinci pachete „@everything-registry/bloc-N”, care, la rândul lor, au dependențe de mai mult de 3000 de pachete „sub-bloc-N”, fiecare dintre ele se leagă de 800 de pachete existente în depozit.

Plasarea „totul” în NPM a avut două efecte interesante. În primul rând, pachetul „totul” a devenit un fel de instrument pentru efectuarea atacurilor DoS, deoarece încercarea de a-l instala duce la descărcarea a milioane de pachete găzduite în NPM și epuizarea spațiului disponibil pe disc sau oprirea execuției proceselor de construire. Conform statisticilor NPM, pachetul a fost descărcat de aproximativ 250 de ori, dar nimeni nu se deranjează să-l adauge ca dependență la alt pachet după ce contul dezvoltatorului a fost spart pentru a comite sabotaj. În plus, unele servicii și instrumente care monitorizează și verifică pachetele noi găzduite de NPM au fost expuse fără să vrea atacurilor.

În al doilea rând, publicarea pachetului „totul” a blocat efectiv capacitatea de a elimina orice pachete din NPM care au ajuns în lista de dependențe. Un pachet din NPM poate fi eliminat de autor numai dacă nu este deja folosit în dependențele altor pachete, dar după publicarea „totul” dependențele s-au dovedit a acoperi toate pachetele din depozit. Este de remarcat faptul că eliminarea pachetului „totul” în sine a fost blocată, deoarece în urmă cu 9 ani a fost postat în depozit un pachet de testare „totul-altfel”, care includea șirul „totul” în lista de dependențe. Astfel, după publicare, pachetul „totul” a ajuns să fie dependent de un alt pachet.

Sursa: opennet.ru

Adauga un comentariu