
CVE-2026-64560 набор инструментов: однофайловая toolchain на Go + порт для realme RMX5010 (A16, SM8750)
CVE-2026-64560 — это use-after-free в posix-cpu-timers ядра Linux
(локальная непривилегированная гонка, CVSS 3.1 = 7.8; не исправлено в 6.6.118, исправлено только в 6.6.147).
В этом репозитории две вещи: превращение цепочки инструментов, которая в upstream управляется только кучей Python-скриптов, в один статический Go-бинарник,
а также добавление отсутствующей в upstream цели realme RMX5010 (A16 / SM8750).
[!WARNING] Это экспериментальный код эксплойта ядра. Он может перезагрузить устройство, повредить состояние ядра или привести к потере данных. Используйте только на устройствах, которыми вы владеете или на которые у вас есть явное разрешение. Сначала сделайте резервную копию.
| profile | устройство | ядро | статус |
|---|---|---|---|
rmx5010-a16 | realme RMX5010 / RE6018L1, A16 BP2A.250605.015 | 6.6.118-android15-8-g93e223c276e7-abogki500782043-4k | добавлено в этом репозитории; статическая полезная нагрузка проходит шлюз --preflight на реальном устройстве, полное повышение привилегий ещё не проверено на реальном устройстве |
dada | Xiaomi 15 | 6.6.118-android15-8-gb9cc6ec16bc8-…-4k | сохранено из upstream без изменений (см. описание upstream) |
op13 | OnePlus 13 | совпадает с upstream | сохранено из upstream без изменений |
Не нужно устанавливать Go или Python:
v*, содержит инструменты для каждой платформы + полезные нагрузки для каждой цели + SHA256SUMS.txtmain
cve64560-<os>-<arch>: linux/amd64, linux/arm64, android/arm64, darwin/arm64, windows/amd64payloads: статические aarch64-нагрузки для каждого profile (rmx5010-a16-…, op13-…,
каждая пишется в свой каталог, больше не перезаписывают друг друга)Тот, что для android/arm64, можно напрямую adb push в /data/local/tmp и запустить на телефоне.
go build -o cve64560 ./gotool # инструмент (чистый Go, без зависимостей)
./cve64560 build --profile profiles/rmx5010/rmx5010-40850e5ff6a5.json # полезная нагрузка (нужен cc)
Обзор командной строки, холостой прогон --dry-run, вывод profile — см. docs/GOTOOL.md.
Исходный процесс требовал python3 + tools/*.py + кучу shell: на тестовой машине нет python,
на телефоне его тем более быть не может. Теперь один статический бинарник покрывает
весь процесс kallsyms → derive → render → patch → build → campaign,
и кросс-компилированный вариант работает везде.
Реализация на Python не удалена: она осталась в tools/ как эталонная реализация и база для сравнения в CI,
CI для каждого profile прогоняет и Go, и Python, затем делает diff -r, и при любом побайтовом расхождении падает.
.github/workflows/build.yml)gotool/ цепочка инструментов на Go (одна команда — один файл)
profiles/ целевые profile (по одному JSON на цель, единственный источник истины для рендеринга)
src/ шаблоны upstream + отрендеренный исходный код устройств
tools/ эталонная реализация на Python из upstream + слой совместимости musl/bionic + скрипты CI
scripts/ скрипты кампаний/измерений из upstream (версия на Go см. gotool/cmd_campaign.go)
targets/ записи символов/смещений ядра для каждой цели
symbols/ таблицы символов ядра для двух поставочных profile (для остальных целей это производные данные)
docs/GOTOOL.md документация цепочки инструментов на Go
Репозиторий не содержит образов прошивок, ключей устройств или уникальных идентификаторов устройств. Шаги, для воспроизведения которых нужен образ ядра производителя (извлечение символов, вывод profile), поставляются с исходным образом и не попадают в репозиторий.
Единственное исключение — таблицы символов ядра для двух поставочных profile (symbols/symbols_*.json, примерно
по 9 MB каждая): build без таблицы сразу завершается ошибкой (не выдаёт полезную нагрузку с непроверенными константами), а у CI
нет образа ядра Image, чтобы восстановить таблицы. Они содержат только имена символов и адреса, но не сам образ.
Полезная нагрузка даёт временный root: перестаёт действовать после перезагрузки, не сохраняется на диск и не изменяет разделы.
| job | назначение |
|---|
gotool | кросс-компиляция для 5 платформ + gofmt/go vet/go test |
parity | побайтовое сравнение вывода Go и Python; жёсткая проверка эталонных артефактов по tools/golden.sha256 |
payload | компиляция полезной нагрузки в контейнере arm64 Alpine (qemu), цепочка инструментов того же класса, что и проверенный на реальном устройстве aarch64 musl gcc |
release | автоматический выпуск Release по тегу |