Специалисту по безопасности Алексу Бирсану (Alex Birsan) удалось взломать внутренние системы более 35 крупных компаний, включая Microsoft, Apple, PayPal, Shopify, Netflix, Yelp, Tesla и Uber, в ходе новой атаки на цепочку поставок программного обеспечения.
Атака заключалась в загрузке вредоносного ПО в репозитории с открытым исходным кодом, включая PyPI, npm и RubyGems, которые затем автоматически рапространялись по внутренним приложениям компании.
В отличие от традиционных атак с тайпсквоттингом, основанные на тактике социальной инженерии или неправильном написании жертвой имени пакета, эта конкретная атака на цепочки поставок является более сложной, поскольку она не требует никаких действий со стороны жертвы, которая автоматически получает вредоносные пакеты.
Это связано с тем, что атака использовала уникальный конструктивный недостаток экосистем с открытым исходным кодом, называемый путаницей зависимостей (dependency confusion).
Как взламывались компании:
В прошлом году исследователь в вопросах безопасности Алекс Бирсан натолкнулся на идею, работая с другим специалистом в этой области — Джастином Гарднером, который поделился с ним файлом манифеста package.json из пакета npm, используемого внутри PayPal.
Бирсан заметил, что некоторые из пакетов файлов манифеста не присутствовали в общедоступном репозитории npm, а были частными пакетами npm, созданными PayPal, которые используются и хранятся внутри компании.
Увидев это, исследователь задался вопросом, должен ли пакет с таким же именем существовать в общедоступном репозитории npm в дополнение к частному репозиторию NodeJS, какой из них получит приоритет?
Чтобы проверить эту гипотезу, Бирсан начал поиск имен частных внутренних пакетов, которые он мог найти в файлах манифестов в репозиториях GitHub или в CDN известных компаний, но не существовал в общедоступных репозиториях пакетов с открытым исходным кодом.
Затем исследователь начал создавать поддельные проекты с использованием тех же имен в репозиториях с открытым исходным кодом, таких как npm, PyPI и RubyGems.
Каждый пакет, опубликованный Бирсаном, был сделан под его реальной учетной записью и явно имел заявление об отказе от ответственности, в котором говорилось: «Этот пакет предназначен для исследования безопасности и не содержит никакого полезного кода».
Вскоре Бирсан понял, что если пакет зависимостей, используемый приложением, существует как в общедоступном репозитории пакетов с открытым исходным кодом, так и в частной сборке, то публичный пакет получит приоритет и будет извлечен вместо него — без какого-либо вмешательства со стороны разработчика.
В некоторых случаях, как в случае с пакетами PyPI, исследователь заметил, что пакет с более высокой версией будет иметь приоритет независимо от того, где он находится.
Используя эту технику, Бирсан провел успешную атаку на цепочки поставок против Microsoft, Apple, PayPal, Shopify, Netflix, Tesla, Yelp и Uber, просто опубликовав общедоступные пакеты с тем же именем, что и внутренние пакеты компании.
В целом исследователю удалось заработать более 130 000 долларов США за счет участия в программе вознаграждений за обнаружение ошибок в ПО (bug bounty programs).