
Эксплойт Proof-of-concept для CVE-2020-27949, демонстрирующий произвольное чтение/запись памяти в процессах macOS через DTrace fasttrap ioctl без повышенных привилегий.
Устройство /dev/fasttrap для создания узлов-ловушек в пользовательских процессах для провайдеров pid и objc имеет разрешения 666. В отличие от /dev/dtrace, у которого также 666, в fasttrap отсутствует проверка прав. Это позволяет любому процессу выполнять ioctl FASTTRAPIOC_MAKEPROBE или FASTTRAPIOC_GETINSTR.
Атакующий может создавать зонды в любом другом процессе для любого адреса памяти с помощью FASTTRAPIOC_MAKEPROBE. При активации этих зондов значения по указанному адресу заменяются на инструкцию-ловушку (0xCC на x86), а исходное значение помещается в теневую память. Получить исходное значение можно с помощью ioctl FASTTRAPIOC_GETINSTR. Это позволяет атакующему читать произвольную память другого процесса, размещая множество ловушек.
Эта уязвимость отслеживается как CVE-2020-27949, исправлена в macOS Big Sur 11.1, Security Update 2020-001 Catalina, Security Update 2020-007 Mojave.
0xCC на x86) в любое место памяти других процессов, выполняемых под DTrace, без повышенных прав. Возможна даже запись в память процессов, работающих от root. В составе других инструкций или адресов переходов это может изменить поток управления процесса-жертвы, позволяя повысить привилегии.Как пользователь, я ожидаю, что включение DTrace позволяет процессам с правами root только трассировать, инструментировать или изменять другие процессы. DTrace — ценный инструмент для административных задач, предоставляющий такие утилиты, как dtruss, iotop и т.д.
Наша жертва (target) — исполняемый файл, работающий от root. Атакующий (memaccess) — исполняемый файл, работающий с обычными правами пользователя. Сценарий трассировки libc_monitor.d записывает количество вызовов функций в разделяемом объекте libsystem_c.dylib (это всего лишь простой пример административного сценария, который может запускать владелец машины).
libc_monitor.d).FASTTRAPIOC_GETINSTR для чтения значений памяти созданных зондов.Шаг 4 заменяет память в процессе-жертве значением инструкции-ловушки. В зависимости от приложения атакующий может использовать это для записи заранее известного значения в критическую область памяти. Например, атакующий может контролировать seed ГПСЧ или заменять криптографические ключи в процессе.
Примечание: Атакующему никогда не требуются повышенные права или root.
Примечание 2: Самостоятельно написанные DTrace-скрипты не требуются. Например, dapptrace также использует провайдер pid для трассировки любых функций.
Реализовать проверки прав в /dev/fasttrap, как в /dev/dtrace, или удалить разрешение на запись для всех (world-writable).
Примечание: Мы не проверяли выпущенное исправление.
target и следуйте инструкциям на экране.