Sperimenta la creazione di un pacchetto NPM che dipenda da tutti i pacchetti nel repository

Uno degli sviluppatori di pacchetti JavaScript ha sperimentato la creazione e l'inserimento nel repository NPM del pacchetto "tutto", che copre tutti i pacchetti esistenti nel repository con dipendenze. Per implementare questa funzionalità, il pacchetto “everything” ha dipendenze dirette con cinque pacchetti “@everything-registry/chunk-N”, che a loro volta hanno dipendenze da più di 3000 pacchetti “sub-chunk-N”, ciascuno dei quali si lega a 800 pacchetti esistenti nel repository.

Posizionare "tutto" in NPM ha avuto due effetti interessanti. In primo luogo, il pacchetto "tutto" è diventato una sorta di strumento per eseguire attacchi DoS, poiché il tentativo di installarlo porta al download di milioni di pacchetti ospitati in NPM e all'esaurimento dello spazio disponibile su disco o all'interruzione dell'esecuzione dei processi di compilazione. Secondo le statistiche di NPM, il pacchetto è stato scaricato circa 250 volte, ma nessuno si è preso la briga di aggiungerlo come dipendenza a un altro pacchetto dopo che l'account dello sviluppatore è stato violato per commettere un sabotaggio. Inoltre, alcuni servizi e strumenti che monitorano e controllano i nuovi pacchetti ospitati da NPM sono stati involontariamente esposti ad attacchi.

In secondo luogo, la pubblicazione del pacchetto “tutto” ha bloccato di fatto la possibilità di rimuovere eventuali pacchetti in NPM che finivano nel suo elenco di dipendenze. Un pacchetto da NPM può essere rimosso dall'autore solo se non è già utilizzato nelle dipendenze di altri pacchetti, ma dopo la pubblicazione di “tutto” le dipendenze si sono rivelate coprire tutti i pacchetti nel repository. È interessante notare che anche la rimozione del pacchetto "tutto" stesso è stata bloccata, poiché 9 anni fa è stato pubblicato nel repository un pacchetto di prova "tutto il resto", che includeva la stringa "tutto" nell'elenco delle dipendenze. Pertanto, dopo la pubblicazione, il pacchetto “tutto” ha finito per dipendere da un altro pacchetto.

Fonte: opennet.ru

Aggiungi un commento