PDA

Просмотр полной версии : Уязвимость в NPM-пакете pac-resolver, насчитывающем 3 млн загрузок в неделю


Suicide
03.09.2021, 01:18
В NPM-пакете pac-resolver (https://www.npmjs.com/package/pac-resolver), насчитывающем более 3 млн загрузок в неделю, выявлена (https://httptoolkit.tech/blog/npm-pac-proxy-agent-vulnerability/) уязвимость (CVE-2021-23406), которая позволяет добиться выполнения своего JavaScript-кода в контексте приложения при отправке HTTP-запросов из Node.js-проектов, поддерживающих функцию автонастройки прокси-сервера.

Пакет pac-resolver осуществляет разбор PAC-файлов (https://en.wikipedia.org/wiki/Proxy_auto-config), включающих сценарий автоматической настройки прокси-сервера. PAC-файл содержит обычный JavaScript-код с функцией FindProxyForURL, определяющей логику выбора прокси в зависимости от хоста и запрашиваемого URL. Суть уязвимости в том, что для выполнения данного JavaScript-кода в pac-resolver применялся предоставляемый в Node.js API VM (https://nodejs.org/api/vm.html#vm_vm_executing_javascript), позволяющий выполнить JavaScript-код в другом контексте движка V8.

Указанный API явно помечен в документации как не предназначенный для запуска кода, не заслуживающего доверия, так как он не предоставляет полноценной изоляции запускаемого кода и позволяет получить доступ к изначальному контексту. Проблема устранена в выпуске pac-resolver 5.0.0, который переведён (https://github.com/TooTallNate/node-degenerator/commit/852043f9621f098ccf3a577a1d9a2ed0de20f402#diff-a2a171449d862fe29692ce031981047d7ab755ae7f84c707ae f80701b3ea0c80R6) на использование библиотеки vm2 (https://www.npmjs.com/package/vm2), предоставляющей более высокий уровень изоляции, подходящий для запуска не заслуживающего доверия кода.

https://www.opennet.ru/opennews/pics_base/0_1630611692.png

При использовании уязвимой версии pac-resolver атакующий через передачу специально оформленного PAC-файла может добиться выполнения своего JavaScript-кода в контексте кода проекта, использующего Node.js,если в данном проекте используются библиотеки, связанные зависимостями с pac-resolver. Наиболее популярной из проблемных библиотек явлеятся Proxy-Agent (https://www.npmjs.com/package/proxy-agent), указанная (https://www.npmjs.com/package/proxy-agent?activeTab=dependents) в зависимостях у 360 проектов, включая urllib, aws-cdk, mailgun.js и firebase-tools, в сумме насчитывающих более трёх миллионов загрузок в неделю.

Если приложение, связанное зависимостями с pac-resolver, загружает PAC-файл, предоствляемый системой с поддержкой протокола автоматической настройки прокси WPAD (https://ru.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol), то для подстановки вредоносных PAC-файлов злоумышленники, имеющие доступ к локальной сети, могут воспользоваться распространением настроек прокси через DHCP.



02.09.2021

https://www.opennet.ru/opennews/art.shtml?num=55728​