
Защищённый 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 |
| ABI Android | arm64-v8a |
| ID профиля | humane-aipin-45.20-nov4 |
| Проект сборки | humane-aipin-45.20 |
| SHA-256 образа ядра | d4f4e0deb20871fce207f1f095ba1934162081c2f10afaccbb2e6a1e938719fb |
| Повтор релиз-кандидата | Ожидается финальный повтор с чистой загрузки |
Слот _a, developer-прошивка, близкие версии прошивки и другие продукты Qualcomm atoll отклоняются. См. подробности совместимости. Совпадающего отпечатка Android недостаточно для обхода этой проверки: слоты A/B могут содержать разные загрузочные образы и раскладки ядра при одинаковой идентичности сборки userspace.
Совместимость определяется версионированным манифестом в profiles/. Хостовый лаунчер, запускающий скрипт, сгенерированная нативная предварительная проверка, геометрия аллокатора, минимальный набор символов и собранная полезная нагрузка привязаны к одному и тому же манифесту. Добавление слота в манифест по-прежнему требует физического повтора с чистой загрузки для точного образа ядра из профиля.
Вам потребуется:
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 и запускает эксплойт только после второй полной
предварительной проверки. Лаунчер по умолчанию требует не менее 20% заряда батареи и внешнего питания, затем раннер повторно проверяет оба условия непосредственно перед тем, как использовать единственную попытку загрузки. --min-battery 0 отключает оба ограничения по питанию и предназначен только для случаев, когда стабильное питание подтверждено независимо.
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'
adb -s YOUR_SERIAL shell 'rm -rf /data/local/tmp/.ghostlock-aipin-attempt.*.lock'
Прочитайте SAFETY.md перед использованием PoC и TROUBLESHOOTING.md перед повторной попыткой после неудачного запуска.
Записи о запусках сохраняются во временный каталог с правами 0700. Они содержат серийный номер устройства, идентификатор загрузки, адреса ядра и телеметрию эксплойта. Никогда не прикрепляйте этот каталог или необработанный отчёт об ошибке Android к issue.
Вместо этого создайте сокращённый отчёт:
./ghostlock report /private/tmp/ghostlock-aipin-TIMESTAMP --output ghostlock-report.json
Проверьте JSON перед тем, как делиться им. Редактор опускает серийные номера, идентификаторы загрузки, пути хоста, необработанный вывод команд и адреса ядра. Он включает фиксированные монотонные длительности для предполётной проверки, эксплуатации, верификации и общего запуска, чтобы можно было сравнивать сбои без передачи данных об устройстве. См. PRIVACY.md.
Соберите полезную нагрузку Android:
./ghostlock build
Если существует более одного профиля, подкреплённого доказательствами, выберите один явно: