
Эксплойт для уязвимости /dev/exynos-mem, присутствовавшей в более ранних телефонах Samsung.
Это PoC для эксплуатации уязвимости /dev/exynos-mem, появившейся в ранних телефонах Samsung.
Сделано из интереса к исследованию уязвимостей ядра и в рамках CTF-задания.
Уязвимость, присутствующая в этих телефонах, — это права доступа к устройству exynos-mem. Оно позволяло пользователям и чтение, и запись, даже не будучи root!
Устройство exynos-mem позволяет читать/писать напрямую в /dev/mem, то есть можно напрямую писать в код и данные ядра.
Используя /proc/iomem, можно быстро выяснить, каким физическим адресам соответствует какая память в операционной системе, и даже найти, где находится память Кода / Данных ядра.
Эксплойт делает несколько вещей, чтобы получить root:
/proc/kallsyms, что нас ограничивает. Поэтому мы сканируем память ядра, чтобы найти строку формата, используемую в kallsyms (seq_printf(m, "%pK %c %s\n", (void *)iter->value, iter->type, iter->name);)
и заменяем её на %p вместо %pK, чтобы адреса символов выводились нам, обычным пользователям./proc/kallsyms, чтобы найти адрес символа nsown_capable, который используется для определения того, имеет ли пользователь, вызывающий setuid(), разрешение на это.nsown_capable, чтобы она просто возвращала return true;, позволяя любому пользователю вызывать setuid() с любым нужным ему uid.setuid(0) и system(/bin/sh).Константы в файле, возможно, потребуется немного изменить, чтобы они подходили для вашей системы; задайте их по необходимости.