The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

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

02.09.2021 22:15

В NPM-пакете pac-resolver, насчитывающем более 3 млн загрузок в неделю, выявлена уязвимость (CVE-2021-23406), которая позволяет добиться выполнения своего JavaScript-кода в контексте приложения при отправке HTTP-запросов из Node.js-проектов, поддерживающих функцию автонастройки прокси-сервера.

Пакет pac-resolver осуществляет разбор PAC-файлов, включающих сценарий автоматической настройки прокси-сервера. PAC-файл содержит обычный JavaScript-код с функцией FindProxyForURL, определяющей логику выбора прокси в зависимости от хоста и запрашиваемого URL. Суть уязвимости в том, что для выполнения данного JavaScript-кода в pac-resolver применялся предоставляемый в Node.js API VM, позволяющий выполнить JavaScript-код в другом контексте движка V8.

Указанный API явно помечен в документации как не предназначенный для запуска кода, не заслуживающего доверия, так как он не предоставляет полноценной изоляции запускаемого кода и позволяет получить доступ к изначальному контексту. Проблема устранена в выпуске pac-resolver 5.0.0, который переведён на использование библиотеки vm2, предоставляющей более высокий уровень изоляции, подходящий для запуска не заслуживающего доверия кода.

При использовании уязвимой версии pac-resolver атакующий через передачу специально оформленного PAC-файла может добиться выполнения своего JavaScript-кода в контексте кода проекта, использующего Node.js,если в данном проекте используются библиотеки, связанные зависимостями с pac-resolver. Наиболее популярной из проблемных библиотек является Proxy-Agent, указанная в зависимостях у 360 проектов, включая urllib, aws-cdk, mailgun.js и firebase-tools, в сумме насчитывающих более трёх миллионов загрузок в неделю.

Если приложение, связанное зависимостями с pac-resolver, загружает PAC-файл, предоставляемый системой с поддержкой протокола автоматической настройки прокси WPAD, то для подстановки вредоносных PAC-файлов злоумышленники, имеющие доступ к локальной сети, могут воспользоваться распространением настроек прокси через DHCP.

  1. Главная ссылка к новости (https://httptoolkit.tech/blog/...)
  2. OpenNews: Уязвимость в NPM-пакете node-netmask, применяемом в 270 тысячах проектов
  3. OpenNews: Проблемы с безопасностью при использовании протокола автоматической настройки прокси WPAD
  4. OpenNews: Из репозитория NPM удалены четыре пакета с бэкдорами
  5. OpenNews: Доступен пакетный менеджер NPM 7.0
  6. OpenNews: В репозитории NPM выявлены четыре пакета, пересылающие данные о пользователе
Лицензия: CC-BY
Наводку на новость прислал Artem S. Tashkinov
Тип: Проблемы безопасности
Короткая ссылка: https://opennet.ru/55728-npm
Ключевые слова: npm
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (48) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, InuYasha (??), 22:52, 02/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    По предварительным расчётам, за полгода уязвимость охватывает всё население Мидгарда )
     
  • 1.2, Аноним (2), 22:53, 02/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    Надоже, даже без работы с памятью. Кто бы сомневался. Толи ещё Rust ожидает.
     
     
  • 2.7, Ordu (ok), 00:26, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Надоже, даже без работы с памятью.

    Зато с eval'ом.

     
  • 2.34, Аноним (34), 11:57, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Просто был бы дырявый софт на Rust. Те же яйца только в профиль и большим количеством разных скобочек [{(<.
     

  • 1.3, Аноним (2), 22:55, 02/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Проблема устранена в выпуске pac-resolver 5.0.0, который переведён на использование библиотеки vm2, предоставляющей уровень изоляции для запуска не заслуживающего доверие кода.

    Эта проблема решается выкидыванием всех этих NPM и им подобных каргоф. ДНК конечно поврежденно навсегда, но есть благотварительные организации которые таких хотябы изолируют.

     
     
  • 2.4, Аноним (4), 23:03, 02/09/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я правильно тебя понял, ты предлагаешь писать код без библиотек вообще? Или у тебя есть гарантия того, что та либа, которую ты взял без некоторого менеджера зависимостей, неуязвима?
     
     
  • 3.5, Аноним (5), 23:30, 02/09/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > писать код без библиотек вообще?

    Сейчас библиотеки такие, что сложность написания кода без них гораздо ниже, чем использовать их.

     
     
  • 4.10, Аноним (10), 01:12, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Сразу видно, что ничего сложнее hello world в жизни не писал.
     
     
  • 5.15, Ag (ok), 07:50, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Хм, "hello, world" без библиотеки ввода-вывода.. ну это только на Assembler-е. И чур (на x86) без ф-ций BIOS.
     
     
  • 6.35, andy (??), 11:57, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Хм, "hello, world" без библиотеки ввода-вывода.. ну это только на Assembler-е. И чур (на x86) без > ф-ций BIOS.

    В современных, многозадачных, операционных системах, Вам не дадут из защищенного режима вызывать функции BIOS. К примеру, в Linux'е, вам следует воспользоваться int80h для x86, либо вызовом syscall для x86-64.
    https://packagecloud.io/blog/the-definitive-guide-to-linux-system-calls

     
  • 4.17, Аноним (4), 08:02, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    И ты гарантируешь отсутсвие уязвимостей в этом своем коде без библиотек?
     
     
  • 5.49, Аноним (49), 18:08, 04/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Не в ту сторону воюете
    Против библиотек никто не выступал
    И есть разница между уникальной уязвимостью одного проекта и массовой
     
  • 3.21, And (??), 08:25, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Я правильно тебя понял, ты предлагаешь писать код без библиотек вообще? Или у тебя есть гарантия того, что та либа, которую ты взял без некоторого менеджера зависимостей, неуязвима?

    Авторы изделий на JS и для JS, к сожалению, биологически повреждены и любой результат их попыток их труда опасен низким качеством.

    Что с библиотеками, что без библиотек... JS - это как Жигули - на вид приемлемо, в эксплуатации - есть много людей, которые обучены производить несравненно более качественные в применении продукты жизнедеятельности.

     
     
  • 4.33, Аноним (4), 10:32, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    В изначальном сообщении написано следующее

    > проблема решается выкидыванием всех этих NPM и им подобных каргоф

    Под "подобные карги" попадают так же всякие maven, cpan, conan и прочее выполняющее управление зависимостями. Сообщение анона говорит, что это не нужно, тогда библиотеками нужно рулить руками или не использовать библиотеки. Но разве от того, что библиотека завезена в проект руками, появляется больше гарантии на отсутсвие уязвимости в них? Или появляется больше гарантии, что в твоем велосипеде этих уязвимостей нет?

     
  • 2.19, Аноним (19), 08:06, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Жаль что тебя не изолировали
     
  • 2.26, Ненавижу SJW (?), 09:13, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ага-ага. Ты и сам не юзаешь сторонние библиотеки или только советуешь?
     
     
  • 3.50, Аноним (49), 18:09, 04/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Там было хоть слово против библиотек?
     

  • 1.6, бедный буратино (ok), 00:18, 03/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Всегда такое было, и вот опять.
     
  • 1.8, Dzen Python (ok), 00:36, 03/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Вау! В eval-языке нашли "уязвимость" - он может исполнить код, пришедший как данные!
     
     
  • 2.11, Аноньимъ (ok), 01:13, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Кому-то показалось хорошей идеей автоматически выполнять код пришедший как данные из случайного источника.
     
     
  • 3.51, Аноним (49), 18:11, 04/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Их сейчас с js на rust переучивают ускоренно, чтоб в ядро коммитили
     

  • 1.9, Аноньимъ (ok), 01:12, 03/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Указанный API явно помечен в документации как не предназначенный для запуска кода, не заслуживающего доверия, так как он не предоставляет полноценной изоляции запускаемого кода и позволяет получить доступ к изначальному контексту. Проблема устранена в выпуске pac-resolver 5.0.0, который переведён на использование библиотеки vm2, предоставляющей более высокий уровень изоляции, подходящий для запуска не заслуживающего доверия кода.

    Я правильно понимаю, что проблему устранили указанием в документации что API теперь предназначено для запуска не заслуживающего доверия кода?

    >PAC-файл содержит обычный JavaScript-код с функцией FindProxyForURL, определяющей логику выбора прокси в зависимости от хоста и запрашиваемого URL. Суть уязвимости в том, что для выполнения данного JavaScript-кода в pac-resolver применялся предоставляемый в Node.js API

    Чего блин?
    Загружать хрен пойми откуда код и выполнять его У СЕБЯ НА СЕРВЕРЕ/приложении чтобы настроить прокси?
    Что происходит?
    Что это за нафиг такой?
    Остановите это немедленно!

     
     
  • 2.32, пох. (?), 10:12, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Загружать хрен пойми откуда код и выполнять его У СЕБЯ НА СЕРВЕРЕ/приложении чтобы настроить прокси?
    > Что происходит?

    обычная настройка wpad происходит. Стандарт netscape 1996го года. Платформенно независимое решение чтоб не бегать всем юзверькам не настраивать вручную.

    wpad.dat - таки да, содержит js код. Предназначен для выполнения _браузером_ , который вообще рассчитан на выполнение непойми откуда кодов.

    Попутно у одной корпорации зла есть в dns-сервере интересный костылик, не позволяющий первому попавшемуся васяну раздать по всей твоей организации такой файлик. Но то ж корпорация, зла. А в твоем любимом systemd-allshitd - нету костылика. Весь мусор с пола - сразу в рот.

     
     
  • 3.40, Аноньимъ (ok), 18:03, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >обычная настройка wpad происходит.
    >wpad

    Сжечь.

    >wpad.dat - таки да, содержит js код. Предназначен для выполнения _браузером_ , который вообще рассчитан на выполнение непойми откуда кодов.

    Там есть какое-то оправдание хотя бы для того чтобы вместо настроек прокси выдавать жс код?

     
     
  • 4.42, пох. (?), 19:12, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты тоже разработчик, что-ли? Пойти и прочитать документацию - не?

    Код возвращает настройку прокси - отдельно для каждого возможного и невозможного урла, потому что, внезапно, они могут отличаться для разных адресов. Расскажи мне, как это сделать универсальным образом без скриптов?

    И дальше - о ужас, вообще сайт откроется! Вполне возможно - в ИНТЕРНЕТЕ! Который тоже может выполнить в твоем браузере - код!

    Разница в том, что модные-современные веб-макакеры притащили технологию, предназначенную для исполнения исключительно браузером (где этот код был тщательно ограничен в возможностях что-то пощупать вне браузера) - в саму систему. Поскольку изучить языки отличные от js уже были не в силах.

    А набор ограничений оставили по дороге - потому что нахрен бы был такой код не нужен никому (вспомним жаба-аплеты которые ничего толком не умели делать именно потому что ничего и не могли)

    Теперь вот - костылят подпорки уже на самом js. Получается не всегда.

     
     
  • 5.44, Аноньимъ (ok), 19:31, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Код возвращает настройку прокси - отдельно для каждого возможного и невозможного урла,
    > потому что, внезапно, они могут отличаться для разных адресов. Расскажи мне,
    > как это сделать универсальным образом без скриптов?

    А как это делает этот скрипт?
    Просто списка с фильтром по регуляркам недостаточно?

    >И дальше - о ужас, вообще сайт откроется! Вполне возможно - в ИНТЕРНЕТЕ! Который тоже может выполнить в твоем браузере - код!

    Этот код как бы обычно остаётся в песочнице бравзера и не изменяет настройки бравзера.
    Тоже скотство конечно.

     
  • 2.48, another_one (ok), 09:45, 04/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Я правильно понимаю, что проблему устранили указанием в документации что API теперь предназначено для запуска не заслуживающего доверия кода?

    В документации было и осталось предупреждение, что не через vm нельзя запускать недоверенный код. А проблему устранили переводом pac-resolver на стороннюю либу vm2, в которой крайне огороженная песочница с ограниченным доступом к текущему runtime.

     

  • 1.14, Аноним (14), 05:11, 03/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ура!!! 3 миллиона уязвимостей по всему миру!
     
  • 1.16, Какаянахренразница (ok), 07:54, 03/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Да не может такого быть!
     
  • 1.18, And (??), 08:04, 03/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Указанный API явно помечен в документации как не предназначенный для запуска кода, не заслуживающего доверия, так как он не предоставляет полноценной изоляции запускаемого кода и позволяет получить доступ к изначальному контексту.

    Красивая халтура. (Такое не публикуют, или код плохой. Это тот признак, по которому 3 млн. загрузок в неделю не справляются с правильным долгосрочным выбором технологии.)

     
  • 1.20, Аноним (20), 08:25, 03/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Неужели Node.js всё еще кто-то использует?
     
     
  • 2.22, Аноним (-), 08:34, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Технологии на базе Жабасрипта рулят.
     
  • 2.23, Аноним (5), 08:34, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Да, ёжики.
     
  • 2.30, Node js (?), 10:00, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Дурак! Это я вас пользую!
     

  • 1.24, Аноним (24), 08:57, 03/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Зачем 3 млн юзеров в неделю парсят PAC файлы?
     
     
  • 2.25, Аноним (25), 09:04, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это автоматические загрузки по дереву нпм-зависимостей. Юзеры даже не в курсе.
     
     
  • 3.29, anonymous (??), 09:40, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Воистину по дереву.
     
  • 2.28, 1 (??), 09:37, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    leftpad ... такой leftpad
     
  • 2.31, Node js (?), 10:02, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Зачем 3 млн юзеров в неделю парсят PAC файлы?

    а кто их спрашивал-то?!

     
     
  • 3.39, Аноньимъ (ok), 15:02, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >> Зачем 3 млн юзеров в неделю парсят PAC файлы?
    > а кто их спрашивал-то?!

    Подробности интересны.

    Какие конкретно либы и для чего.

     

  • 1.36, Аноним (34), 11:58, 03/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Можно подумать в этом вашем Пэйтоунэ не так же.
     
     
  • 2.37, Какаянахренразница (ok), 12:07, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Слабенькая отмазка.
     

  • 1.38, Алексей (??), 14:16, 03/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > PAC-файл содержит обычный JavaScript-код

    Это по определению "программа из одной строки на Perl", то есть JavaScript. Ровно с теми же последствиями. Только тут не нужно дурака перед клавиатурой, браузер скачает и запустит автоматически. Какая прелесть.


     
     
  • 2.52, Аноним (49), 18:20, 04/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Не понял, но осуждаю?

    Браузер как и пользователь вообще не причем
    Выполняет nodejs, само
    Потому что взяли кусок браузерной технологии, где оно к месту и всё хорошо, и вкорячили на сервер, где оно дырка

     

  • 1.41, Аноним (41), 18:21, 03/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Нужен meta npm с рейтингом модулей. За уязвимости рейтинг само собой снижать.
     
     
  • 2.43, пох. (?), 19:14, 03/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Нужен meta npm с рейтингом модулей. За уязвимости рейтинг само собой снижать.

    повышать же ж! Кто не сидел тот не паца...ой, простите, окошком ошибся. В ком не нашли еще увизгвимостей - тот значит 100% ненужное ненужно!

     

  • 1.45, Аноним (45), 19:49, 03/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    кто сказал, что это уязвимость?
     
  • 1.47, Онаним (?), 23:41, 03/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Любителей тянуть в рот всё свеженькое из непонятных источников опять поимели. Впрочем, так им и надо.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру