The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уязвимости Dirty Frag, изменяющие страничный кэш для получения root в любых дистрибутивах Linux

08.05.2026 09:24 (MSK)

В ядре Linux выявлены две уязвимости, по своей сути аналогичные несколько дней назад раскрытой уязвимости Copy Fail, но проявляющиеся в других подсистемах - xfrm-ESP и RxRPC. Серии уязвимостей присвоено кодовое имя Dirty Frag (также встречается упоминание Copy Fail 2). Уязвимости позволяют непривилегированному пользователю получить права root, перезаписав данные процесса в страничном кэше. Доступен эксплоит, работающий во всех актуальных дистрибутивах Linux. Информация об уязвимости раскрыта до публикации исправлений, но есть обходной метод блокирования проблемы.

Dirty Frag охватывает две разные уязвимости: первая в модуле xfrm-ESP, используемом для ускорения операций шифрования в IPsec с использованием протокола ESP (Encapsulating Security Payload), а вторая в драйвере RxRPC, реализующем семейство сокетов AF_RXRPC и одноимённый RPC-протокол, работающий поверх UDP. Каждая из уязвимостей по-отдельности позволяет добиться получения прав root. Уязвимость в xfrm-ESP проявляется в ядре Linux с января 2017 года, а уязвимость в RxRPC - с июня 2023 года. Обе проблемы вызваны оптимизациями, допускающими прямую запись в страничный кэш.

Для эксплуатации уязвимости в xfrm-ESP у пользователя должны быть права на создание пространств имён, а для эксплуатации уязвимости в RxRPC должна быть возможность загрузки модуля ядра rxrpc.ko. Например, в Ubuntu в правилах AppArmor непривилегированному пользователю запрещено создание пространств имён, но по умолчанию загружается модуль rxrpc.ko. В каких-то дистрибутивах отсутствует модуль rxrpc.ko, а но не блокируется создание пространств имён. Выявивший проблему исследователь подготовил комбинированный эксплоит, способный атаковать систему через обе уязвимости, что позволяет эксплуатировать проблему во всех крупных дистрибутивах. Работа эксплоита подтверждена в Ubuntu 24.04.4 с ядром 6.17.0-23, RHEL 10.1 с ядром 6.12.0-124.49.1, openSUSE Tumbleweed с ядром 7.0.2-1, CentOS Stream 10 c ядром 6.12.0-224, AlmaLinux 10 с ядром 6.12.0-124.52.3 и Fedora 44 с ядром 6.19.14-300.

Как и в случае с уязвимостью Copy Fail, проблемы в xfrm-ESP и RxRPC вызваны выполнением расшифровки данных по месту c использованием функции splice(), передающей данные между файловыми дескрипторами и каналами (pipe) без копирования, путём передачи ссылок на элементы в страничном кэше. Смещения для операции записи рассчитывались без должных проверок, учитывающих использование прямой ссылки на элементы в страничном кэше, что позволяло через отправку специально оформленных запросов перезаписать 4 байта по выбранному смещению и изменить находящееся страничном кэше содержимое любого файла.

Все операции чтения из файлов в первую очередь отдают содержимое из страничного кэша. В случае модификации данных в страничном кэше операции чтения из файла приведут к возвращению не реально хранимой на накопителе информации, а подменённых данных. Эксплуатация уязвимости сводится к изменению страничного кэша для исполняемого файла с флагом suid root. Например, для получения прав root можно прочитать исполняемый файл /usr/bin/su для его помещения в страничный кэш, после чего добиться подстановки своего кода в загруженное в страничный кэш содержимого этого файла. Последующий запуск утилиты "su" приведёт к тому, что в память будет загружен не оригинальный исполняемый файл с накопителя, а изменённая копия из страничного кэша.

Раскрытие информации об уязвимостях и скоординированный выпуск обновлений с устранением проблем было намечено на 12 мая, но из-за утечки информации сведения об уязвимости пришлось опубликовать до публикации исправлений. В конце апреля в публичном списке рассылки netdev были опубликованы патчи к rxrpc, ipsec и xfrm, без упоминания, что они связаны с устранением уязвимости. 5 мая мэйнтейнер подсистемы IPsec принял в git-репозиторий netdev изменение c предлагаемым исправлением в модуле xfrm-esp, описание к которому во многом повторяло описание проблемы, приведшей к уязвимости Copy Fail в модуле algif_aead. Один из исследователей безопасности заинтересовался этим исправлением, сумел создать рабочий эксплоит и опубликовал его, не зная о том, что на раскрытие сведений о проблеме до 12 мая введено эмбарго.

Обновления с исправлениями для ядра Linux и пакетов с ядром в дистрибутивах пока не опубликованы, но доступны устраняющие проблемы патчи - xfrm-esp и rxrpc. CVE-идентификаторы не присвоены, что усложняет отслеживание обновления пакетов в дистрибутивах. В качестве обходного пути защиты можно заблокировать загрузку модулей ядра esp4, esp6 и rxrpc:


   sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"


  1. Главная ссылка к новости (https://www.openwall.com/lists...)
  2. OpenNews: Уязвимость в ядре Linux, позволяющая исказить файлы, доступные только для чтения
  3. OpenNews: Критическая уязвимость в ядре Linux, уже эксплуатируемая злоумышленниками
  4. OpenNews: В ядре Linux выявлен новый вариант уязвимости Dirty COW
  5. OpenNews: Атака по определению состояния памяти процессов при помощи страничного кэша
  6. OpenNews: Copy Fail - уязвимость в ядре Linux, позволяющая получить root в большинстве дистрибутивов
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/65395-dirtyfrag
Ключевые слова: dirtyfrag, pagecache, linux
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (15) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 10:04, 08/05/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –1 +/
     
  • 1.2, _hide_ (ok), 10:09, 08/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >>> работающий во всех актуальных дистрибутивах Linux

    Под андроидом пашет?

     
     
  • 2.4, Аноним (4), 10:20, 08/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Только что рутанул свой самсунг.
     
     
  • 3.15, pashev.ru (?), 10:46, 08/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Только что рутанул твой самсунг.

    Починил )

     

  • 1.3, нах. (?), 10:13, 08/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    кто-нибудь догадается предупредить л-ов что данная команда  (в отличие от совершенно безобидной для предыдущего эксплойта, отключающей модуль используемый примерно никем) - эффективно сломает им ipsec, или улыбаемся и машем?

     
     
  • 2.5, Аноним (5), 10:28, 08/05/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.7, anonymous (??), 10:31, 08/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Так там-же черному по серому написанно, что уязвимость вызвана агрессивной оптимизацией. Её отлключет и все просто будет работать медленнее, а так это ещё один повод перейти на семейтво bsd.
     
     
  • 3.9, Аноним (1), 10:38, 08/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    в BSD думаю никто не искал ещё
     
  • 3.11, Аноним (11), 10:40, 08/05/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    У bsd меньше внимания, а не меньше уязвимостей.
     
  • 2.13, Аноним (13), 10:41, 08/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    На локалхостах эта оверинжениринная байда ненужна, админы локалхостов не парятся.
     

  • 1.6, King_Carlo (ok), 10:29, 08/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хороший компьютер - отключённый от сети компьютер, ибо нефиг!
     
     
  • 2.8, anonymous (??), 10:33, 08/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    ... залитый в бетон, а luser спит или умер © Касперский
     

  • 1.10, А ноним (?), 10:39, 08/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    $ ./a.out --verbose
    [su] add_xfrm_sa #0 failed
    [su] corruption stage failed (status=0x200)

    === rxrpc/rxkad LPE EXPLOIT (uid=1000 → root) ===
    [*] uid=1018 euid=1018 gid=669
    [!] socket(AF_RXRPC): Address family not supported by protocol — module not loadable?

    === rxrpc/rxkad LPE EXPLOIT (uid=1000 → root) ===
    [*] uid=1018 euid=1018 gid=669
    [!] socket(AF_RXRPC): Address family not supported by protocol — module not loadable?

    === rxrpc/rxkad LPE EXPLOIT (uid=1000 → root) ===
    [*] uid=1018 euid=1018 gid=669
    [!] socket(AF_RXRPC): Address family not supported by protocol — module not loadable?

    === rxrpc/rxkad LPE EXPLOIT (uid=1000 → root) ===
    [*] uid=1018 euid=1018 gid=669
    [!] socket(AF_RXRPC): Address family not supported by protocol — module not loadable?
    dirtyfrag: failed (rc=1)

    ЧЯДНТ?

     
  • 1.12, Аноним (12), 10:40, 08/05/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Конец универсальным ядрам. Меньше модулей - меньше уязвимостей.
     
     
  • 2.14, Аноним (13), 10:45, 08/05/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Загрузка модулей легко блокируется после загрузки необходимых на данном хосте.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру