
Исследовательский репозиторий для CVE-2026-81000 (TUNderflow) — целочисленное переполнение приёмного headroom в TUN/TAP ядра Linux, позволяющее локальное повышение привилегий, с PoC, анализом первопричины и настройкой лабораторной среды.
TUNderflow
Уязвимость повреждения памяти в ядре Linux в подсистеме сетевого взаимодействия TUN/TAP, вызванная недостаточным ограничением приёмного headroom и целочисленным переполнением в пути выделения пакетов.
Этот репозиторий предназначен для авторизованных исследований в области безопасности, анализа уязвимостей, сред CTF, отладки ядра и защитного тестирования.
Не используйте код proof-of-concept против систем без явного разрешения.
В рекомендации по CVE проблема описывается как целочисленное переполнение,
которое может привести к тому, что skb->data окажется за пределами
выделенного skb head.
Уязвимость существует в приёмном пути TUN/TAP ядра Linux.
Уязвимый код использует настроенный приёмный headroom TUN-устройства как в качестве headroom пакета, так и при вычислении того, сколько данных пакета должно оставаться линейным.
Таким образом, завышенное значение headroom может создать некорректное вычисление в:
SKB_MAX_HEAD(align)
Когда переданное значение превышает доступный бюджет skb head размером в одну страницу, вычисление может привести к целочисленному переполнению.
Концептуально:
Oversized receive headroom
│
▼
SKB_MAX_HEAD()
│
▼
Integer underflow
│
▼
Negative value
│
▼
size_t wrap
│
▼
Invalid skb data placement
│
▼
Kernel memory corruption
Уязвимая реализация находится в:
drivers/net/tun.c
при этом tun_get_user() является центральным элементом уязвимого пути.
Основная проблема — недостаточно ограниченный приёмный headroom TUN.
Ядро может получить завышенный запрос headroom через пути сетевых устройств, которые передают это значение в TUN/TAP.
Уязвимость становится особенно интересной, когда сложная конфигурация виртуальной сети приводит к тому, что большое значение headroom достигает TUN-устройства.
Публичное раскрытие описывает сценарий, включающий:
Netkit
│
▼
VXLAN
│
▼
Open vSwitch
│
▼
TUN
Пример конфигурации может передать примерно 4160 байт headroom в сырой TUN-порт, вызывая целочисленное переполнение в уязвимой арифметике.
Повреждение происходит в логике управления памятью сетевой подсистемы ядра.
Потенциальные последствия включают:
В публичном раскрытии уязвимость описывается как одна из группы уязвимостей локального получения root в Linux, и утверждается, что опубликованный PoC может обеспечить выполнение от непривилегированного локального пользователя до root на поддерживаемых целях.
Эксплуатируемость зависит от окружения и требует соответствующей конфигурации TUN/сетевого устройства и вспомогательной функциональности.
ATTACKER
│
▼
Oversized network headroom
│
▼
Virtual network device
│
▼
Open vSwitch
│
▼
TUN/TAP
│
▼
tun_get_user()
│
▼
SKB_MAX_HEAD(align)
│
▼
Integer underflow
│
▼
size_t wraparound
│
▼
Invalid skb->data offset
│
▼
Kernel memory corruption
Важными компонентами являются:
drivers/net/tun.c
│
├── tun_set_headroom()
│
├── tun_get_user()
│
└── tun_alloc_skb()
Уязвимую взаимосвязь можно упрощённо представить как:
tun->align
│
├── skb headroom
│
└── linear-data calculation
Использование одного и того же завышенного значения в обоих вычислениях создаёт небезопасную взаимосвязь между запрошенным headroom и фактическим бюджетом skb head.
Критическое свойство безопасности можно концептуально представить как:
usable_head < requested_headroom
что может привести к:
SKB_MAX_HEAD(align) < 0
с последующим преобразованием в беззнаковый тип:
negative value
↓
size_t
↓
very large unsigned value
Это в конечном итоге может повлиять на выделение skb и размещение данных.
В официальном описании особо отмечается, что результирующее значение
переполняется при присваивании переменной linear типа size_t.
Исправление в upstream:
447c9303942c439a117d9b76ce6d6e2116c38ee7
Коммит:
net: tun: bound receive headroom
Исправление ограничивает headroom, сохраняемый TUN, относительно доступного бюджета skb head размером в одну страницу и максимального допустимого 16-битного смещения заголовка skb. Оно также гарантирует наличие достаточного объёма линейных данных для обработки сырых TUN и TAP.
User / network device
│
▼
Large headroom
│
▼
tun->align
│
▼
Unsafe arithmetic
│
▼
Potential OOB access
User / network device
│
▼
Large headroom
│
▼
Bounded headroom
│
▼
Safe skb calculation
│
▼
Normal packet processing
Рекомендуемая лабораторная топология:
┌─────────────────────────────────────────┐
│ Linux VM / Host │
│ │
│ ┌─────────┐ ┌──────────────┐ │
│ │ Netkit │────▶│ VXLAN │ │
│ └─────────┘ └──────┬───────┘ │
│ │ │
│ ┌──────▼───────┐ │
│ │ Open vSwitch │ │
│ └──────┬───────┘ │
│ │ │
│ ┌──────▼───────┐ │
│ │ TUN/TAP │ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────┘
Полезные инструменты:
uname -a
ip link
ip tuntap
bridge link
ovs-vsctl show
dmesg -w
Для отладки ядра:
GDB
GDB + GEF
GDB + pwndbg
crash
objdump
readelf
pahole
Проверьте работающее ядро:
uname -r
Проверьте конфигурацию ядра:
grep CONFIG_TUN /boot/config-$(uname -r)
Ожидаемая конфигурация:
CONFIG_TUN=y
или:
CONFIG_TUN=m
Проверьте, загружен ли модуль:
lsmod | grep tun
Публичное раскрытие предоставляет специальный репозиторий PoC TUNderflow для контролируемой проверки.
Для безопасного исследовательского процесса:
1. Build vulnerable kernel
2. Boot isolated VM
3. Configure TUN/TAP
4. Reproduce oversized headroom
5. Monitor kernel messages
6. Capture crash/corruption behavior
7. Apply upstream patch
8. Repeat test
9. Compare results
Мониторинг ядра:
sudo dmesg -w
Цель лаборатории — продемонстрировать разницу между уязвимым и исправленным поведением, а не атаковать производственные системы.
CVE-2026-81000-TUNderflow/
│
├── README.md
│
├── exploit/
│ ├── poc.c
│ └── Makefile
│
├── analysis/
│ ├── root-cause.md
│ ├── kernel-path.md
│ ├── integer-underflow.md
│ └── patch-analysis.md
│
├── kernel/
│ ├── vulnerable/
│ └── patched/
│
├── lab/
│ ├── setup.sh
│ ├── cleanup.sh
│ └── topology.md
│
├── screenshots/
│
├── docs/
│ └── research-notes.md
│
└── LICENSE
Рекомендуемая мера защиты — установить ядро, содержащее исправление безопасности из upstream, или соответствующий backport от дистрибутива.
Для Debian/Kali:
sudo apt update
sudo apt full-upgrade
Затем перезагрузитесь:
sudo reboot
Проверьте:
uname -r
Для производственных сред проверяйте установленное ядро дистрибутива по рекомендации по безопасности от производителя, а не полагайтесь исключительно на номер версии upstream.
Oracle Linux, например, опубликовал обновления безопасности, содержащие
исправление net: tun: bound receive headroom.
В публичном раскрытии указаны следующие стабильные релизы ядра как первые релизы, содержащие исправления для четырёх раскрытых уязвимостей локального получения root, включая TUNderflow:
TUNderflow демонстрирует несколько важных принципов безопасности ядра:
Значения конфигурации сети никогда не должны слепо приниматься на веру.
Целочисленное переполнение может превратить кажущееся безобидным вычисление в примитив нарушения безопасности памяти.
Значение headroom сетевого устройства должно оставаться согласованным с фактическим бюджетом памяти skb.
Уровни виртуальной сети могут передавать неожиданные метаданные пакетов через несколько подсистем.
Изучение исправления в upstream часто даёт более ясное понимание исходной уязвимости, чем рассмотрение только лишь краха.
drivers/net/tun.ctun_get_user()447c9303942c439a117d9b76ce6d6e2116c38ee7net: tun: bound receive headroom0xBlackash
Cybersecurity Research · Linux Kernel Security · Vulnerability Research · CTF
CVE-2026-81000 · TUNderflow · TUN/TAP · Linux Kernel · LPE
| Поле | Детали |
|---|
| CVE | CVE-2026-81000 |
| Кодовое имя | TUNderflow |
| Компонент | Ядро Linux |
| Подсистема | TUN/TAP |
| Уязвимый код | drivers/net/tun.c |
| Основная функция | tun_get_user() |
| Класс ошибки | Целочисленное переполнение / выход за границы памяти |
| Воздействие | Повреждение памяти ядра |
| Потенциальное воздействие | Локальное повышение привилегий |
| CVSS v3.1 | 7.8 — Высокий |
| Вектор атаки | Локальный |
| Требуемые привилегии | Низкие |
| Взаимодействие с пользователем | Отсутствует |
| Статус | Исправлено |
| Свойство безопасности | Уязвимая | Исправленная |
|---|
| Headroom ограничен | ❌ | ✅ |
| Большой headroom обрабатывается безопасно | ❌ | ✅ |
| Условие переполнения предотвращено | ❌ | ✅ |
| Размещение данных skb защищено | ❌ | ✅ |
| Некорректная конфигурация сети безопасно отклоняется | ❌ | ✅ |
| Ветка | Исправленный релиз |
|---|
| 5.10 | 5.10.270 |
| 5.15 | 5.15.221 |
| 6.1 | 6.1.188 |
| 6.6 | 6.6.157 |
| 6.12 | 6.12.109 |
| 6.18 | 6.18.50 |
| 7.2 | 7.2.4 |