
Proof-of-concept Python скрипт, демонстрирующий эксфильтрацию файлов iOS через вредоносную симлинку при восстановлении резервной копии устройства, нацеленный на сервис com.apple.mobile.MCInstall для произвольного чтения файлов.
ОЧЕНЬ ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ: ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ЯВЛЯЕТСЯ ПРОВЕРКОЙ КОНЦЕПЦИИ (PoC) ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЕЙ И ИССЛЕДОВАНИЙ В ОБЛАСТИ БЕЗОПАСНОСТИ.
Этот скрипт на Python демонстрирует уязвимость (гипотетическую или основанную на прошлых уязвимостях, упомянутую здесь для иллюстрации как «до iOS 18.3» согласно исходному PoC), которая позволяет экфильтрацию произвольных файлов с устройства iOS. Метод основан на манипуляции резервной копией устройства, создании вредоносной символьной ссылки (symlink) внутри этой копии, а затем восстановлении этой измененной копии на устройстве. Наконец, взаимодействие с системным сервисом (com.apple.mobile.MCInstall) заставляет его непреднамеренно прочитать файл, на который указывает симлинк.
Этот скрипт был «улучшен» с точки зрения исследователя безопасности, чтобы включать:
Эксплуатируемая уязвимость использует следующую цепочку слабостей (присутствующих в старых версиях iOS):
CloudConfigurationDetails.plist) заменяется символьной ссылкой, указывающей на конфиденциальный файл в файловой системе устройства (например, /private/etc/passwd).com.apple.mobile.MCInstall в этом PoC), имеющий разрешения на чтение исходного файла конфигурации (CloudConfigurationDetails.plist), может быть вызван. При попытке прочитать файл операционная система переходит по символьной ссылке и вместо этого читает содержимое конфиденциального файла, на который указывает симлинк.Примечание о версии iOS: В исходном PoC упоминается «iOS < 18.3». Эта нумерация нетипична. Apple исправила уязвимости, связанные с обработкой симлинков в резервных копиях и профилях конфигурации, в значительно более ранних версиях iOS (обычно до iOS 15/16 для наиболее прямых векторов этого типа). Эта ссылка на версию сохранена для согласованности с происхождением скрипта, но ее следует понимать как иллюстративную для «неисправленной уязвимой версии».
idevicebackup2.idevicebackup2 в PATH системы.
brew install libimobiledevicesudo apt-get install libimobiledevice-utils (имя пакета может отличаться)pip install usbmux-python python-lockdown packaging
git clone <url-del-repositorio>
cd <nombre-del-directorio>
libimobiledevice установлен и idevicebackup2 доступен.pip install -r requirements.txt # (Если вы создадите requirements.txt с usbmux-python, python-lockdown, packaging)
# или вручную:
# pip install usbmux-python python-lockdown packaging
./exploit_ios_file_read.py [ОПЦИИ]