Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компаний
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Представлен поразительный по своей простоте метод атаки на зависимости в приложениях, при разработке которых используются внутренние репозитории пакетов. Выявившие проблему исследователи смогли выполнить свой код на внутренних серверах 35 компаний, среди которых PayPal, Micrоsoft, Apple, Netflix, Uber, Tesla и Shopify. Взломы проводились в рамках программ Bug Bounty, согласованно с атакуемыми компаниями, и уже принесли авторам 130 тысяч долларов, выплаченных в форме вознаграждений за выявление уязвимостей (выплаты продолжают поступать).
Метод основан на том, что многие компании используют в своих внутренних приложениях зависимости из стандартных репозиториев NPM, PyPI и RubyGems, а также внутренние зависимости, которые не распространяются публично и загружаются из собственных репозиториев. Проблема в том, что пакетные менеджеры, такие как npm, pip и gem, пытаются загрузить внутренние зависимости компаний в том числе и из публичных репозиториев. Для атаки достаточно определить имена пакетов со внутренними зависимостями и создать собственные пакеты с такими же именами в публичных репозиториях NPM, PyPI и RubyGems. Проблема не специфична для NPM, PyPI и RubyGems, и также проявляется в других системах, таких как NuGet, Maven и Yarn.
Идея предложенного метода появилась после того, как исследователь
случайно обратил внимание, что в публикуемом на GitHub общедоступном коде многие компании не очищают из manifest-файлов упоминание дополнительных зависимостей, применяемых во внутренних проектах или при реализации расширенной функциональности. Подобные следы были найдены в JavaScript-коде web-сервисов, а также Node.JS, Python и Ruby проектах многих компаний. Основные утечки были связаны со встраиванием содержимого файлов package.json в публично доступный JavaScript-код в процессе сборки проекта, а также использованием элементов реальных путей в вызовах require(), по которым можно было судить об именах внутренних зависимостей.
Сканирование нескольких миллионов
корпоративных доменов позволило выделить несколько тысяч имён JavaScript-пакетов, отсутствующих в репозитории NPM.
Собрав базу внутренних имён пакетов исследователь решился на эксперимент по взлому инфраструктуры компаний, участвующих в программах Bug Bounty. Результаты оказались неожиданно эффективными и исследователю удалось выполнить свой код на многих компьютерах разработчиков и серверах, отвечающих за сборку или тестирование на базе систем непрерывной интеграции.
При загрузке зависимостей пакетные менеджеры npm, pip и gem в первую очередь устанавливали пакеты из первичных публичных репозиториев NPM, PyPI и RubyGems, которые рассматривались как более приоритетные. Наличие аналогичных пакетов с теми же именами в приватных репозиториях компаний игнорировалось без вывода какого-либо предупреждения и не приводя к сбоям, которые бы привлекли внимание администраторов. В PyPI на приоритет загрузки влиял номер версии (независимо от репозитория загружалась наиболее свежая версия пакета).
В NPM и RubyGems приоритет зависел только от репозитория.
Исследователь разместил в репозиториях NPM, PyPI и RubyGems пакеты, пересекающиеся с названиями найденных внутренних зависимостей, добавив в скрипт, запускаемый перед началом установки (preinstall в NPM), код для сбора информации о системе и отправки полученных сведений на внешний хост. Все опубликованные дубликаты пакетов были снабжены примечанием о проведении исследования. Для передачи сведений об успехе взлома в обход межсетевых экранов, блокирующих внешний трафик, использовался метод организации скрытого канала связи поверх протокола DNS. Запускаемый код осуществлял резолвинг хоста в подконтрольном атакующему домене, что позволяло на DNS-сервере собирать информацию об успешных операциях. Передавались сведения о хосте, имени пользователя и текущем пути.
75% от всех зафиксированных запусков кода были связаны с загрузкой NPM-пакетов, в основном из-за того, что имён внутренних JavaScript модулей было найдено значительно больше, чем имён зависимостей на Python и Ruby. Имена внутренних gem-пакетов были обнаружены всего у 8 компаний, из которых 4 удалось успешно атаковать через создание дубликата пакета в RubyGems. В том числе таким способом была атакована компания Shopify, сборочный сервер которой автоматически установил поддельный gem-пакет shopify-cloud спустя всего несколько часов после публикации. Поддельный Node.js-пакет idms-pmrpc был установлен на нескольких компьютерах во внутренней сети компании Apple, в том числе на сервере, связанном с сервиcом Apple ID.
В инфраструктуре Microsoft удалось выполнить Python-пакет, который был установлен на серверах, отвечающих за сборку платформы .NET Core, из публичного репозитория PyPI из-за подключения внутреннего репозитория при помощи опции "--extra-index-url", при которой источник загрузки определяет версия пакета. В проектах на Ruby похожий эффект достигается при использовании
"gem install --source". В случае, если бы атака проводилась злоумышленниками, полученного доступа было бы достаточно для внедрения бэкдора в .NET Core.
Компания Microsoft опубликовала рекомендации по защите сборочных систем от атак на зависимости:
- В PyPI рекомендуется использовать опцию "--index-url" для переопределения приоритета обработки зависимостей, а не "--extra-index-url"
- В NuGet в nuget.config в секции packageSources рекомендуется использовать запись <clear /> для удаления наследуемых конфигураций и явно добавлять приватные репозитории через запись <add />.
- В Maven рекомендуется настроить одно общее зеркало при помощи опций <mirrorOf>*</mirrorOf> и перенаправлять в него все запросы к репозиториям. Другим вариантом является переопределение репозиториев по умолчанию при помощи настройки <releases>.
- В NPM и Yarn в пакетах рекомендуется определить scopeprefix для привязки репозитория к каждому пакету (возможна привязка только одного репозитория).
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://medium.com/@alex.birsa...)
- OpenNews: В RubyGems выявлено 724 вредоносных пакета
- OpenNews: Применение тайпсквоттинга для распространения вредоносных модулей NPM, PyPI и Gems
- OpenNews: Уязвимость в NPM, позволяющая изменить произвольные файлы при установке пакета
- OpenNews: Техника скрытой передачи данных через изменение яркости LCD-экрана
- OpenNews: Техника скрытой передачи данных через генерацию чипами памяти сигнала, улавливаемого по Wi-Fi
Похожие новости:
- [JavaScript, Node.JS] Управление версиями Node.js и NPM с помощью NVM (перевод)
- [Тестирование IT-систем, Тестирование веб-сервисов, Управление разработкой, DevOps] Как мы строили параллельные вселенные для нашего (и вашего) CI/CD пайплайна в Octopod
- [Java, Тестирование веб-сервисов] Приложения с тяжелой наследственностью. Поддержка или реставрация?
- [Информационная безопасность, Тестирование IT-систем, XML, IT-стандарты] XCCDF и OVAL: основа формализации аудита информационной безопасности
- [Управление проектами] PMP 2021. Подготовка
- [Информационная безопасность, Open source, DevOps] Автоматизируем поиск секретов в git и ansible
- [Информационная безопасность, CTF] HackTheBox. Прохождение Worker. Работаем с SVN. Используем Azure DevOps для захвата хоста
- [SQL, Визуализация данных] 14 практических советов по использованию Tableau
- [] Строим систему для мониторинга качества frontend-проектов
- [Программирование, Java, API, Хакатоны] Тривиальная и неправильная «облачная» компиляция
Теги для поиска: #_hack, #_dependency, #_npm, #_gem, #_pip
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:39
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Представлен поразительный по своей простоте метод атаки на зависимости в приложениях, при разработке которых используются внутренние репозитории пакетов. Выявившие проблему исследователи смогли выполнить свой код на внутренних серверах 35 компаний, среди которых PayPal, Micrоsoft, Apple, Netflix, Uber, Tesla и Shopify. Взломы проводились в рамках программ Bug Bounty, согласованно с атакуемыми компаниями, и уже принесли авторам 130 тысяч долларов, выплаченных в форме вознаграждений за выявление уязвимостей (выплаты продолжают поступать). Метод основан на том, что многие компании используют в своих внутренних приложениях зависимости из стандартных репозиториев NPM, PyPI и RubyGems, а также внутренние зависимости, которые не распространяются публично и загружаются из собственных репозиториев. Проблема в том, что пакетные менеджеры, такие как npm, pip и gem, пытаются загрузить внутренние зависимости компаний в том числе и из публичных репозиториев. Для атаки достаточно определить имена пакетов со внутренними зависимостями и создать собственные пакеты с такими же именами в публичных репозиториях NPM, PyPI и RubyGems. Проблема не специфична для NPM, PyPI и RubyGems, и также проявляется в других системах, таких как NuGet, Maven и Yarn. Идея предложенного метода появилась после того, как исследователь случайно обратил внимание, что в публикуемом на GitHub общедоступном коде многие компании не очищают из manifest-файлов упоминание дополнительных зависимостей, применяемых во внутренних проектах или при реализации расширенной функциональности. Подобные следы были найдены в JavaScript-коде web-сервисов, а также Node.JS, Python и Ruby проектах многих компаний. Основные утечки были связаны со встраиванием содержимого файлов package.json в публично доступный JavaScript-код в процессе сборки проекта, а также использованием элементов реальных путей в вызовах require(), по которым можно было судить об именах внутренних зависимостей. Сканирование нескольких миллионов корпоративных доменов позволило выделить несколько тысяч имён JavaScript-пакетов, отсутствующих в репозитории NPM. Собрав базу внутренних имён пакетов исследователь решился на эксперимент по взлому инфраструктуры компаний, участвующих в программах Bug Bounty. Результаты оказались неожиданно эффективными и исследователю удалось выполнить свой код на многих компьютерах разработчиков и серверах, отвечающих за сборку или тестирование на базе систем непрерывной интеграции. При загрузке зависимостей пакетные менеджеры npm, pip и gem в первую очередь устанавливали пакеты из первичных публичных репозиториев NPM, PyPI и RubyGems, которые рассматривались как более приоритетные. Наличие аналогичных пакетов с теми же именами в приватных репозиториях компаний игнорировалось без вывода какого-либо предупреждения и не приводя к сбоям, которые бы привлекли внимание администраторов. В PyPI на приоритет загрузки влиял номер версии (независимо от репозитория загружалась наиболее свежая версия пакета). В NPM и RubyGems приоритет зависел только от репозитория. Исследователь разместил в репозиториях NPM, PyPI и RubyGems пакеты, пересекающиеся с названиями найденных внутренних зависимостей, добавив в скрипт, запускаемый перед началом установки (preinstall в NPM), код для сбора информации о системе и отправки полученных сведений на внешний хост. Все опубликованные дубликаты пакетов были снабжены примечанием о проведении исследования. Для передачи сведений об успехе взлома в обход межсетевых экранов, блокирующих внешний трафик, использовался метод организации скрытого канала связи поверх протокола DNS. Запускаемый код осуществлял резолвинг хоста в подконтрольном атакующему домене, что позволяло на DNS-сервере собирать информацию об успешных операциях. Передавались сведения о хосте, имени пользователя и текущем пути. 75% от всех зафиксированных запусков кода были связаны с загрузкой NPM-пакетов, в основном из-за того, что имён внутренних JavaScript модулей было найдено значительно больше, чем имён зависимостей на Python и Ruby. Имена внутренних gem-пакетов были обнаружены всего у 8 компаний, из которых 4 удалось успешно атаковать через создание дубликата пакета в RubyGems. В том числе таким способом была атакована компания Shopify, сборочный сервер которой автоматически установил поддельный gem-пакет shopify-cloud спустя всего несколько часов после публикации. Поддельный Node.js-пакет idms-pmrpc был установлен на нескольких компьютерах во внутренней сети компании Apple, в том числе на сервере, связанном с сервиcом Apple ID. В инфраструктуре Microsoft удалось выполнить Python-пакет, который был установлен на серверах, отвечающих за сборку платформы .NET Core, из публичного репозитория PyPI из-за подключения внутреннего репозитория при помощи опции "--extra-index-url", при которой источник загрузки определяет версия пакета. В проектах на Ruby похожий эффект достигается при использовании "gem install --source". В случае, если бы атака проводилась злоумышленниками, полученного доступа было бы достаточно для внедрения бэкдора в .NET Core. Компания Microsoft опубликовала рекомендации по защите сборочных систем от атак на зависимости:
=========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:39
Часовой пояс: UTC + 5