CVE-2022-2586

Linux Kernel

ВЕРОЯТНОСТЬ 2.3%

Дата обнаружения

2024-06-26

Официальное описание

Linux Kernel contains a use-after-free vulnerability in the nft_object, allowing local attackers to escalate privileges.

🛡️
Технический анализ и план устранения

Суть уязвимости

CVE-2022-2586 — это критическая уязвимость типа Use-After-Free (использование памяти после освобождения) в подсистеме netfilter ядра Linux, а именно в реализации объектов nft_object.

Проблема заключается в некорректной обработке ссылок на объекты при обновлении правил nftables. Локальный пользователь с минимальными привилегиями может спровоцировать ситуацию, когда ядро продолжает обращаться к объекту, который уже был удален из памяти. Это позволяет злоумышленнику выполнить произвольный код в контексте ядра, что приводит к полному захвату системы (LPE — Local Privilege Escalation) и обходу механизмов изоляции контейнеров.

Как исправить

Основным способом устранения является обновление ядра Linux до версии, в которой присутствует соответствующий патч (исправлено в версиях 5.19, 5.18.11, 5.15.54, 5.10.131 и выше).

  1. Обновите список пакетов и установите последние обновления безопасности:
sudo apt update && sudo apt upgrade

  1. Если вы используете RHEL/CentOS/Fedora:
sudo dnf update kernel

  1. После обновления ядра необходимо перезагрузить систему для применения изменений:
sudo reboot

  1. Проверьте версию ядра после перезагрузки, чтобы убедиться, что исправление применено:
uname -r

Временные меры

Если немедленное обновление ядра и перезагрузка невозможны, необходимо ограничить доступ к функционалу, который эксплуатирует уязвимость.

  1. Отключите возможность создания пользовательских пространств имен (User Namespaces). Уязвимость требует наличия прав CAP_NET_ADMIN, которые обычный пользователь может получить внутри не привилегированного user namespace.
sudo sysctl -w kernel.unprivileged_userns_clone=0

  1. Чтобы настройка сохранилась после перезагрузки, добавьте её в конфигурационный файл:
echo "kernel.unprivileged_userns_clone=0" | sudo tee /etc/sysctl.d/99-disable-unpriv-userns.conf

  1. Если ваша система не использует nftables, вы можете выгрузить соответствующие модули ядра (требуется осторожность, так как это может нарушить работу сетевого экрана):
sudo modprobe -r nf_tables

  1. Запретите загрузку модуля nf_tables через blacklist:
echo "blacklist nf_tables" | sudo tee /etc/modprobe.d/blacklist-nftables.conf