
HP Slate 7 2800 Android 4.1.1 руткит с использованием CVE-2015-1805.
English | Русский
Этот репозиторий содержит полный автономный комплект для получения постоянного root-доступа на HP Slate 7 2800 с прошивкой 1.05.18 и ядром Linux 3.0.8+ через локальную уязвимость CVE-2015-1805. Комплект был реально выполнен на планшете, а результат проверен из нового ADB-сеанса и после обычной перезагрузки.
Это не универсальный Android-root. Эксплойт привязан к конкретной конфигурации ядра HP. Не запускайте его на другой модели, прошивке или версии ядра.
| Параметр | Проверенное значение |
|---|---|
| Производитель и модель | HP Slate 7 2800 |
| Android | 4.1.1, API 16, сборка JRO03H |
| Product / device | t7h / pine |
| Процессор | Rockchip RK3066, ARMv7 |
| Build fingerprint | hp/t7h/pine:4.1.1/JRO03H/v1.05.18_user:user/release-keys |
| Ядро | 3.0.8+ #13 SMP PREEMPT Tue Jul 28 15:24:30 CST 2015 |
| ABI | 32-битный ARM EABI5 |
| SELinux | отсутствует в конфигурации ядра (CONFIG_SECURITY отключён) |
Раздел /system | ext4, штатно смонтирован read-only |
Проверить устройство без каких-либо изменений можно так:
adb devices -l
adb shell getprop ro.product.model
adb shell getprop ro.build.fingerprint
adb shell getprop ro.build.version.sdk
adb shell cat /proc/version
Или скриптом, который откажется продолжать при несовпадении fingerprint или версии ядра:
./scripts/check-target.sh
./scripts/check-target.sh ADB_SERIAL
.
├── bin/
│ ├── hp-slate7-cve-2015-1805-root # проверенный эксплойт
│ ├── hp-slate7-install-root # установщик su в /system
│ └── hp-slate7-su # минимальный setuid-root wrapper
├── src/
│ ├── exploit/ # исходники CVE и device-specific правки
│ ├── installer/install-root.c # исходник установщика
│ └── su/rootsh.S # исходник минимального su
├── scripts/
│ ├── build.sh # пересборка всех трёх ELF-файлов
│ ├── check-target.sh # безопасная проверка совместимости
│ └── root-device.sh # проверка, загрузка и запуск комплекта
├── SHA256SUMS # хеши проверенных bin/*
├── NOTICE # происхождение исходного PoC
└── LICENSE # GPL-3.0
| Файл | Формат | Размер | Назначение |
|---|---|---|---|
bin/hp-slate7-cve-2015-1805-root | ELF 32-bit ARM EABI5, static, unstripped | 2 722 320 байт | Эксплуатация CVE, получение uid 0 и запуск установщика |
bin/hp-slate7-install-root | ELF 32-bit ARM EABI5, static, stripped | 22 596 байт | Кратковременно перемонтирует /system rw, устанавливает su, возвращает ro |
bin/hp-slate7-su | ELF 32-bit ARM EABI5, static, stripped | 656 байт | Делает setresgid(0,0,0), setresuid(0,0,0) и запускает /system/bin/sh |
SHA-256 проверенных бинарников:
6bf8ea09efb9f409dfc7aa5efbc3108e5c1a19fc5b07ae913328ef4639a7644f bin/hp-slate7-cve-2015-1805-root
4857c71efc846636afc5b50d7f3c971c6eb68d3760f652086f2a38c5dc50bc4a bin/hp-slate7-install-root
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e bin/hp-slate7-su
Проверка на macOS:
shasum -a 256 -c SHA256SUMS
Проверка на Linux:
sha256sum -c SHA256SUMS
Используйте для планшета файлы из bin/: это именно те байты, которые были
проверены на устройстве. Каталог build/ предназначен для локальной
пересборки и в Git не добавляется.
CVE-2015-1805 — ошибка в
реализациях pipe_read() и pipe_write() старых ядер Linux. При ошибке
атомарного копирования код некорректно продолжает обход массива iovec, что
может вывести указатель за его границы. В результате локальный непривилегированный
процесс может повредить память, аварийно завершить ядро или повысить привилегии.
Подробный разбор механизма опубликован в
oss-security, а
исправления находятся, в частности, в upstream-коммитах Linux
637b58c
и f0d1bec.
Ядро планшета 3.0.8+ оказалось уязвимо. До изменения kernel memory была
выполнена отдельная безвредная проверка той же гонки: обе цели записи находились
в обычной памяти тестового процесса. Она завершилась результатом
CVE-2015-1805: VULNERABLE, после чего планшет оставался доступен по ADB.
readv(), изменением отображения памяти и
обработкой большого массива iovec в уязвимом pipe-коде ядра.sys_call_table адресом небольшого ARM-trampoline из процесса эксплойта.0xffff0008.
На проверенном устройстве инструкция равна 0xe59ff410, literal указывает
на vector_swi = 0xc04d0d40.dd69f0468973714fd9ba22cdfea7e96f39f651ee51b9cb537728d9dcadbafda2)
с defconfig
rk30_t7h_dvt_defconfig независимо собраны vector_swi и
sys_call_table: их смещение равно 0xc4. В установленной прошивке нет
OABI и seccomp, поэтому итоговый runtime-адрес таблицы — 0xc04d0e04.sp,
выравнивает его на размер kernel stack 8192 байта и записывает -1 только
в thread_info.addr_limit по смещению 8. Внешних вызовов, пролога и
compiler runtime в нём нет.sys_ni_syscall; на
проверенном ядре восстановлен указатель 0xc051900c.addr_limit pipe-копирование читает текущий
task_struct, находит cred и проверяет найденную структуру по текущим
uid/gid, выравниванию, счётчику ссылок и совпадению real_cred == cred.
Только после этих проверок uid/gid обнуляются, а capability masks
заполняются единицами.uid=0 и запускает /data/local/tmp/install-root.
Установщик перемонтирует /system в rw, копирует payload в
/system/xbin/su, выставляет root:root и режим 06755, вызывает sync()
и возвращает /system в read-only.Исходная функция current_thread_info() из старых kernel headers была
несовместима с современным Clang при -O0: ранний прототип читал
неинициализированное слово вместо регистра sp и мог уронить ядро. В данном
репозитории она заменена проверенным naked ARM-trampoline. Ранний бинарник в
репозиторий не включён.
bin/adb из Android SDK Platform Tools;Не нужны Android NDK, Java, Python, fastboot, разблокировка bootloader, custom recovery, root-APK или доступ к сети. Эксплойт и payload статически скомпонованы.
shasum либо sha256sum для контроля результата.Android NDK по-прежнему не нужен: Zig предоставляет ARM musl cross-toolchain.