
Адаптация CVE-2026-64560 с привязкой к устройству для RedMi K80pro miro OS 3.0.304.0
Проект портирования локального повышения привилегий из пользовательского пространства (CVE-2026-64560) для Redmi K80 Pro (miro).
🚀 Не хотите читать столько документации?
Если вы не хотите углубляться, или не хотите читать эту кучу сгенерированных ИИ
.md, сразу смотритеdyc.md—— краткое руководство на человеческом языке: от нуля до джейлбрейка (включая KernelSU), только какие команды вводить, без объяснения почему.
Исходный эксплойт и адаптация для Xiaomi 15 (dada) взяты у
quyicheng03-boop,
данный репозиторий — результат портирования на его основе с повторным выводом адресов и констант для K80 Pro.
Этот проект занимается только портированием и не включает обнаружение уязвимости. Принцип уязвимости и дизайн цепочки эксплойта полностью принадлежат автору оригинала. Подробности см. в
docs/UPSTREAM.mdиNOTICE.
Исходный код и бинарники в этом репозитории действительны только для одной версии прошивки, указанной ниже:
Любая другая версия OTA приведёт к неработоспособности. Смещения структур в ядре, адреса символов, диапазон KASLR
все выведены для конкретно этого Image, при расхождении хотя бы на один символ ничего не заработает.
При несовпадении отпечатка программа завершится на входе:
TARGET_PROFILE_GATE_FAIL fingerprint=...
Это безопасный отказ, ядро не затрагивается. Если ваша прошивка не соответствует таблице выше, выполните
портирование самостоятельно согласно docs/05-technical.md, не применяйте
напрямую константы из этого репозитория.
docs/04-troubleshooting.md),
но не запускайте на устройствах, которые вам не принадлежат, или на устройствах без резервной копии данных.fastboot.k80pro-miro-cve-2026-64560/
├── README.md этот файл
├── dyc.md краткое руководство (на человеческом языке), новичкам смотреть в первую очередь
├── LICENSE лицензия оригинала
├── NOTICE уведомление о принадлежности оригиналу
├── SHA256SUMS.txt контрольные суммы трёх артефактов в release_build/
│
├── src/ исходный код для компиляции
│ ├── exploit-fanout-miro.c
│ ├── exploit-rotate-miro.c
│ ├── temp-su.c
│ ├── miro-profile.h справочник констант (не участвует в компиляции)
│ ├── miro-integration.c справочник по интеграции (не участвует в компиляции)
│ └── exploit-*.c исходные файлы оригинала (входные данные генератора, не участвуют в компиляции)
│
├── release_build/ предварительно собранные артефакты (готовы к использованию)
│ ├── cve-2026-64560-fanout
│ ├── cve-2026-64560-rotate
│ └── su
│
├── docs/
│ ├── 01-build.md как компилировать
│ ├── 02-usage.md как использовать в adb shell
│ ├── 03-tokens.md справочная таблица выходных токенов
│ ├── 04-troubleshooting.md устранение неполадок и описание рисков
│ ├── 05-technical.md техническое описание портирования
│ └── UPSTREAM.md источник оригинала
│
└── tools/ скрипты сборки и инструменты воспроизведения/диагностики (не участвуют в эксплуатации)
├── build.sh компиляция одной командой (sh tools/build.sh)
└── *.py скрипты воспроизведения / диагностики
См. docs/02-usage.md.
Сначала убедитесь в целостности артефактов:
sha256sum -c SHA256SUMS.txt # Linux / macOS
certutil -hashfile <файл> SHA256 # Windows, проверять по одному
См. docs/01-build.md.
Требуется Android NDK (системный gcc не подходит, причина указана в этом документе). Самый простой способ —
использовать встроенный в репозиторий скрипт, он сам найдёт NDK, выберет правильный тулчейн, скомпилирует и
сверит хеши по одному с SHA256SUMS.txt:
sh tools/build.sh # компиляция + проверка
sh tools/build.sh --no-check # только компиляция
Скрипт только компилирует, не трогает устройство, не выполняет push, не запускает exploit.
Если не хотите использовать скрипт, можно вручную ввести три команды clang, получив
cve-2026-64560-fanout, cve-2026-64560-rotate, su.
После компиляции сравните, совпадают ли байты с release_build/:
sha256sum build/* # сверить с тремя значениями в SHA256SUMS.txt
Единственный критерий успеха — открыть новый adb shell и получить uid=0 через /data/local/tmp/su:
$ printf 'id\nexit\n' | adb shell -T /data/local/tmp/su
uid=0(root) gid=0(root) groups=0(root),1004(input),... context=u:r:shell:s0
Обратите внимание на context=u:r:shell:s0 —— идентичность root, но сохранён домен shell, так и задумано,
это не ошибка.
Ключевые токены, которые будут видны в процессе (полная таблица в docs/03-tokens.md):
BOOTID_WRITE_PASS attempt=5 q0=... q1=... slide=... kernel_base=...
STAGE0_GATE_PASS slide=... kernel_base=...
MISC_BRIDGE_OPEN_PASS fd=... observed=...
STAGE8_CRED_STAGE_PASS task=... cred=... uid=0 context=shell
ROOT_CHILD_HOLD_PASS child=... uid=0 context=shell selinux_permissive=1
Вероятность успеха не 100%. На этапе Stage0 измеренная вероятность попадания с одной попытки составляет около 1/5, поэтому программа по умолчанию повторяет каждую стадию 32 раза. Вся цепочка вероятностная.
Отказ может проявляться в виде зависания. Требуется длительное нажатие кнопки питания для принудительной перезагрузки. После перезагрузки состояние ядра полностью очищается, можно попробовать снова.
После успеха остаются два состояния до перезагрузки:
/data/local/tmp/su становится демоном, открывающим root для любой идентичности shellСпособ очистки см. в конце docs/02-usage.md.
permissive — это не остаточный баг, а предварительное условие для загрузки модулей ядра (KernelSU LKM и т.п.). Подробности см. в
docs/04-troubleshooting.md.
dada): автор оригинального репозиторияmiro): см. CHANGELOGЛицензия и уведомление о принадлежности см. в LICENSE и NOTICE.
| Пункт | Значение |
|---|
| Модель | Redmi K80 Pro (ro.product.device = miro) |
| Отпечаток | Redmi/miro/miro:16/BP2A.250605.031.A3/OS3.0.304.0.WOMCNXM:user/release-keys |
| Ядро | 6.6.118-android15-8-gc44b714366cc-abogki519650608-4k |
| Время сборки ядра | Thu Jun 4 03:48:35 UTC 2026 |
| Размер страницы | 4096 (4K) |