
Концептуальное доказательство для CVE-2026-43494 (PinTheft): Linux LPE через RDS zerocopy refcount bug + io_uring fixed buffers → SUID page-cache overwrite. Только для авторизованных исследований.
Доказательство концепции — uid=1000(raken) → uid=0(root) после ./sley на WSL2 (6.6.87.2-microsoft-standard-WSL2)
Однофайловое доказательство концепции для CVE-2026-43494 (PinTheft): локальное повышение привилегий в ядре Linux, которое объединяет ошибку подсчёта ссылок при zerocopy в RDS с фиксированными буферами io_uring, чтобы перезаписать кэш страниц SUID-root-двоичного файла.
Отказ от ответственности: Этот репозиторий предназначен только для авторизованных исследований безопасности, обучения и защитного тестирования. Запуск данной программы на системах, которыми вы не владеете или на которые у вас нет явного разрешения на тестирование, является незаконным и неэтичным. Авторы не несут ответственности за неправомерное использование.
Оригинальные публичные исследования и PoC были опубликованы командой V12 Security (Аарон Эзау). SLEY — это независимая компактная повторная реализация с оформленным терминальным интерфейсом для лабораторного использования и обучения.
flowchart LR
A[mmap анонимная страница] --> B[io_uring: зарегистрировать фиксированный буфер]
B --> C[Клонировать таблицу буферов в 2-е кольцо]
C --> D[1024× неудачных zerocopy-отправок RDS]
D --> E[Исчерпать смещение FOLL_PIN / украсть ссылки]
E --> F[munmap → страница освобождена]
F --> G[Страница SUID-двоичного файла возвращена в кэш страниц]
G --> H[Устаревший указатель io_uring записывает ELF-заглушку]
H --> I[exec SUID → root-оболочка]
su, mount, passwd, …).FOLL_PIN ≈ 1024).munmap освобождает страницу; повторное открытие цели SUID конкурирует с возвратом страницы в кэш; устаревшие метаданные фиксированного буфера позволяют записать крошечную x86_64 ELF-заглушку в кэш.execve SUID-двоичного файла запускает внедрённую заглушку от root.CONFIG_RDS=y и CONFIG_RDS_TCP=yCONFIG_IO_URING=y и kernel.io_uring_disabled = 0rds / rds_tcp загружены (или могут быть загружены непривилегированным пользователем)IORING_REGISTER_CLONE_BUFFERS, используемого в публичной цепочкеsudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# или эквивалентный пакет заголовков в вашем дистрибутиве
# Исправлено? (пример — адаптируйте под ваш дистрибутив)
uname -r
grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true
# RDS доступен?
grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null
lsmod | grep -E '^rds'
# io_uring включён?
cat /proc/sys/kernel/io_uring_disabled # ожидайте 0
gcc -O2 -Wall -Wextra -o sley sley.c
Статическая линковка (опционально, для минимальных лабораторных образов):
gcc -O2 -static -o sley sley.c
./sley
Весь вывод статуса идёт в stderr (ANSI 256-цветный интерфейс, индикатор выполнения, фазовое логирование). Убедитесь, что ваш терминал поддерживает UTF-8 и truecolor/256 цветов для интерфейса с псевдографикой.
Пример фаз:
PHASE 1 │ Разведка
PHASE 2 │ Настройка памяти и io_uring
PHASE 3 │ Кража ссылок прикрепления (RDS zerocopy)
PHASE 4 │ Перезапись кэша страниц и повышение привилегий
На успешно эксплуатируемой конфигурации цепочка завершается и передаёт управление обнаруженному SUID-двоичному файлу с перезаписанной первой страницей — что даёт root-оболочку, если состояние гонки и состояние ядра совпадут.
На исправленных ядрах, усиленных хостах или при отсутствии RDS/io_uring PoC завершится ошибкой на раннем этапе (нет цели SUID, ошибки mmap/io_uring/socket и т.д.).
Специфичные для дистрибутивов бюллетени безопасности могут содержать бэкпортированные исправления — отслеживайте очередь безопасности ядра вашего вендора.
.
├── README.md # Этот файл
├── proof-of-concept.jpg # Скриншот: успешное LPE (uid 1000 → root)
├── sley.c # Однофайловый PoC + терминальный интерфейс
└── .gitignore
Данное программное обеспечение предоставляется как есть для исследований и обучения. Вы несёте ответственность за соблюдение применимых законов и получение письменного разрешения перед тестированием любой системы, которой вы не владеете.
MIT — см. файл лицензии в репозитории, если он добавлен. Используйте ответственно.
| Элемент | Описание |
|---|
| CVE | CVE-2026-43494 |
| Общеизвестное имя | PinTheft |
| Компонент | net/rds — путь zerocopy-отправки (rds_message_zcopy_from_user) |
| Примитив | Двойной put_page() при сбое прикрепления страницы → кража ссылок FOLL_PIN |
| Превращение в оружие | Фиксированный буфер io_uring + неудачный zerocopy RDS → UAF-запись в кэше страниц |
| Влияние | Доступ root на локальной системе в уязвимых конфигурациях |
| Исправление (upstream) | e17492979319 |
| Действие | Примечания |
|---|
| Обновить ядро | Применить стабильное исправление, содержащее коммит e17492979319 |
| Отключить RDS | modprobe -r rds_tcp rds (и заблокировать автозагрузку), если не требуется |
| Ограничить io_uring | kernel.io_uring_disabled=1 или 2 через sysctl |
| Минимизация привилегий | Удалить ненужные SUID-двоичные файлы; использовать контейнеры с усиленными профилями |
| Мониторинг | Оповещение о всплесках неудач zerocopy RDS в сочетании с паттернами регистрации буферов io_uring |