
Доказательство концепции для CVE-2026-43494 (PinTheft): Linux LPE via RDS zerocopy refcount bug + io_uring fixed buffers → SUID page-cache overwrite. Только авторизованные исследования.
Proof of concept — uid=1000(raken) → uid=0(root) после ./sley на WSL2 (6.6.87.2-microsoft-standard-WSL2)
Однофайловый proof-of-concept для CVE-2026-43494 (PinTheft): локальное повышение привилегий в ядре Linux, которое объединяет ошибку подсчёта ссылок при zerocopy в RDS с фиксированными буферами io_uring для перезаписи кэша страниц SUID-root-бинарника.
Отказ от ответственности: Этот репозиторий предназначен только для авторизованных исследований безопасности, обучения и защитного тестирования. Запуск этого кода против систем, которые вам не принадлежат или на тестирование которых у вас нет явного разрешения, является незаконным и неэтичным. Авторы не несут ответственности за неправомерное использование.
Оригинальные публичные исследования и PoC были опубликованы командой V12 Security (Aaron Esau). SLEY — независимая компактная реинкарнация со стильным терминальным интерфейсом для лабораторного использования и обучения.
flowchart LR
A[mmap анонимной страницы] --> B[io_uring: регистрация фиксированного буфера]
B --> C[Клонирование таблицы буферов во второе кольцо]
C --> D[1024× неудачных RDS zerocopy-отправок]
D --> E[Слив смещения FOLL_PIN / кража ссылок]
E --> F[munmap → страница освобождена]
F --> G[Страница SUID-бинарника повторно занята в кэше страниц]
G --> H[Устаревший указатель io_uring записывает ELF-заглушку]
H --> I[exec SUID → root shell]
su, mount, passwd и т.д.).FOLL_PIN ≈ 1024).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 │ Перезапись кэша страниц и privesc
На успешно эксплуатируемой конфигурации цепочка завершается и передаёт управление найденному SUID-бинарнику с перезаписанной первой страницей — что даёт root shell, если гонка и состояние ядра совпадут.
На исправленных ядрах, усиленных хостах или при отсутствии 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 → запись после освобождения в кэш страниц |
| Воздействие | Получение прав root на уязвимых конфигурациях |
| Исправление upstream | e17492979319 |
| Действие | Примечания |
|---|
| Пропатчить ядро | Применить стабильное исправление, содержащее коммит e17492979319 |
| Отключить RDS | modprobe -r rds_tcp rds (и заблокировать автозагрузку), если не требуется |
| Ограничить io_uring | kernel.io_uring_disabled=1 или 2 через sysctl |
| Минимизация привилегий | Удалить ненужные SUID-бинарники; использовать контейнеры с усиленными профилями |
| Мониторинг | Обнаруживать всплески неудач RDS zerocopy + шаблоны регистрации буферов io_uring |