Уязвимост в NPM, водеща до презапис на файлове в системата

Компания GitHub разкри подробности за седем уязвимости в пакетите tar и @npmcli/arborist, предоставящи функции за работа с tar-архиви и изчисляване на дървото на зависимости в Node.js. Уязвимостите позволяват при разархивиране на специално оформен архив да се презаписват файлове извън основната директория, в която се извършва разархивирането, доколкото позволяват текущите права за достъп. Проблемите дават възможност за организиране на изпълнение на произволен код в системата, например, чрез добавяне на команди в ~/ .bashrc или ~/ .profile при изпълнение от непривилегирован потребител или чрез замяна на системни файлове при стартиране с права root.

Опасността от уязвимостите се задълбочава от факта, че проблемният код се използва в пакетния мениджър npm при операции с npm-пакети, което позволява организиране на атака към потребителите, като се разположи в репозитория специално оформен npm-пакет, при обработката на който в системата ще бъде изпълнен кодът на злонамерения потребител. Атаката е възможна дори при инсталиране на пакети в режим "--ignore-scripts", който деактивира изпълнението на вградени скриптове. Общо npm засяга четири уязвимости (CVE-2021-32804, CVE-2021-37713, CVE-2021-39134 и CVE-2021-39135) от седем. Първите две проблеми засягат пакета tar, а останалите две пакета @npmcli/arborist.

Най-опасната уязвимост CVE-2021-32804 е причинена от факта, че при почистване на посочените в архива tar абсолютни пътища, повторяващите се символи "/" се обработват неправилно - изтрива се само първият символ, а останалите се оставят. Например, пътят "/home/user/.bashrc" ще бъде преобразуван в "home/user/.bashrc", а пътят "//home/user/.bashrc" в "/home/user/.bashrc". Втората уязвимост CVE-2021-37713 се проявява само на платформата Windows и е свързана с неправилно почистване на относителни пътища, включващи неразделен символ на диска ("C:some\path") и последователност за връщане в предишната директория ("C:../foo").

Уязвимостите CVE-2021-39134 и CVE-2021-39135 са специфични за модула @npmcli/arborist. Първият проблем се проявява само на системи, които не различават регистъра на символите във файлова система (macOS и Windows), и позволява записването на файлове в произволна част на файлова система, като се посочат в зависимостите два модула '»foo»: «file:/some/path»' и 'FOO: «file:foo.tgz»', обработката на които води до изтриването на съдържанието на директорията /some/path и записа на съдържанието на foo.tgz в нея. Вторият проблем позволява презаписване на файлове чрез манипулиране със символични линкове.

Уязвимостите са отстранени в версиите Node.js 12.22.6 и 14.17.6, npm CLI 6.14.15 и 7.21.0, както и в отделни версии на пакета tar 4.4.19, 5.0.11 и 6.1.10. След получаване на информация за проблема в рамките на инициативата 'bug bounty', GitHub изплати на изследователите $14500 и сканира съдържанието на репозитория, в който не бяха открити опити за експлоатация на уязвимостите. За защита от посочените проблеми GitHub също така въведе забрана за публикуване на NPM пакети в репозитория, включващи символични линкове, твърди линкове и абсолютни пътеки.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster