Исследователю Алексу Бирсану удалось взломать внутренние системы более 35 крупных компаний, включая Microsoft, Apple, PayPal, Shopify, Netflix, Yelp, Tesla и Uber, в ходе атаки на цепочку поставок программного обеспечения. Атака заключалась в загрузке вредоносного ПО в репозитории с открытым исходным кодом, включая PyPI, npm и RubyGems, которое попадало во внутренние приложения компании. При этом от целевой системы не требовалось никаких действий.
При атаке использовался конструктивный недостаток экосистем с открытым исходным кодом или путаница зависимостей.
Бирсан уже получил за эксплойт более $130 тысяч в качестве вознаграждений.
Исследователю предоставили файлы манифеста package.json из пакета npm, используемого внутри системы PayPal. Бирсан заметил, что некоторые из пакетов не присутствовали в общедоступном репозитории npm, а были частными пакетами npm, созданными PayPal. Тогда он решил выяснить, есть ли пакеты с такими же именами в общедоступном репозитории npm.
Бирсан начал поиск имен внутренних пакетов в файлах манифестов в репозиториях GitHub или в CDN известных компаний. Затем он начал создавать поддельные пакеты с использованием тех же имен в репозиториях с открытым исходным кодом, таких как npm, PyPI и RubyGems. Каждый выходил под реальной учетной записью исследователя с пояснением: «Этот пакет предназначен для целей исследования безопасности и не содержит никакого полезного кода».
Вскоре Бирсан понял, что если пакет зависимостей, используемый приложением, существует как в общедоступном репозитории с открытым исходным кодом, так и в частной сборке, то публичный пакет получит приоритет и будет извлечен без каких-либо действий со стороны разработчика.
Используя эту технику, Бирсан провел успешную атаку цепочки поставок против Microsoft, Apple, PayPal, Shopify, Netflix, Tesla, Yelp и Uber, просто опубликовав общедоступные пакеты с тем же именем, что и у внутренних пакетов компаний. Они включали сценарии предварительной установки, которые автоматически запускали извлечение идентифицирующей информации с ПК.
Зная, что его сценарии будут устанавливать соединения из корпоративных сетей, Бирсан решил использовать DNS для эксфильтрации данных, чтобы обойти обнаружение.
После проверки того, что поддельный компонент успешно проник в корпоративную сеть, Бирсан сообщал о своих выводах соответствующей компании и получал вознаграждение за обнаружение ошибок.
Исследователь подчеркивает, что каждая организация, на которую было направлено это исследование, предоставила разрешение на проверку своей безопасности либо в публичной программе вознаграждений, либо путем частного соглашения.
Microsoft выплатила Бирсану самое высокое вознаграждение в размере $40 тысяч и выпустила официальный документ по этой проблеме безопасности. Компания идентифицировала ее как CVE-2021-24105 для продукта Azure Artifactory. Однако компания отметила, что проблема должна быть исправлена путем перенастройки инструментов установки и рабочих процессов, а не путем исправлений внутри самих репозиториев пакетов.
PayPal также публично обнародовала отчет Бирсана, в котором упоминается сумма вознаграждения в размере $30 тысяч.
Однако директор Python Software Foundation Дастин Инграм заявил, что даже публичное исследование не является достаточным поводом для того, чтобы размещать сторонние пакеты на PyPI. Он подчеркнул, что загрузка незаконных пакетов в PyPI ложится чрезмерным бременем на тех, кто поддерживает его работу.
Сам Бирсан отмечает, что по-прежнему существует возможность таких атак, особенно на платформах с открытым исходным кодом.
Sonatype выпустила на GitHub скрипт, который пользователи Nexus Repository Manager могут запустить, чтобы сравнить частные пакеты с именами присутствующих в общедоступных репозиториях npm, RubyGems и PyPI.