
Zero-day в AppleMediaServices: сбой при получении bag-файла отключает подпись Mescal/Absinthe. Запросы к сервисам Apple отправляются без подписи, что создаёт риск понижения версии, повторного воспроизведения и обхода. Включает анализ, данные журналов и логику PoC-атаки.
Краткое описание
Эта проблема представляет собой активную уязвимость нулевого дня (Zero-Day) и отражает системный недостаток проектирования в AppleMediaServices.framework, а не регрессию или ошибку, связанную с конкретной версией.
Критический недостаток fail-open в фреймворке AppleMediaServices от Apple позволяет незаметно отключать подпись запросов, если не удаётся загрузить удалённый файл конфигурации (так называемый «Bag»). Это затрагивает iOS, macOS, tvOS и watchOS.
Когда Bag не может быть получен — из-за манипуляций с DNS, тайм-аутов или сетевых помех — демоны AppleMediaServices отключают подпись Mescal/Absinthe и отправляют неподписанные запросы на серверы Apple. Такие запросы лишены средств защиты целостности и делают пользователей уязвимыми для атак понижения версии (downgrade) и повторного воспроизведения (replay).
Логи (доказательства):
Обнаружение
Затронутые системы
Затронуты все платформы Apple, использующие AppleMediaServices.framework.
Затронутые демоны включают:
Обзор уязвимости
Устройства Apple загружают динамический конфигурационный Bag со следующего эндпоинта:
https://bag.itunes.apple.com/bag.xml?deviceClass=...&format=json
Эта конфигурация включает флаги, такие как useAMSMescal, mescalURL и absintheURL, которые определяют, должны ли исходящие запросы быть подписаны.
Если Bag не удаётся загрузить, AppleMediaServices регистрирует сбой в журнале, отключает логику подписи и отправляет неподписанные запросы. Отсутствуют проверка подписи, контроль целостности и принудительный механизм отката. Bag не аутентифицирован и не подписан, что делает состояние безопасности уязвимым к сетевым помехам.
Proof of Concept (доказательство концепции)
Предварительные условия:
Шаги эксплуатации:
Заблокируйте или измените доступ к эндпоинту Bag с помощью DNS-ответов NXDOMAIN, отброшенных TCP-рукопожатий или задержанных ответов.
Наблюдайте в системных журналах указание на то, что Bag не удалось загрузить и подписи Mescal/Absinthe пропускаются.
Инициируйте отправку запросов системными компонентами (например, App Store, приложение «Музыка»). Отслеживайте сетевой трафик и подтвердите отсутствие заголовков подписи:
Результат:
Неподписанный трафик передаётся на эндпоинты Apple без проверки. Это допускает манипуляции, повторное воспроизведение и другие риски для целостности.
Модели угроз
bag.itunes.apple.comAMSBagManager с помощью Frida или джейлбрейка для переопределения флагов безопасностиРекомендуемые меры по устранению
Подписанная конфигурация Подписывайте Bag с помощью CMS, JWT или HMAC и проверяйте подписи на стороне клиента.
Fail-Secure значения по умолчанию AppleMediaServices должен блокировать трафик, зависящий от подписи, когда Bag не может быть получен или проверен.
Принудительное выполнение на сервере Серверные API Apple должны отклонять неподписанные запросы, требующие защиты Mescal или Absinthe.
Проверенное кэширование Содержимое Bag должно кэшироваться только после прохождения проверок целостности и при соблюдении заданных ограничений срока действия.
Обоснование критичности
Устройства Apple полагаются на подписанные запросы для обеспечения доверия — от App Store до воспроизведения медиа. Если эти подписи исчезают всякий раз, когда не удаётся загрузить файл конфигурации, атакующие в Wi-Fi сети могут лишить трафик целостности и внедрять или повторно воспроизводить трафик без ведома пользователя. Один потерянный запрос Bag означает, что гарантии безопасности Apple перестают работать (fail open).