
Обход TCC
Будучи студентом, я имею ограниченный доступ к устройствам, на которых могу протестировать эту уязвимость. Версии, которые я тестировал на данный момент: MacOS 12.3.1, MacOS 12.3, MacOS 12.0, MacOS 10.15.7 и MacOS 11.6.1. Уязвимость работает на всех протестированных версиях.
Воздействие: вредоносное приложение может обойти определенные настройки конфиденциальности
Описание: когда исполняемый файл удаляется во время выполнения, процесс может обойти ограничения для записи экрана, а также определенные настройки специальных возможностей, а именно инъекцию нажатий клавиш (с помощью metasploit).
Возможные причины: macOS не может найти разрешения родительского исполняемого файла процесса и поэтому не блокирует запись экрана. Однако сбивает с толку то, что камера и микрофон остаются должным образом ограниченными.
Детали:
tccutil reset All приводит к отображению запроса разрешения — доступ к камере или микрофону также приводит к отображению запроса разрешения.Оно работает на чистой установке macOS.
Запуск POC из src/POC.sh создаст снимок экрана без запроса TCC и включает все окна, видимые пользователю. Иногда скрипт нужно запускать несколько раз (максимум 3), чтобы получить снимок экрана.
Эта эксплойт был впервые обнаружен мной при экспериментировании с веб-доставкой Metasploit. Я обнаружил, что при удалении сброшенного исполняемого файла сразу после открытия оболочки meterpreter, оболочка получает возможности, которые обычно заблокированы запросом TCC. Эта уязвимость также позволяет злоумышленнику внедрять нажатия клавиш. Однако я не являюсь разработчиком Objective-C и поэтому не смог создать собственный POC. Этот эффект все еще можно достичь через Metasploit.
src/POC.sh — Shell-скрипт: копирует screenshot, запускает его и удаляет его во время выполнения.
src/screenshot — исполняемый файл Mach-O: делает снимок экрана и сохраняет его в src/screenshot.png. Скомпилирован из src/screenshot.m.
src/screenshot.m — Авторские права принадлежат theevilbit за основной код. Единственное изменение, которое я внес, — добавление 3-секундной задержки перед снимком экрана, чтобы обеспечить достаточно времени для удаления исполняемого файла до того, как будет сделан снимок.