Sploitus

Exploit for copy-fail

kitploit · 2026-08-27

Exploit Code

MARKDOWN258 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ASTOUNDS-COPY-FAIL-CVE-2026-31431
# CVE-2026-31431 — Copy Fail

**Локальное повышение привилегий в ядре Linux через AF_ALG + перезапись page-cache через splice**

![CVE](https://img.shields.io/badge/CVE-2026--31431-red) ![CVSS](https://img.shields.io/badge/CVSS%20v3.1-7.8%20High-orange) ![License](https://img.shields.io/badge/license-GPLv3+-blue)

> **Только для авторизованных исследований безопасности, пентеста и образовательных целей.** Не используйте против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения.

Технический разбор

* * *

## Содержание

  * Описание
  * Детали уязвимости
  * Структура репозитория
  * Быстрый старт
  * Обнаружение
  * Требования
  * Меры по смягчению
  * Тестовая среда (необязательно)
  * Ссылки
  * Лицензия



* * *

## Описание

CVE-2026-31431 — это уязвимость локального повышения привилегий (LPE) в ядре Linux. Непривилегированный локальный пользователь может получить root-доступ, комбинируя интерфейс сокетов `AF_ALG` с `splice()` для выполнения аутентифицированной записи напрямую в страницу page-cache, принадлежащую setuid-бинарнику.

Эксплойт перезаписывает бинарник `su` в page-cache без изменения inode на диске, в обход механизмов целостности, которые полагаются исключительно на метаданные файла или контрольные суммы на уровне блоков.

* * *

## Детали уязвимости

### Затронутые окружения

* * *

## Структура репозитория

root@kitploit:~
    
    
    .
    ├── exploit.py    # PoC — перезапись page-cache и повышение привилегий
    ├── detect.bt     # BPFtrace-скрипт для обнаружения в реальном времени
    ├── run-vm.sh     # Автоматизация тестовой среды QEMU (необязательно)
    ├── PAYLOAD.md    # Анализ кодирования полезной нагрузки (hex → zlib → ELF → shellcode)
    └── LICENSE
    

* * *

## Быстрый старт

Запустите `exploit.py` от имени **непривилегированного** локального пользователя на любой уязвимой системе — `sudo` не требуется:

root@kitploit:~
    
    
    python3 exploit.py
    

Скрипт выполняет следующие шаги:

  1. Проверяет поддержку ядром `AF_ALG` (`algif_aead`) и находит бинарник `su`.
  2. Выбирает и распаковывает полезную нагрузку, соответствующую архитектуре.
  3. Открывает бинарник `su` как сырой файловый дескриптор и перезаписывает его страницы page-cache через `AF_ALG` \+ `sendfile`.
  4. Проверяет повышение привилегий. В случае успеха открывает root-шелл.



**Поддерживаемые архитектуры:**

* * *

## Обнаружение

Отслеживайте попытки эксплуатации в реальном времени с помощью `detect.bt`. Требуется root:

root@kitploit:~
    
    
    sudo bpftrace detect.bt
    # или
    doas bpftrace detect.bt
    

Скрипт отслеживает три индикатора для каждого PID с помощью битовой маски в `@suspect[pid]`:

Срабатывание сигнала происходит, когда все три бита установлены (`@suspect[pid] == 0x7`) для одного и того же PID.

* * *

## Требования

### `exploit.py`

  * Python 3.6+
  * Ядро Linux с загруженным модулем `AF_ALG`/`algif_aead`
  * Локальная учётная запись непривилегированного пользователя (root **не** требуется)



### `detect.bt`

  * `bpftrace` ≥ 0.12
  * Права root (требуются для BPF-трассировки)



root@kitploit:~
    
    
    # Ubuntu/Debian
    sudo apt install bpftrace
    
    # RHEL/CentOS/Fedora
    sudo dnf install bpftrace
    
    # Amazon Linux
    sudo yum install bpftrace
    
    # SUSE
    sudo zypper install bpftrace
    
    # Alpine
    sudo apk add bpftrace
    

* * *

## Меры по смягчению

### 1\. Патч (предпочтительно)

Обновите пакет ядра вашего дистрибутива до версии, включающей коммит из основной ветки `a664bf3d603d`, который отменяет оптимизацию `algif_aead` на месте 2017 года, чтобы страницы page-cache больше не могли попадать в записываемый scatterlist назначения. Большинство крупных дистрибутивов уже распространяют это исправление.

### 2\. Отключение `algif_aead` (в ожидании патча)

`blacklist` можно обойти явным `modprobe algif_aead`. Директива `install .../bin/false` полностью переопределяет команду установки, заставляя каждую попытку загрузки завершаться неудачей:

root@kitploit:~
    
    
    echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
    sudo rmmod algif_aead 2>/dev/null || true
    

#### Что это ломает — почти ничего

Подсистемы в строке «Нет» используют криптографический API ядра напрямую — они никогда не проходят через `AF_ALG`. Производительность откатывается к обычным пользовательским криптобиблиотекам, которые и так использует почти всё остальное.

Чтобы проверить, использует ли что-либо на вашей системе `AF_ALG` активно перед его отключением:

root@kitploit:~
    
    
    lsof | grep AF_ALG
    ss -xa | grep alg
    

### 3\. Блокировка через seccomp (контейнеры, песочницы, CI)

Запретите создание `socket(AF_ALG, ...)` для недоверенных рабочих нагрузок независимо от состояния патча. Добавьте `AF_ALG` (семейство 38) в ваш seccomp deny-list или используйте политику AppArmor/SELinux, ограничивающую вызовы `socket` для непривилегированных процессов.

### 4\. Мониторинг с помощью `detect.bt`

Разверните прилагаемый скрипт обнаружения на любом хосте, который невозможно немедленно пропатчить или заблокировать. Он предупредит о любом процессе, выполняющем полный трёхшаговый примитив эксплуатации.

* * *

## Тестовая среда (необязательно)

`run-vm.sh` автоматизирует создание QEMU-виртуальной машины Ubuntu 24.04 для тестирования в контролируемой среде. `exploit.py` и `detect.bt` работают напрямую на любом уязвимом хосте — QEMU не требуется.

### Требования к хосту

Зависимость| Примечания  
---|---  
`qemu-system-x86_64` \+ KVM| См. команды установки ниже  
`wget` или `curl`| Загрузка cloud-образа  
`cloud-image-utils`| Генерация seed-образа (Docker может заменить на не-Debian хостах)  
  
### Установка QEMU

root@kitploit:~
    
    
    # Ubuntu/Debian
    sudo apt install qemu-system-x86 cloud-image-utils wget
    
    # Fedora/RHEL
    sudo dnf install qemu-system-x86 wget
    
    # Arch
    sudo pacman -Sy qemu
    
    # Alpine
    sudo apk add qemu-system-x86 qemu-ui-gtk wget
    

### Запуск

root@kitploit:~
    
    
    sh run-vm.sh
    

### Интерактивное меню

root@kitploit:~
    
    
    1. Запустить/Создать ВМ
    2. Подключиться по SSH
    3. Загрузить файлы в ВМ  (exploit.py, detect.bt)
    4. Запустить эксплойт внутри ВМ
    5. Запустить detect.bt внутри ВМ
    6. Проверить статус ВМ
    7. Остановить ВМ
    8. Очистить файлы ВМ
    0. Выход
    

### Учётные данные ВМ

Поле| Значение  
---|---  
Пользователь| `ubuntu`  
Пароль| `cve123`  
SSH-порт| `2222`  
  
* * *

## Ссылки

  * Технический разбор — xint.io
  * Анализ кодирования полезной нагрузки — разбор hex → zlib → ELF → shellcode
  * `crypto/af_alg.c` — исходный код ядра
  * `mm/splice.c` — исходный код ядра



* * *

## Лицензия

Этот проект распространяется под лицензией **GNU General Public License v3.0 или более поздней версии**. Полный текст см. в LICENSE.

> **Отказ от ответственности:** Этот репозиторий предоставлен только для авторизованных исследований безопасности, пентеста и образовательных целей. Авторы не несут ответственности за любое неправомерное использование или ущерб, причинённый этим программным обеспечением.