Критические уязвимости, обнаруженные в менеджере зависимостей CocoaPods, позволяли злоумышленникам перехватывать контроль над тысячами заброшенных пакетов, выполнять shell-команды и захватывать учетные записи. В итоге это могло повлиять на миллионы приложений для iOS и macOS, обернувшись массовыми атаками на цепочки поставок.
CocoaPods — опенсорсный менеджер зависимостей для проектов Swift и Objective-C, насчитывающий более 100 000 библиотек и используемый как минимум тремя миллионами приложений в экосистеме Apple.
В 2014 году CocoaPods перешел на trunk-сервер, который выступает в качестве централизованного репозитория и платформы распространения. В результате этой миграции тысячи пакетов оказались заброшены, так как авторство было обнулено для всех, и во многих случаях предыдущие владельцы оказались неизвестны.
Хотя авторам предлагалось заявить о своем праве на пакеты и восстановить контроль, 1870 пакетов, включая широко используемые в других библиотеках, так и остались невостребованными.
Специалисты компании EVA Information Security обнаружили, что все пакеты, владельцы которых так и не заявили о своих правах, автоматически ассоциировались с владельцем по умолчанию с одинаковым email-адресом (unclaimed-pods@cocoapods.org), а публичный API для заявления прав собственности оставался доступным почти 10 лет, позволяя любому желающему захватить чужие пакеты.
По словам экспертов, проблемы затрагивали «значительную часть экосистемы приложений на Swift и Objective-C (включая iOS, macOS и другое ПО для устройств Apple)». То есть количество уязвимых приложений исчислялось тысячами или даже миллионами.
Дело в том, что когда разработчики вносят изменения в один из своих подов («pod», так в CocoaPods называют отдельные пакеты), зависимые приложения обычно автоматически включают их в обновления, без какого-либо участия конечных пользователей.
«Многие приложения способны получить доступ к самой конфиденциальной информации пользователя: данным банковских карт, медицинским записям, личным материалам и многому другому, — пишут исследователи. — Инъекции кода в эти приложения могут позволить злоумышленникам получить доступ к этой информации практически с любой целью: для вымогательства, мошенничества, шантажа, корпоративного шпионажа... Компании при этом могли подвергнуться серьезным юридическим и репутационным рискам».
Так, злоумышленники могли использовать уязвимость CVE-2024-38368 (9,3 балла по шкале CVSS), чтобы завладеть брошенными подами, а затем модифицировать их содержимое или подменить его вредоносным кодом.
«Мы обнаружили упоминания о брошенных подах в документации и Terms of service приложений Meta* (Facebook**, WhatsApp), Apple (Safari, AppleTV, Xcode), Microsoft (Teams), а также в TikTok, Snapchat, Amazon, LinkedIn, Netflix, Okta, Yahoo, Zynga и многих других. В целом, мы выявили 685 подов, которые имели явные зависимости и использовали бесхозные пакеты», — рассказывают эксперты.
Вторая уязвимость, CVE-2024-38366 (10 баллов по шкале CVSS), представляла собой ошибку удаленного выполнения кода на сервере аутентификации CocoaPods, что позволяло выполнить shell-команду для валидации почтового домена в процессе регистрации разработчика в качестве владельца пода.
По данным исследователей, уязвимые методы, используемые RFC822 для верификации электронной почты, позволяли злоумышленникам осуществить инъекцию команды, которая в итоге выполнялась на trunk-сервере. В результате атакующий получал возможность эксплуатировать ненадежный процесс верификации email для манипулирования загружаемыми пакетами или их подмены.
«Если неавторизованный злоумышленник скомпрометирует сервер, потенциально он получит возможность сделать дамп сессионных токенов всех владельцев подов, отравить клиентский трафик или полностью отключить сервер», — отметили в EVA.
Третья уязвимость, CVE-2024-38367 (8,2 баллов по шкале CVSS), тоже была связана с процессом аутентификации, позволяя злоумышленнику перехватить сессию владельца пода и завладеть чужим trunk-аккаунтом CocoaPods.
Дело в том, что CocoaPods аутентифицирует новые устройства, создавая сессию, которая становится активной лишь после того, как человек перейдет по ссылке, которую trunk-сервер сгенерировал и отправил на email-адрес, указанный клиентом при запросе сессии.
Обнаружилось, что злоумышленник может подделать заголовок X-Forwarded-Host (XFH), используемый для идентификации, и сервер использует этот заголовок для создания URL, отправляемого по электронной почте. Полученный в результате URL может привести пользователя на сторонний сайт, который может оказаться вредоносным и похитить сессионные токены.
«С помощью спуфинга HTTP-заголовка и эксплуатации неверно настроенных средств защиты электронной почты злоумышленники могут осуществить zero-click атаку, которая предоставит им доступ к токену верификации учетной записи разработчика. Это позволит атакующим вносить изменения в пакеты на сервере CocoaPods и приведет к атакам на цепочку поставок и 0-day атакам», — добавляют исследователи.
Разработчики CocoaPods устранили все перечисленные уязвимости на стороне сервера в сентябре и октябре 2023 года, то есть теперь их эксплуатация уже невозможна. Подчеркивалось, что никаких признаков их использования обнаружено не было.
После того как исследователи EVA в частном порядке уведомили разработчиков CocoaPods о проблемах, те стерли все сессионные ключи, чтобы гарантировать, что никто не сможет получить доступ к чужим учетным записям, не имея контроля над зарегистрированным email-адресом.
Также сопровождающие CocoaPods обновили процедуру восстановления заброшенных подов, и теперь она требует прямого обращения к сопровождающим.
* Деятельность компания Meta признана экстремисткой и запрещена на территории РФ.
** Принадлежит компании Meta, которая признана экстремисткой и запрещена на территории РФ.