
CVE-2026-43499: исследовательский пакет по use-after-free в futex PI ядра Linux
remove_waiter() в kernel/locking/rtmutex.c используется путями быстрого захвата блокировки (slowlock), а также для отката proxy-блокировки в rt_mutex_start_proxy_lock() при вызове из futex_requeue().
В случае proxy-блокировки waiter::task не является current, однако remove_waiter() некорректно оперирует значением current. Это приводит к трём проблемам:
waiter::task::pi_lock.pi_blocked_on задачи-ожидателя не очищается, оставляя висящий указатель, готовый к использованию после освобождения (use-after-free).rt_mutex_adjust_prio_chain() оперирует не той задачей.CWE-416 (использование после освобождения). CVSS 3.1: 7.8 HIGH (локально, низкая сложность, требуются низкие привилегии).
Затронуты: Linux 2.6.39 – 6.18.x; исправлено в 6.1.175, 6.6.140, 6.12.86, 6.18.27, 7.0.4.
Не повышающий привилегии проверочный стенд только для авторизованного тестового устройства.
Воспроизводимый пакет: test_package/ (сборка, хеши, шаги ADB, раскрытие информации).
Предварительные требования: Android NDK r27+, adb. В Windows: .\build.ps1.
.\build.ps1
adb push build/ghostlock_validate /data/local/tmp/ghostlock_validate
adb shell chmod 755 /data/local/tmp/ghostlock_validate
# Безопасный режим по умолчанию (рекомендуется)
adb shell /data/local/tmp/ghostlock_validate --dry-run --retries 3
# Дополнительный пробный сбой (может вызвать панику) — не для повышения привилегий
# adb shell /data/local/tmp/ghostlock_validate --probe --retries 1
Успех --dry-run: EDEADLK=1 + DRY_RUN_STOP_BEFORE_CORRUPTION=1.
Пакет доказательств (что демонстрируется / не демонстрируется на этом телефоне): evidence/PROOF.md
Пакет для вендора (транскрипты dry-run + комплект раскрытия): evidence/vendor_package_20260726/
Раскрытие вендору: test_package/docs/VENDOR_DISCLOSURE.md.
Публичные репозитории для других устройств (только для справки, к amber неприменимы): evidence/OTHER_DEVICE_REPOS.md
Никакие этапы с учётными данными / SELinux / CFI / root не реализованы.
Сообщили об ошибке:
Автор исправления: Keenan Dong
Исправление закоммитил: Thomas Gleixner
Коммит: 3bfdc63 — rtmutex: использовать waiter::task вместо current в remove_waiter()