Esperimento per creare un pacchetto NPM dipendente da tutti i pacchetti nel repository

Uno degli sviluppatori di pacchetti JavaScript ha condotto un esperimento creando e pubblicando nel repository NPM un pacchetto "everything", che copre come dipendenze tutti i pacchetti esistenti nel repository. Per realizzare questa possibilità, il pacchetto "everything" è collegato come dipendenze dirette a cinque pacchetti "@everything-registry/chunk-N", che a loro volta si collegano come dipendenze a oltre 3000 pacchetti "sub-chunk-N", ognuno dei quali è collegato a 800 pacchetti esistenti nel repository.

La pubblicazione di "everything" su NPM ha portato a due effetti interessanti. In primo luogo, il pacchetto "everything" è diventato una sorta di strumento per effettuare attacchi DoS, poiché tentare di installarlo porta al download di milioni di pacchetti ospitati su NPM e all'esaurimento dello spazio su disco disponibile o all'interruzione dei processi di build. Secondo le statistiche, il pacchetto NPM è stato scaricato circa 250 volte, ma nulla impedisce di aggiungerlo alle dipendenze di un altro pacchetto dopo aver violato l'account dello sviluppatore per effettuare una deviazione. Inoltre, alcune unità e strumenti che monitorano e controllano i nuovi pacchetti pubblicati su NPM sono stati involontariamente soggetti all'attacco.

In secondo luogo, la pubblicazione del pacchetto "everything" ha di fatto bloccato la possibilità di rimuovere qualsiasi pacchetto in NPM che sia stato incluso nella lista delle sue dipendenze. Un pacchetto su NPM può essere rimosso dall'autore solo se non è più utilizzato come dipendenza in altri pacchetti, ma dopo la pubblicazione di "everything", tutte le dipendenze erano coperte da tutti i pacchetti nel repository. È interessante notare che la rimozione dello stesso pacchetto "everything" è risultata bloccata, poiché 9 anni fa era stato pubblicato un pacchetto di test "everything-else", in cui era inclusa la stringa "everything" nella lista delle dipendenze. Di conseguenza, il pacchetto "everything" si è trovato a essere una dipendenza di un altro pacchetto dopo la sua pubblicazione.

Fonte: opennet.ru

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster