
Защищённый PoC для получения root-доступа на Humane AI Pin, работающий только на источнике, для CVE-2026-43499
GhostLock для Humane AI Pin — это открытое доказательство концепции root-доступа в рамках одной загрузки для одной конкретной розничной сборки прошивки. Он использует CVE-2026-43499, use-after-free в Linux rtmutex, из обычной авторизованной оболочки ADB.
Запускающий скрипт намеренно узок. Он проверяет полный отпечаток прошивки, сборку ядра, слот, UID оболочки и состояние SELinux, прежде чем что-либо подготавливать. Несовпадение останавливает запуск.
[!WARNING] Это эксплойт ядра. Он может вызвать панику, перезагрузку или жёсткое зависание Pin. Жёсткое зависание может потребовать отключения устройства и ожидания разрядки батареи. Используйте его только на Pin, которым вы владеете и который можете позволить себе восстановить. Root исчезает при перезагрузке.
| Свойство | Допустимое значение |
|---|---|
| Устройство | Humane AI Pin, розничный экземпляр |
| Прошивка | qti/atoll/atoll:12/SKQ1.230401.001/101.000470.45.20:user/release-keys |
| Android | 12 |
| Ядро | 4.14.190-perf, собрано Mon Nov 4 18:37:23 PST 2024 |
| Слот | только _b |
| Архитектура | aarch64 |
| Профиль | humane-aipin-45.20 |
| SHA-256 образа ядра | d4f4e0deb20871fce207f1f095ba1934162081c2f10afaccbb2e6a1e938719fb |
| Воспроизведение релиз-кандидата | Ожидается финальное воспроизведение с чистой загрузки |
Слот _a, developer-прошивка, близкие версии прошивки и другие продукты Qualcomm atoll отклоняются. См. детали совместимости. Совпадающего отпечатка Android недостаточно для обхода этой проверки: слоты A/B могут содержать разные загрузочные образы и раскладки ядра при одной и той же идентичности userspace-сборки.
Вам потребуется:
adb, Python 3.10 или новее, make и компилятор C;28.2.13676358 (r28c) для сборки полезной нагрузки.Этот репозиторий не содержит приватного ключа ADB, образа прошивки, загрузочного образа, bugreport, лога устройства или предсобранной полезной нагрузки.
Установите закреплённый NDK с помощью инструментов командной строки Android:
sdkmanager "ndk;28.2.13676358"
Убедитесь, что ADB уже видит Pin как device:
$ adb devices
List of devices attached
YOUR_SERIAL device
Клонируйте репозиторий, затем используйте один и тот же явный серийный номер для каждой команды:
git clone https://github.com/TheAndersMadsen/humane-aipin-ghostlock.git
cd humane-aipin-ghostlock
./ghostlock check --serial YOUR_SERIAL
./ghostlock run --serial YOUR_SERIAL
./ghostlock verify --serial YOUR_SERIAL
check работает только на чтение. Он выводит обнаруженную прошивку, ядро, слот, границу оболочки, состояние SELinux, батарею, источник питания и ревизию NDK.
run выполняет одну защищённую попытку. Он просит вас ввести ROOT YOUR_SERIAL, собирает из исходников, проверяет хеш полезной нагрузки после её отправки, снимает bugreport текущей загрузки для определения KASLR, по умолчанию удаляет этот сырой bugreport и запускает эксплойт только после второй полной предполётной проверки.
verify независимо запрашивает у брокера root-доступа в рамках загрузки выполнение id и getenforce.
Успешная проверка выглядит так:
uid=0(root) gid=0(root) groups=0(root) context=u:r:kernel:s0
SELinux: Permissive
Boot epoch: <redacted>; uptime: <redacted>s
Точный контекст SELinux зависит от ядра и прошивки. Условием приёмки является UID/GID 0 через брокера при SELinux в режиме permissive в рамках той же загрузки.
Для текущей загрузки полезная нагрузка:
init_cred;/data/local/tmp/su;Он не записывает раздел, не разблокирует загрузчик, не устанавливает модуль, не изменяет verified boot, не создаёт персистентность после перезагрузки, не связывается с сетевым сервисом и не загружает телеметрию.
Запустите root-команду из другой оболочки ADB с помощью:
adb -s YOUR_SERIAL shell '/data/local/tmp/su -c id'
Запускающий скрипт допускает одну попытку на загрузку ядра. Если он сообщает о промахе, тайм-ауте, отключении, неопределённом состоянии, панике или перезагрузке, не повторяйте попытку в рамках этой загрузки. Сначала перезагрузите устройство и снова запустите check.
Если ADB всё ещё отвечает:
adb -s YOUR_SERIAL reboot
Если Pin жёстко завис и ADB не отвечает, отключите всё внешнее питание. Проверенное розничное оборудование не имеет надёжного доступного пользователю принудительного перезапуска, поэтому для восстановления может потребоваться дождаться разрядки батареи, прежде чем снова подключить питание.
После обычной перезагрузки root исчезает. Подготовленные файлы могут остаться неактивными в /data/local/tmp; чистая оболочка может их удалить:
adb -s YOUR_SERIAL shell + 'rm -f /data/local/tmp/ghostlock-aipin.so /data/local/tmp/su + /data/local/tmp/.ghostlock-su.sock + /data/local/tmp/.ghostlock-aipin-attempt'
Прочитайте SAFETY.md перед использованием PoC и TROUBLESHOOTING.md перед повторной попыткой после неудачного запуска.
Записи о запусках сохраняются во временный каталог с правами 0700. Они содержат серийный номер устройства, идентичность загрузки, адреса ядра и телеметрию эксплойта. Никогда не прикрепляйте этот каталог или сырой Android bugreport к issue.
Вместо этого создайте сокращённый отчёт:
./ghostlock report /private/tmp/ghostlock-aipin-TIMESTAMP + --output ghostlock-report.json
Проверьте JSON перед тем, как делиться им. Редактор опускает серийные номера, идентификаторы загрузки, пути хоста, сырой вывод команд и адреса ядра. См. PRIVACY.md.
Соберите полезную нагрузку для Android:
./ghostlock build
Запустите все хостовые тесты и две независимые сборки:
./scripts/verify-release.sh
Полезная нагрузка записывается в:
source/build/humane-aipin-45.20/bin/preload.so
Продукты сборки игнорируются Git. Релизные артефакты следует проверять по контрольным суммам, прикреплённым к соответствующему релизу GitHub.
Эксплойт использует висящий в стеке rt_mutex_waiter из CVE, чтобы направить контролируемое обновление красно-чёрного дерева. KernelSnitch сначала утекает адрес mm_struct через тайминг futex-хеша. Затем шлюз perf-event с тем же PFN доказывает, что освобождённая slab-страница порядка 3 была возвращена контролируемыми данными буфера сокета, прежде чем может продолжиться триггер повреждения. База KASLR, привязанная к загрузке, выводится как минимум из двух согласующихся WARN-якорей текущей загрузки. Полученный маршрут чтения/записи разрешает текущую задачу и выполняет изменение учётных данных в рамках загрузки.
Целевой профиль содержит только смещения и символы, используемые этим маршрутом. Образ ядра и полная таблица символов не распространяются. TECHNICAL.md описывает этапы и отказобезопасные шлюзы.
Это экспериментальный исследовательский релиз для неподдерживаемого потребительского устройства. Это не универсальный инструмент получения root на Android, и он не связан с Humane, HP или CosmOS.
Код лицензирован под Apache-2.0. Реализация основана на работе CyberMeowfia от NebuSec под Apache-2.0; порт для AI Pin и релизный инструментарий описаны в PROVENANCE.md и THIRD_PARTY_NOTICES.md.
Пожалуйста, прочитайте SECURITY.md перед сообщением об уязвимости или проблеме злоупотребления.