Облачная платформаОблако VMware

Уведомление об уязвимостях Dirty Frag и Fragnesia


В версиях ядра Linux, выпущенных с 2017 по 2026 год, обнаружены критические уязвимости Dirty Frag CVE-2026-43284 и CVE-2026-43500 и Fragnesia CVE-2026-46300 . Уязвимости связаны с ошибками в механизмах записи кеша страницы в компонентах xfrm-ESP и RxRPC. Уязвимость позволяет локальным пользователям изменять содержимое кеша страниц любого читаемого файла в системе и повышать права до root на большинстве распространенных дистрибутивов Linux.

На платформе Облако VMware затронуты все дистрибутивы на базе Linux, включая Ubuntu, Debian и CentOS. Выпуск патча для всех образов ВМ на платформе Облако VMware ожидается в ближайшее время. Если ВМ была создана из образа, для нее достаточно будет обновить ОС до актуальной.

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

Чтобы проверить подверженность вашей системы уязвимости CVE-2026-43284 в модуле xfrm-ESP:

  1. Проверьте, затронута ли версия ядра.

    Для этого запустите команду, которая покажет текущую версию системы:

    uname -r
    • Если версия ядра меньше 4.11, уязвимость не затрагивает систему.

    • Если версия ядра больше или равна 4.11 — система уязвима, переходите к следующему шагу.

    • Если версия ядра 4.x, но ниже 4.11, и дата компиляции ядра — январь 2017 года или позже, необходимо проверить, содержит ли дистрибутив коммит cac2661c53f3, в котором появилась уязвимость. Если коммит содержится, то система уязвима — переходите к следующему шагу.

  2. Проверьте, содержит ли система модуль xfrm-ESP.

    Посмотрите конфигурацию компиляции текущей системы:

    zcat /proc/config.gz | grep CONFIG_XFRM_ESP or
    cat /boot/config-$(uname -r) | grep CONFIG_XFRM_ESP or
    zcat /proc/config.gz | grep CONFIG_INET_ESP or
    cat /boot/config-$(uname -r) | grep CONFIG_INET_ESP
    • Если все результаты пустые, отображается # CONFIG_XFRM_ESP is not set или # CONFIG_INET_ESP is not set, система не поддерживает этот модуль. Уязвимость не затрагивает систему, проверку можно завершить.

    • Если в каком-либо из результатов указано =y или =m — система уязвима, переходите к следующему шагу проверки.

  3. Убедитесь, нужно ли митигировать уязвимость.

    Проверьте, загружены ли в системе модули, связанные с ESP:

    lsmod | grep esp
    • Если вывод команды не пустой и содержит esp, переходите к шагу 4 для дальнейшей проверки.

    • Если вывод пустой, модуль не загружен. Далее проверьте следующее:

      Если в вашей конфигурации указано CONFIG_XFRM_ESP = m или CONFIG_INET_ESP = m, проверьте, отключены ли на хосте модули esp4/esp6. Для этого проверьте, содержит ли конфигурация в каталоге /etc/modprobe.d/ следующие строки:

    install esp4 /bin/false
    install esp6 /bin/false

    Если да, система неуязвима, проверку можно завершить.

    Если нет, проверьте, поддерживает ли текущая операционная система параметр CONFIG_USER_NS:

    zcat /proc/config.gz | grep CONFIG_USER_NS or
    cat /boot/config-$(uname -r) | grep CONFIG_USER_NS
    • Если в результате выводится y, переходите к шагу 4.

    • Если вывод пустой или указано not set, переходите к шагу 5.

  4. Для сценариев с поддержкой CONFIG_USER_NS проверьте, выключена ли команда unshare.

    Если CONFIG_XFRM_ESP или CONFIG_INET_ESP имеют значение m или y, проверьте, отключена ли возможность использования команды unshare. Для этого на виртуальной машине или в контейнере выполните команду создания пользовательского и сетевого пространства имен от имени обычного пользователя:

    unshare -Un -r /bin/bash

    Если каталог /bin/bash` отсутствует:

    unshare -Un -r /bin/sh
    • Если после выполнения команды появляется ошибка вида unshare failed или Operation Not Permitted, система неуязвима и проверку можно завершить.

    • Если ошибка не возникает и появляется оболочка с правами root, система уязвима.

    • Если в системе отсутствует команда unshare или нет интерпретаторов sh, bash (ошибка not found), необходимо самостоятельно скомпилировать тестовый файл unshare-poc.c для проверки:

    1. Создайте файл unshare-poc.c и скопируйте в него код:

      #define _GNU_SOURCE
      #include <sched.h>
      #include <stdio.h>
      #include <errno.h>
      #include <string.h>
      #include <unistd.h>
      int main()
      {
      int ret;
      printf("[*] testing unshare(CLONE_NEWUSER)\n");
      ret = unshare(CLONE_NEWUSER);
      if (ret == 0) {
      printf("[+] CLONE_NEWUSER allowed\n");
      } else {
      printf("[-] failed: %s (%d)\n",
      strerror(errno),
      errno);
      }
      return 0;
      }
    2. Выполните статическую компиляцию тестового файла:

      gcc unshare-poc.c -static -o unshare-poc
    3. Запустите файл на целевой системе.

      • Если вывод содержит строку CLONE_NEWUSER allowed — система уязвима.

      • Если вывод содержит failed — система неуязвима.

    Проверка завершена.

  5. Для сценариев без поддержки CONFIG_USER_NS проверьте, имеет ли обычный пользователь права CAP_NET_ADMIN.

    Если CONFIG имеет значение m или y, проверьте, есть ли у обычного пользователя права CAP_NET_ADMIN. Для этого войдите в систему под обычным пользователем и выполните команду:

    grep '^CapEff:' /proc/$$/status
    • Если результат содержит только нули, система неуязвима и проверку можно завершить.

    • Если в результате не все нули, например 000001ffffffffff, скопируйте свое значение и выполните следующую команду для верификации прав:

    capsh --decode=000001ffffffffff # Замените на фактическое значение из вывода

    Пример вывода:

    0x000001ffffffffff=cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read,cap_perfmon,cap_bpf,cap_checkpoint_restore
    • Если в списке есть CAP_NET_ADMIN, система уязвима.

    • Если нет, система неуязвима.

    Проверка завершена.

Как митигировать уязвимости Dirty Frag и Fragnesia

Чтобы митигировать уязвимости в дистрибутивах AlmaLinux и Rocky Linux, обновите ОС до последней версии. Для остальных дистрибутивов следуйте шагам митигации ниже.

Внимание

Способ митигации нарушит функциональность IPsec. Оцените влияние на вашу среду, чтобы избежать сбоев.

  1. Для случаев CONFIG_XFRM_ESP = m или CONFIG_INET_ESP = m проверьте зависимость текущего хоста от модуля ESP:

    lsmod | grep esp
    • Если вывод пустой, отключите ESP:

      echo "install esp4 /bin/false" >> /etc/modprobe.d/disable-esp.conf
      echo "install esp6 /bin/false" >> /etc/modprobe.d/disable-esp.conf

      Чтобы проверить, что ESP отключен, выполните команду:

      modprobe esp4
    • Если появится сообщение «ERROR», меры митигации применились успешно.

    • Если вывод команды lsmod не пустой и cодержит esp4 или esp6, примените метод, описанный ниже, для отключения возможности создания новых пространств имен, если это не повлияет на вашу среду негативно.

  2. Для случая CONFIG_XFRM_ESP=y или CONFIG_INET_ESP=y отключите создание новых пространств имен:

    echo 0 > /proc/sys/user/max_user_namespaces

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

См.также