Zranitelnost v NPM vedoucí k přepsání souborů v systému

Společnost GitHub zveřejnila podrobnosti o sedmi zranitelnostech v balíčcích tar a @npmcli/arborist, které poskytují funkce pro práci s tar archivy a výpočet stromu závislostí v Node.js. Zranitelnosti umožňují při rozbalování speciálně připraveného archivu přepsat soubory mimo kořenový adresář, do kterého se rozbalují, v závislosti na aktuálních přístupových právech. Tyto problémy umožňují provést libovolný kód v systému, například přidáním příkazů do ~/.bashrc nebo ~/.profile při provádění operace neprivilegovaným uživatelem nebo nahrazením systémových souborů při spuštění s právy root.

Nebezpečí zranitelností se zhoršuje tím, že problémový kód je používán v balíčkovém správci npm při operacích s npm balíčky, což umožňuje provést útok na uživatele tím, že do repozitáře umístí speciálně upravený npm balíček, při jehož zpracování v systému bude vykonán kód útočníka. Útok je možný i při instalaci balíčků v režimu „—ignore-scripts“, který zakazuje provádění zabudovaných skriptů. Celkem npm zasahuje do čtyř zranitelností (CVE-2021-32804, CVE-2021-37713, CVE-2021-39134 a CVE-2021-39135) ze sedmi. První dvě problémy se týkají balíčku tar, zatímco ostatní dva se týkají balíčku @npmcli/arborist.

Nejnebezpečnější zranitelnost CVE-2021-32804 je způsobena tím, že při čištění absolutních cest uvedených v archivu tar jsou nesprávně zpracovány opakující se znaky „/“ — odstraní se pouze první znak, zatímco ostatní zůstávají. Například cesta „/home/user/.bashrc“ bude převedena na „home/user/.bashrc“, zatímco cesta „//home/user/.bashrc“ na „/home/user/.bashrc“. Druhá zranitelnost CVE-2021-37713 se projevuje pouze na platformě Windows a souvisí s nesprávným čištěním relativních cest, které obsahují nesdílený symbol disku („C:some\path“) a sekvenci pro návrat do předchozího adresáře („C:../foo“).

Zranitelnosti CVE-2021-39134 a CVE-2021-39135 jsou specifické pro modul @npmcli/arborist. První problém se projevuje pouze na systémech, které nerozlišují velká a malá písmena ve FS (macOS a Windows), a umožňuje zapisovat soubory do libovolné části FS tím, že v závislostech uvedete dva moduly ‘»foo»: «file:/some/path»‘ a ‘FOO: «file:foo.tgz»‘, jejichž zpracování povede k odstranění obsahu adresáře /some/path a jeho přepsání obsahem foo.tgz. Druhý problém umožňuje přepsat soubory manipulací se symbolickými odkazy.

Zranitelnosti byly odstraněny ve vydáních Node.js 12.22.6 a 14.17.6, npm CLI 6.14.15 a 7.21.0, stejně jako v jednotlivých vydáních balíčku tar 4.4.19, 5.0.11 a 6.1.10. Po získání informace o problému v rámci iniciativy „bug bounty“ GitHub vyplatil výzkumníkům 14500 $ a proskenoval obsah repozitáře, kde nebyly zjištěny pokusy o využití zranitelností. Pro ochranu před uvedenými problémy GitHub také zavedl zákaz publikování v repozitářích NPM balíčků obsahujících symbolické odkazy, tvrdé odkazy a absolutní cesty.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster