
Лабораторное упражнение по обнаружению DirtyFrag (CVE-2026-43284) — повышение привилегий в ядре Linux через повреждение кэша страниц xfrm-ESP. Полное описание, охватывающее выполнение эксплойта, пробелы в обнаружении и исправленные правила EQL с использованием Elastic Stack.
Классификация: Внутренняя лаборатория - CyberLAB
Дата: 24 мая 2026 г.
Платформа: Elastic Stack v9.4.1
Статус: Обнаружение подтверждено
Контролируемое упражнение по эксплуатации, моделирующее атакующего после получения начального доступа, использующего DirtyFrag (CVE-2026-43284), уязвимость повышения привилегий в ядре Linux. Сценарий моделируемого атакующего: пользователь с низкими привилегиями (saskia, uid=1001), полученный через скомпрометированные учетные данные, пытается повысить права до root на внутреннем Linux-хосте. В лаборатории использовалась намеренно уязвимая машина Ubuntu (ubuntu-vuln, ядро 6.0.0-22-generic), изолированная от производственных сетей.
Атакующий получил полный доступ root (uid=0) в лабораторной среде. Стек обнаружения Elastic Security сгенерировал 3 оповещения ВЫСОКОЙ степени серьезности (оценка риска 73), корректно идентифицирующих цепочку эксплуатации. Однако для обнаружения потребовалась ручная настройка - конфигурация «из коробки» имела пробелы, которые привели бы к пропущенным оповещениям.
Суть: Незапатченные Linux-хосты с ядром <= 6.x уязвимы. Если атакующий уже имеет точку опоры с низкими привилегиями, этот эксплойт быстро и незаметно дает ему полный root, не оставляя следов на диске, видимых для средств контроля целостности файлов.
| Пункт | Детали |
|---|---|
| Уязвимость | DirtyFrag - CVE-2026-43284 (путь xfrm-ESP), CVE-2026-43500 (путь RxRPC) |
| Влияние CVSS | Полное локальное повышение привилегий до root |
| Затронутые ядра | Linux kernel >= Январь 2017 (9-летний срок жизни) |
| Затронутые дистрибутивы | Ubuntu 24.04.4, RHEL 10.1, AlmaLinux 10, openSUSE, CentOS Stream 10, Fedora 44 |
| Обход целостности файлов | Файлы на диске не изменяются - AIDE, Tripwire, мониторинг хешей сообщают о чистоте |
| Общедоступный PoC | Доступен (V4bel/dirtyfrag на GitHub) |
| Время до получения root | < 10 минут от точки опоры с низкими привилегиями |
auditd по умолчанию не дают никаких доказательств. Без явных правил системных вызовов для socket, splice и unshare эксплойт выполняется незаметно - нет журналов, нет оповещений. Развертывание Elastic Agent по умолчанию не добавляет эти правила автоматически.process.parent.pid в качестве ключа корреляции. На практике DirtyFrag порождает промежуточные процессы, нарушая эту корреляцию. Исправление - корреляция по auditd.session - было выявлено и реализовано в ходе этого упражнения./etc/shadow, получил доступ к SSH-ключам авторизации, записал маркер персистентности (/root/pwned.txt) и инициировал сетевую разведку через nc. Все это произошло в течение 30 минут после первоначального доступа.| Приоритет | Действие |
|---|---|
| Немедленно | Заплатить ядро Linux до исправленной версии на всех хостах. Применить рекомендации по безопасности от вендоров для Ubuntu, RHEL, AlmaLinux, openSUSE, CentOS, Fedora. |
| Краткосрочно | Развернуть явные правила auditd для системных вызовов socket, splice и unshare на всех Linux-хостах, контролируемых Elastic Agent. |
| Краткосрочно | Обновить правила обнаружения EQL для корреляции по auditd.session, а не по process.parent.pid для последовательностей манипуляции пространствами имен. |
| Постоянно | Рассматривать оповещения о повышении привилегий с оценкой риска >= 73 как триаж высокого приоритета. Текущее правило срабатывает в течение секунд после повышения. |
Цель: Проверить покрытие обнаружения эксплуатации DirtyFrag в домашней лабораторной SOC, выявить пробелы в обнаружении и создать исправленное правило обнаружения, основанное на наблюдаемом поведении атакующего.
Модель угрозы: Моделируемый атакующий после получения начального доступа со скомпрометированными учетными данными для учетной записи пользователя с низкими привилегиями (saskia, uid=1001). Цель: повышение привилегий до root через DirtyFrag с использованием пути приема xfrm-ESP. Выполнение в лаборатории осуществлялось через консоль Proxmox - функционально эквивалентно доступу после SSH.
Рассматривались два уровня возможностей атакующего:
Данное упражнение охватывало обычный уровень.
DirtyFrag является третьим в семействе связанных ошибок ядра Linux, которые все используют одну и ту же первопричину:
| CVE | Псевдоним | Введена | Путь |
|---|---|---|---|
| CVE-2022-0847 | Dirty Pipe | - | pipe |
| CVE-2026-31431 | Copy Fail | - | splice |
| CVE-2026-43284 | DirtyFrag | Янв 2017 (коммит cac2661c53f3) | xfrm-ESP |
| CVE-2026-43500 | DirtyFrag | Июн 2023 (коммит 2dc334f1a63a) | RxRPC |
Первопричина: Пути добавления дейтаграмм IPv4/IPv6 не устанавливали флаг SKBFL_SHARED_FRAG после того, как skb_splice_from_iter() помещал страницу кэша страниц в буфер сокета (sk_buff). Затем путь ввода ESP выполнял криптографию на месте на страницах кэша страниц, контролируемых атакующим, рассматривая их как обычные не клонированные нелинейные skb.
Примитив эксплойта: Контролируемая запись размером 4 или 8 байт в кэш страниц. Детерминированный - не требуется состояние гонки.
Цепочка эксплойта:
/usr/bin/su) в кэш страницsplice(), чтобы страница файла оказалась в frag[0] структуры struct sk_buffxfrm-ESPexecve() ядра - возвращают поврежденные байтыКритическое свойство уклонения: Файл на диске никогда не изменяется. Средства мониторинга целостности файлов (AIDE, Tripwire, проверки хешей) все сообщают о целостности целевого файла.
Подтвержденные уязвимые дистрибутивы: Ubuntu 24.04.4, RHEL 10.1, AlmaLinux 10, openSUSE Tumbleweed, CentOS Stream 10, Fedora 44.