Compania GitHub a dezvăluit detalii despre șapte vulnerabilități în pachetele tar și @npmcli/arborist, care oferă funcții pentru manipularea arhivelor tar și calculul arborelui de dependențe în Node.js. Vulnerabilitățile permit, la extragerea unei arhive special concepute, suprascrierea fișierelor din afara directorului rădăcină în care se face extragerea, în măsura în care permisiunile curente permit acest lucru. Problemele permit executarea de cod arbitrar în sistem, de exemplu, prin adăugarea de comenzi în ~/.bashrc sau ~/.profile atunci când operația este efectuată de un utilizator fără privilegii sau prin înlocuirea fișierelor de sistem atunci când se rulează cu privilegii root.
Pericolul acestor vulnerabilități este agravat de faptul că codul problematic este utilizat în managerul de pachete npm în timpul operațiunilor cu pachete npm, ceea ce permite atacarea utilizatorilor prin publicarea unui pachet npm special conceput în repositoriu, care va executa codul atacatorului în sistem. Atacul este posibil chiar și la instalarea pachetelor în modul „--ignore-scripts”, care dezactivează executarea scripturilor încorporate. În total, npm este afectat de patru vulnerabilități (CVE-2021-32804, CVE-2021-37713, CVE-2021-39134 și CVE-2021-39135) din cele șapte. Primele două probleme se referă la pachetul tar, iar celelalte două la pachetul @npmcli/arborist.
Cea mai periculoasă vulnerabilitate, CVE-2021-32804, este cauzată de faptul că, la curățarea căilor absolute specificate în arhiva tar, caracterele repetate „/” sunt procesate incorect – doar primul caracter este eliminat, în timp ce celelalte sunt lăsate intacte. De exemplu, calea „/home/user/.bashrc” va fi transformată în „home/user/.bashrc”, iar calea „//home/user/.bashrc” în „/home/user/.bashrc”. A doua vulnerabilitate, CVE-2021-37713, se manifestă doar pe platforma Windows și este legată de curățarea incorectă a căilor relative, care includ simbolul de disc neseparat („C:some\path”) și secvența pentru revenirea în directorul anterior („C:../foo”).
Vulnerabilitățile CVE-2021-39134 și CVE-2021-39135 sunt specifice modulului @npmcli/arborist. Prima problemă se manifestă doar pe sistemele care nu disting între majuscule și minuscule în FS (macOS și Windows) și permite scrierea de fișiere în părți arbitrare ale FS, specificând în lista de dependențe două module ‘»foo»: «file:/some/path»‘ și ‘FOO: «file:foo.tgz»‘, procesarea cărora va duce la ștergerea conținutului directorului /some/path și la scrierea în acesta a conținutului foo.tgz. A doua problemă permite suprascrierea fișierelor prin manipularea legăturilor simbolice.
Vulnerabilitățile au fost remediate în versiunile Node.js 12.22.6 și 14.17.6, npm CLI 6.14.15 și 7.21.0, precum și în versiunile individuale ale pachetului tar 4.4.19, 5.0.11 și 6.1.10. După ce a obținut informații despre problemă prin inițiativa ‘bug bounty’, GitHub a plătit cercetătorilor 14500 USD și a scanat conținutul repository-ului, fără a detecta încercări de exploatare a vulnerabilităților. Pentru a se proteja împotriva problemelor menționate, GitHub a introdus de asemenea interdicția de a publica în repository-uri NPM-pachete care includ legături simbolice, legături dure și căi absolute.
Sursa: opennet.ro
