Un attacco a NPM che consente di determinare la presenza di pacchetti in repository privati

È stata individuata una falla in NPM che consente di rilevare l'esistenza di pacchetti in repository chiusi. Il problema è causato da tempi di risposta diversi quando si richiede un pacchetto esistente e inesistente da una terza parte che non ha accesso al repository. Se non è possibile accedere ad alcun pacchetto nei repository privati, il server Registry.npmjs.org restituisce un errore con il codice "404", ma se esiste un pacchetto con il nome richiesto, l'errore viene emesso con un notevole ritardo. Un utente malintenzionato può utilizzare questa funzionalità per determinare la presenza di un pacchetto cercando i nomi dei pacchetti utilizzando i dizionari.

Determinare i nomi dei pacchetti nei repository privati ​​potrebbe essere necessario per eseguire un attacco di mixaggio delle dipendenze che manipoli l'intersezione dei nomi delle dipendenze nei repository pubblici e interni. Sapendo quali pacchetti NPM interni sono presenti nei repository aziendali, un utente malintenzionato può inserire pacchetti con gli stessi nomi e numeri di versione più recenti nel repository NPM pubblico. Se durante l'assemblaggio le librerie interne non sono esplicitamente collegate al loro repository nelle impostazioni, il gestore pacchetti npm considererà il repository pubblico come una priorità più alta e scaricherà il pacchetto preparato dall'aggressore.

GitHub è stato informato del problema a marzo ma ha rifiutato di aggiungere protezione contro l’attacco, citando limitazioni architettoniche. Si consiglia alle aziende che utilizzano repository privati ​​di verificare periodicamente la presenza di nomi sovrapposti nel repository pubblico o di creare stub per loro conto con nomi che ripetono i nomi dei pacchetti nei repository privati, in modo che gli aggressori non possano inserire i propri pacchetti con nomi sovrapposti.

Fonte: opennet.ru

Aggiungi un commento