Исследователь взломал системы Apple, Microsoft и 10-ов остальных компаний, атаковав цепочки зависимостей

Исследователь Алекс Бирсан нашел обычной метод взлома внутренних систем. Чтоб выполнить код на сервере, довольно подменить личные пакеты с зависимостями одноимёнными пакетами из общедоступных репозиториев. Обычные менеджеры пакетов NPM, PyPI, RubyGems практически делали это сами. При всем этом админы не получали никаких извещений, а системы продолжали работать без сбоев.

Способ основан на том, что компании употребляют в приложениях зависимости из обычных репозиториев, также внутренние зависимости, которые хранятся в собственных репозиториях и не распространяются на публике. Если знать имена пакетов с внутренними зависимостями и сделать пакеты с таковыми же именами в общественных репозиториях, то можно выполнить код на серверах компании. Это соединено с тем, что пакетные менеджеры вроде npm, pip и gem пробуют загрузить внутренние зависимости компаний в том числе из общественных репозиториев. Неувязка не специфична для NPM, PyPI, RubyGems и проявляется в остальных системах, посреди которых NuGet, Maven и Yarn.

Мысль таковой атаки возникла опосля того, как исследователь исследовал файлы манифеста package.json из пакета npm, который употреблялся снутри системы PayPal. Бирсан нашел, что неких пакетов нет в общедоступном репозитории npm. Это были внутренние пакеты, сделанные PayPal. Опосля этого исследователь начал поиск имён внутренних пакетов в репозиториях GitHub либо в CDN узнаваемых компаний. Собрав базу, он сделал поддельные пакеты с таковыми же именами в общественных репозиториях, таковых как npm, PyPI и RubyGems. Любой пакет выходил под настоящей учётной записью и содержал пояснение, что он предназначен для исследования сохранности.

С этого файла началось огромное исследование сохранности / medium.com.@alex.birsan

Скоро сделалось понятно, что если пакет с одним и этим же именованием находится и в общедоступном, и в личном репозитории, то общественный пакет получает ценность. Используя эту технику, Бирсан провёл удачные атаки на серверы Microsoft, Apple, PayPal, Shopify, Netflix, Tesla, Yelp и Uber. В PyPI на ценность загрузки влиял номер версии — загружалась более свежайшая версия пакета, вне зависимости от репозитория. В NPM и RubyGems ценность зависел лишь от репозитория.

Митап «Жажда скорости: DevSecOps за 2 недельки»

16 февраля в 16:00, Онлайн, Беcплатно

tproger.ru

Действия и курсы на tproger.ru

75 % всех зафиксированных запусков кода были соединены с загрузкой NPM-пакетов. Это разъясняется тем, что имён внутренних модулей JavaScript было найдено намного больше, чем имён зависимостей на Python и Ruby. Внутренние gem-пакеты были обнаружены у 8 компаний, 4 из их удалось штурмовать, создав дубликат пакета в RubyGems. Посреди жертв оказалась Spotify, сборочный сервер которой установил поддельный пакет shopify-cloud спустя всего несколько часов опосля его публикации. Поддельный Node.js-пакет idms-pmrpc попал в сеть Apple, в том числе на сервер, связанный с Apple ID.

О собственных выводах исследователь докладывал компаниям. Он подчеркивает, что любая организация, которая была предана атаке, предоставила разрешение на проверку собственной сохранности или в общественной программке вознаграждения, или в личной форме. Компании уже выплатили ему вознаграждение — всего Бирсан получил 130 тыщ баксов.

Как защититься от атак на зависимости?

Опосля исследования препядствия компания Microsoft опубликовала советы по защите сборочных систем от атак на зависимости:

    В PyPI рекомендуется применять опцию «–index-url» заместо «–extra-index-url» для переопределения приоритета обработки зависимостей.
    В NuGet в nuget.config в секции packageSources рекомендуется применять запись <clear /> для удаления наследуемых конфигураций, также очевидно добавлять внутренние репозитории через <add />.
    В Maven рекомендуется настроить одно общее зеркало с помощью опций <mirrorOf>*</mirrorOf> и перенаправлять в него все запросы к репозиториям. Иной вариант —  переопределение репозиториев по дефлоту с помощью опции <releases>.
    В NPM и Yarn в пакетах рекомендуется найти scopeprefix для привязки репозитория к любому пакету (вероятна привязка лишь 1-го репозитория).

Источник: tproger.ru

Поделиться с друзьями:
Андройд IT
Добавить комментарий