L'azienda GitHub ha rivelato dettagli su sette vulnerabilità nei pacchetti tar e @npmcli/arborist, che offrono funzionalità per la gestione di archivi tar e il calcolo dell'albero delle dipendenze in Node.js. Le vulnerabilità consentono, durante l'estrazione di un archivio appositamente formattato, di sovrascrivere file al di fuori della directory radice in cui avviene l'estrazione, a seconda dei permessi correnti. Questi problemi permettono di eseguire codice arbitrario nel sistema, ad esempio aggiungendo comandi a ~/ .bashrc o ~/ .profile durante l'operazione eseguita da un utente non privilegiato o sostituendo file di sistema quando eseguiti con i privilegi di root.
Il pericolo delle vulnerabilità è aggravato dal fatto che il codice problematico è utilizzato nel gestore pacchetti npm durante le operazioni con i pacchetti npm, consentendo un attacco agli utenti attraverso la pubblicazione di un pacchetto npm appositamente preparato nel repository, il cui codice verrebbe eseguito nel sistema dell'utente. L'attacco è possibile anche durante l'installazione dei pacchetti in modalità «—ignore-scripts», che disabilita l'esecuzione degli script incorporati. Complessivamente, npm è interessato da quattro vulnerabilità (CVE-2021-32804, CVE-2021-37713, CVE-2021-39134 e CVE-2021-39135) su sette. I primi due problemi riguardano il pacchetto tar, mentre gli altri due riguardano il pacchetto @npmcli/arborist.
La vulnerabilità più pericolosa CVE-2021-32804 è causata da un'errata gestione dei caratteri ripetuti «/» durante la pulizia dei percorsi assoluti specificati nell'archivio tar: solo il primo carattere viene rimosso, mentre gli altri rimangono. Ad esempio, il percorso «/home/user/.bashrc» sarà trasformato in «home/user/.bashrc», mentre il percorso «//home/user/.bashrc» diventerà «/home/user/.bashrc». La seconda vulnerabilità CVE-2021-37713 si manifesta solo sulla piattaforma Windows ed è legata a un'errata pulizia dei percorsi relativi, che includono un simbolo di unità non separato («C:some\path») e una sequenza per tornare alla directory precedente («C:../foo»).
Le vulnerabilità CVE-2021-39134 e CVE-2021-39135 sono specifiche per il modulo @npmcli/arborist. Il primo problema si manifesta solo su sistemi che non fanno distinzione tra maiuscole e minuscole nel file system (macOS e Windows) e consente di scrivere file in parti arbitrarie del file system, specificando tra le dipendenze due moduli ‘»foo»: «file:/some/path»‘ e ‘FOO: «file:foo.tgz»‘, il cui trattamento porterà all'eliminazione del contenuto della directory /some/path e alla scrittura del contenuto di foo.tgz. Il secondo problema consente di sovrascrivere file attraverso la manipolazione dei collegamenti simbolici.
Le vulnerabilità sono state risolte nelle versioni di Node.js 12.22.6 e 14.17.6, npm CLI 6.14.15 e 7.21.0, così come in versioni specifiche del pacchetto tar 4.4.19, 5.0.11 e 6.1.10. Ricevendo informazioni sul problema nell'ambito dell'iniziativa 'bug bounty', GitHub ha pagato agli ricercatori $14.500 e ha analizzato il contenuto del repository, dove non sono state individuate tentativi di sfruttamento delle vulnerabilità. Per proteggere contro i problemi indicati, GitHub ha anche introdotto un divieto di pubblicazione nei repository di pacchetti NPM contenenti collegamenti simbolici, collegamenti rigidi e percorsi assoluti.
Fonte: opennet.ru
