Evidenziata una vulnerabilità in NPM che permette di scoprire l'esistenza di pacchetti in repository privati. Il problema è causato da differenze nei tempi di risposta quando si richiede un pacchetto esistente rispetto a uno non esistente da parte di un utente non autorizzato ad accedere al repository. In assenza di accesso, per tutti i pacchetti nei repository privati, il server registry.npmjs.org restituisce un errore con codice "404", ma nel caso esista un pacchetto con il nome richiesto, l'errore viene restituito con un ritardo significativo. L'attaccante può sfruttare questa caratteristica per determinare la presenza di un pacchetto testando nomi di pacchetti attraverso dizionari.
La definizione dei nomi dei pacchetti nei repository privati può essere necessaria per eseguire un attacco attraverso la mescolanza delle dipendenze, che manipola l'intersezione dei nomi delle dipendenze nei repository pubblici e interni. Conoscendo quali pacchetti NPM interni sono presenti nei repository aziendali, un attaccante può pubblicare pacchetti con gli stessi nomi e versioni più nuove in un repository NPM pubblico. Se le librerie interne non sono esplicitamente legate nelle impostazioni al loro repository durante la compilazione, il gestore pacchetti npm considererà prioritario il repository pubblico e scaricherà il pacchetto preparato dall'attaccante.
GitHub è stato informato del problema a marzo, ma ha rifiutato di aggiungere protezione contro l'attacco, citando limiti architettonici. Alle aziende che utilizzano repository privati è consigliato di controllare periodicamente la presenza di nomi sovrapposti nel repository pubblico o di creare dei placeholder a nome proprio con nomi che ripetono i nomi dei pacchetti nei repository privati, affinché i malintenzionati non possano pubblicare i propri pacchetti con nomi sovrapposti.
Fonte: opennet.ru
