Dirty Frag: локальное повышение привилегий в ядре Linux#
Источник: CERT/CC VU#980487
Суть уязвимости#
Новая локальная уязвимость, названная “Dirty Frag”, затрагивает ядра Linux версии 4.10 и выше. Она использует подсистему фрагментации и сборки IPv4/IPv6, комбинируя две ранее известные ошибки: xfrm-ESP Page-Cache Write и RxRPC Page-Cache Write. Проблема возникает при некорректной обработке перекрывающихся или некорректных смещений фрагментов, что позволяет вызвать повреждение памяти или kernel panic. PoC-эксплойты показывают, что возможны управляемые выходы за границы буфера, потенциально открывая путь к локальному повышению привилегий или выходу из контейнера.
Почему это важно#
Риски существуют для систем, обрабатывающих специально сформированные сетевые пакеты. В зависимости от конфигурации, жесткости ядра и сетевой доступности, Dirty Frag может привести к:
- Локальному или удалённому отказу в обслуживании через kernel panic.
- Повреждению памяти в сетевом стеке.
- Побегу из контейнера в уязвимых средах.
- Дополнительным примитивам эксплуатации при цепочке с другими уязвимостями.
Особенность уязвимости в том, что она использует существующие механизмы ядра, а не новые векторы атаки, что повышает надежность эксплуатации при наличии доступа к пакетам.
Что проверить и как защититься#
Основные меры — обновление и временные обходные пути:
- Патч: Обновите ядро через стандартные каналы дистрибутива, когда выйдет обновление.
- Модули: Если патч задерживается, отключите уязвимые модули:
sh -c "printf 'install esp4 /bin/false
install esp6 /bin/false
install rxrpc /bin/false
' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; echo 3 > /proc/sys/vm/drop_caches; true"
- При загрузке: Для встроенных модулей добавьте
initcall_blacklist=esp4,esp6,rxrpcв параметры загрузки и перезагрузите систему. - Контейнеры: Применяйте seccomp-фильтры, AppArmor-политики или eBPF-контроль для блокировки создания сокетов AF_ALG и AF_RXRPC.
Проверяйте /sys/module/<module_name>/refcnt перед отключением модуля. Если используете контейнеры, пересмотрите политики безопасности runtime.
Чего не стоит преувеличивать#
- Dirty Frag в основном локальный; удалённая эксплуатация требует доступа к специально подготовленным пакетам.
- Kernel panic сам по себе не всегда ведёт к повышению привилегий.
- PoC демонстрирует повреждение памяти, но реальный путь к root зависит от других факторов: контейнеризации, опций сборки ядра и уровней защиты.
- Официальные заявления производителей ещё не опубликованы; в продакшене опирайтесь на патчи upstream, а не на сторонние форки.
Эта уязвимость подчёркивает важность оперативного применения патчей, контроля модулей и мер защиты на уровне контейнеров.