[ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компаний

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Ответить
Аватара пользователя
rssbot
Бот
Сообщения: 6002
ОС: gnu/linux

[ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компаний

Сообщение rssbot »

Представлен поразительный по своей простоте метод атаки на зависимости в приложениях, при разработке которых используются внутренние репозитории пакетов. Выявившие проблему исследователи смогли выполнить свой код на внутренних серверах 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 для привязки репозитория к каждому пакету (возможна привязка только одного репозитория).


Дополнение 1: Пакетный менеджер Cargo проблеме не подвержен, так как по умолчанию обрабатываются только пакеты с crates.io, а при использовании дополнительных репозиториев требуется явное их указание для каждой зависимости.

Дополнение 2: GitHub опубликовал рекомендации по защите внутренних репозиториев от атаки через зависимости. Рекомендации сводятся к ограничению области видимости внутренних пакетов через префикс "@" и определение привязки к внутреннему репозиторию в файле конфигурации ".npmrc".

Дополнение 3: После раскрытия информации о проблеме в репозитории NPM зафиксировано добавление около 300 пакетов, пытающихся атаковать системы через внутренние зависимости. Большинство пакетов используют код, применявшийся в оригинальном исследовании и примечание о проведении теста безопасности, но изначальный автор исследования отверг свою связь с данной активностью. Наиболее вероятно, что другие исследователи пытаются успеть заработать через программы Bug Bounty.


Источник: https://www.opennet.ru/opennews/art.shtml?num=54566
(opennet.ru, основная лента)
Последний раз редактировалось rssbot 14.02.2021 08:17, всего редактировалось 7 раз.
Причина: Updated upstream
Спасибо сказали:
Аватара пользователя
yoricI
Сообщения: 2384
ОС: gentoo fluxbox

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение yoricI »

rssbot писал(а):
10.02.2021 11:13
NPM, PyPI и RubyGems, и также проявляется в других системах, таких как NuGet, Maven и Yarn
Эти штуки имеют что-то общее с portage, apt, rpm и их потомками?
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3669
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение devilr »

Шикарно! Зная только имя и загрузив собственный пакет! Вера - штука крепкая! :D
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение Hephaestus »

rssbot писал(а):
10.02.2021 11:13
Для атаки достаточно определить имена пакетов со внутренними зависимостями и создать собственные пакеты с такими же именами в публичных репозиториях NPM, PyPI и RubyGems.
Я чего-то не догоняю.
Если я попытаюсь, к примеру, залить пакет-обманку в репу slackware или на slackbuilds.org,
или в репу Debian, кто ж меня туда пустит просто так? Там ограниченный доступ, цифровые подписи и пр.

А в этих самых NPM, PyPI, RubyGems и всяких там NuGet получается заходи кто хочешь, делай что хочешь?
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение Bizdelnick »

Эпичная дыра. И никаких тебе приоритетов репозиториев, ничего, что помогло бы её объехать. Казалось бы, и так всем понятно, что решето решетом, но что может пойти не так со своим собственным репозиторием? А даже здесь ухитрились обосраться, причём все разом одинаково.
Добавлено (13:12):
Hephaestus писал:
10.02.2021 12:30
А в этих самых NPM, PyPI, RubyGems и всяких там NuGet получается заходи кто хочешь, делай что хочешь?
Да. Для Вас это новость? На каком-нибудь гитхабе то же самое, если что.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
yoricI
Сообщения: 2384
ОС: gentoo fluxbox

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение yoricI »

Bizdelnick писал:
10.02.2021 13:12
На каком-нибудь гитхабе то же самое, если что.
Как это так, а зачем гиты-свны с паролями, пуллами и пушами, если разработчик не может обеспечить девственность своего репозитария? Посторонние же отдельно клепают изменения, отделённые от основного дерева?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение Bizdelnick »

yoricI писал:
10.02.2021 13:45
Как это так, а зачем гиты-свны с паролями, пуллами и пушами, если разработчик не может обеспечить девственность своего репозитария?
Разработчик-то может. Гитхаб не может контролировать, что там за разработчики, и что они заливают в свои репозитории. Так же и npm/pypi/etc. не контролируют владельцев пакетов.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
yoricI
Сообщения: 2384
ОС: gentoo fluxbox

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение yoricI »

Ага, тут всё дело в доверии отдельному человеку. Ну так значит, кто там влетел, пользуются всякой левизной. Своих людей надо иметь, прежде чем куда-то лезть :-)
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение Hephaestus »

Bizdelnick писал:
10.02.2021 13:12
На каком-нибудь гитхабе то же самое, если что.
Разве? Сделать коммит просто так не дадут. Максимум - пулл-реквест.
Создать форк репы я, конечно, могу, ну и что?
Во-первых, на гитхабе вроде видно, что это форк, а во-вторых, кому я нужен с этим своим форком?
Есть некая софтина с официальным сайтом, есть официальный разработчик с фамилией, именем, ником, цифровой подписью.
Все имена/явки/ссылки доступны и проверяемы.
И вот все прям побегут тянуть именно мой форк? А зачем?
Мало ли в Бразилии Педров у этой софтины форков?
Зачем брать первый попавшийся форк, если можно с таким же успехом взять официальную репу?
И вообще, гитхаб - это же не репозиторий одного проекта. Это большой базар.

Сабжевые репы -это тоже базар что ли?
Ну, если так, то им никто не поможет. Странно, что этого раньше не случилось.

Bizdelnick писал:
10.02.2021 14:24
Гитхаб не может контролировать, что там за разработчики, и что они заливают в свои репозитории.
А он и не должен. Качество/безопасность кода на совести кодера, а не гитхаба.
У этих самых кодеров репутация есть, в конце концов.
Последний раз редактировалось Hephaestus 10.02.2021 22:04, всего редактировалось 1 раз.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1380
ОС: Slackware

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение UnixNoob »

yoricI писал:
10.02.2021 15:56
Ну так значит, кто там влетел, пользуются всякой левизной.
Атаки, на сколько я понял, были согласованы. По-крайней мере в данном случае.
Hephaestus писал:
10.02.2021 16:10
А он и не должен. Качество/безопасность кода на совести кодера, а не гитхаба.
У этих самых кодеров репутация есть, в конце концов.
Сейчас участились случаи с расширениями браузеров, к примеру. Когда человек продает свое расширение и в него вставляют код, которй занимается не тем чем должен. Не совсем одно и то же конечно, но к вопросу о репутации. Не думаю что все зависимости, что могут использоваться пишутся теми, кто всем знаком и следить за судьбой каждой зависимости (продали её или забросили или просто стал заниматься кто-то другой) думаю достаточно сложная задача. Ну вернее репозитории должны быть организовано с учетом особенностей безопасности, которые видимо раньше, в силу каких-то обстоятельств, не учитывались.
AUR в ArchLinux отчасти ругают за это же, что невозможно уследить за таким числом пакетов, чтобы все было чисто и там были случаи вирусов или чего-то такого.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение Bizdelnick »

yoricI писал:
10.02.2021 15:56
Ну так значит, кто там влетел, пользуются всякой левизной.
В данном случае — нет. Читайте новость внимательнее и если не полностью, то хотя бы до конца второго абзаца.
Hephaestus писал:
10.02.2021 16:10
Качество/безопасность кода на совести кодера, а не гитхаба.
Ну вот и в npm/pypi/etc. ровно та же модель.
Hephaestus писал:
10.02.2021 16:10
И вообще, гитхаб - это же не репозиторий одного проекта. Это большой базар.

Сабжевые репы -это тоже базар что ли?
Ну, если так, то им никто не поможет. Странно, что этого раньше не случилось.
Базар, да. Уханьский.
UnixNoob писал:
10.02.2021 16:32
Сейчас участились случаи с расширениями браузеров, к примеру. Когда человек продает свое расширение и в него вставляют код, которй занимается не тем чем должен. Не совсем одно и то же конечно, но к вопросу о репутации.
Да почти одно и то же. С той разницей, что расширения всё же проходят минимальный аудит, который, впрочем, несложно обмануть.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение Hephaestus »

UnixNoob писал:
10.02.2021 16:32
Не думаю что все зависимости, что могут использоваться пишутся теми, кто всем знаком и следить за судьбой каждой зависимости (продали её или забросили или просто стал заниматься кто-то другой) думаю достаточно сложная задача.
Я вообще-то немного другое имел в виду.
Bizdelnick писал:
10.02.2021 16:54
Ну вот и в npm/pypi/etc. ровно та же модель.
Стоп. Я не фанат всяких npm, pypi и им подобных, поэтому могу ошибаться.
Но насколько я понимаю, какой-нибудь pip стягивает пакет и пачку каскадных зависимостей к нему.
И всё это, практически, не глядя. И хорошо ещё, если это исходники, а не бинарники.
На гитхабе разве то же самое?
Я не знаю случаев, когда с гитхаба автоматом вытягивалась цепочка зависимостей.
Там обычно с каждой программой/библиотекой нужно колдовать отдельно.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение Bizdelnick »

Hephaestus писал:
10.02.2021 22:19
Я не знаю случаев, когда с гитхаба автоматом вытягивалась цепочка зависимостей.
Никогда не сталкивались с сабмодулями?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1380
ОС: Slackware

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение UnixNoob »

Hephaestus писал:
10.02.2021 22:19
Я вообще-то немного другое имел в виду.
А что вы имели в виду, говоря о репутации?
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: [ON] Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компа

Сообщение Hephaestus »

Bizdelnick писал:
10.02.2021 22:49
Никогда не сталкивались с сабмодулями?
Бог миловал.
Я не могу похвастаться, что досконально изучил Pro Git book,
но на сабмодули там натыкался, хотя и не вникал за ненадобностью.

Однако у меня большое число пакетов-самосборов, исходники в том числе и с гитхаба,
и сабмодули не потребовались ни разу за всё время.
Отсюда могу сделать вывод, что сабмодули не являются обязательным элементом - без них можно обойтись.
В то время как зависимости в pip - штука практически неизбежная и обойтись без них вряд ли удастся.

Поэтому "базар в Github" и "базар в PyPi" - это всё-таки две большие разницы.
Добавлено (23:24):
UnixNoob писал:
10.02.2021 22:56
А что вы имели в виду, говоря о репутации?
Я имел в виду, что сопровождающие пакетов,
кодеры, дистростроители и прочие созидающие и заинтересованные участники - это вполне конкретные люди
с именами, фамилиями, адресами эл. почты и всякими там эл. подписями.
И у них есть репутация. И именно такие люди получают право коммита, доступ к репам и разные другие возможности. И меньше всего эти люди хотели бы, чтобы от их имени совершались гадости.

А злоумышленник, наоборот, изо всех сил старается скрыться.
Выдать себя за другого, или вообще выглядеть сирым анонимом.

И в этом смысле давать сирому анониму возможность протолкнуть пакет в репу - это как-то странно.
А если он проталкивает пакет не как сирый аноним, а как вполне идентифицированный участник, то вот тут как раз и поднимается вопрос репутации.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Ответить