
Следующая проблема существует в ветке android-msm-wahoo-4.4-pie репозитория https://android.googlesource.com/kernel/msm (и, возможно, других):
В драйвере binder в файле /drivers/android/binder.c происходит use-after-free элемента wait структуры binder_thread.
Как описано в вышестоящем коммите: “binder_poll() передаёт waitqueue thread->wait, на котором можно заснуть для получения работы. Когда поток, использующий epoll, явно завершается через BINDER_THREAD_EXIT, waitqueue освобождается, но она никогда не удаляется из соответствующей структуры данных epoll. Когда процесс впоследствии завершается, код очистки epoll пытается получить доступ к waitlist, что приводит к use-after-free.”
Следующий proof-of-concept вызовет UAF-крах в сборке ядра с KASAN (из первоначального отчёта об ошибке в вышестоящем ядре на https://lore.kernel.org/lkml/[email protected]/): #include <fcntl.h> #include <sys/epoll.h> #include <sys/ioctl.h> #include <unistd.h>
#define BINDER_THREAD_EXIT 0x40046208ul
int main()
{
int fd, epfd;
struct epoll_event event = { .events = EPOLLIN };
fd = open("/dev/binder0", O_RDONLY);
epfd = epoll_create(1000);
epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event);
ioctl(fd, BINDER_THREAD_EXIT, NULL);
}
Эта проблема была исправлена в декабре 2017 года в ядре 4.14 LTS [1], в ядре AOSP Android 3.18 [2], в ядре AOSP Android 4.4 [3] и в ядре AOSP Android 4.9 [4], но Pixel 2 с последним бюллетенем безопасности всё ещё уязвим на основе анализа исходного кода.
Другие устройства, которые, по-видимому, уязвимы на основе анализа исходного кода (если не указано иное, имеются в виду версии 8.x):
У нас есть доказательства того, что эта ошибка используется в реальных условиях. Поэтому для данной ошибки установлен 7-дневный срок раскрытия. По истечении 7 дней или после того, как патч станет широко доступен (в зависимости от того, что наступит раньше), отчёт об ошибке станет виден публике.
Подтверждено, что данный proof-of-concept работает на Pixel 2 со сборкой walleye_kasan-userdebug 10 QP1A.191105.0035899767, вызывая крах KASAN. Прилагаются код proof-of-concept на C и new.out. Прилагается вывод консоли KASAN.
Я получил техническую информацию от TAG и внешних сторон об эксплойте для Android, который приписывается группе NSO. Эти сведения включали факты об ошибке и методологии эксплойта, в том числе:
Используя эти детали, я определил, что используемая ошибка почти наверняка является той, что описана в этом отчёте, поскольку я исключил другие возможные кандидаты, сравнивая патчи. Более подробное объяснение этой ошибки и методологии её идентификации будет описано в предстоящем посте в блоге, когда найдётся время.
В настоящее время у нас нет образца эксплойта. Без образцов мы не смогли ни подтвердить временную шкалу, ни полезную нагрузку.
Эта ошибка является уязвимостью локального повышения привилегий, которая позволяет полностью скомпрометировать уязвимое устройство. Если эксплойт доставляется через веб, его нужно лишь объединить с эксплойтом для рендеринга, так как эта уязвимость доступна через песочницу.
Я приложил локальный proof-of-concept эксплойта, чтобы продемонстрировать, как эту ошибку можно использовать для получения произвольного чтения/записи в ядре при локальном запуске. Для эксплуатации CVE-2019-2215 требуется только выполнение кода ненадёжного приложения. Я также приложил скриншот (success.png) работы POC на Pixel 2 под управлением Android 10 с уровнем патча безопасности сентябрь 2019 (google/walleye/walleye:10/QP1A.190711.020/5800535:user/release-keys).
Заявление производителя от Android:
"Данная проблема оценивается как High severity на Android и сама по себе требует установки вредоносного приложения для потенциальной эксплуатации. Любые другие векторы, например через веб-браузер, требуют связывания с дополнительным эксплойтом. Мы уведомили партнёров Android, и патч доступен в общем ядре Android. Устройства Pixel 3 и 3a не уязвимы, а устройства Pixel 1 и 2 получат обновления для этой проблемы в рамках октябрьского обновления."