CVE-2022-2586
Linux Kernel
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 и выше).
- Обновите список пакетов и установите последние обновления безопасности:
sudo apt update && sudo apt upgrade
- Если вы используете RHEL/CentOS/Fedora:
sudo dnf update kernel
- После обновления ядра необходимо перезагрузить систему для применения изменений:
sudo reboot
- Проверьте версию ядра после перезагрузки, чтобы убедиться, что исправление применено:
uname -r
Временные меры
Если немедленное обновление ядра и перезагрузка невозможны, необходимо ограничить доступ к функционалу, который эксплуатирует уязвимость.
- Отключите возможность создания пользовательских пространств имен (User Namespaces). Уязвимость требует наличия прав
CAP_NET_ADMIN, которые обычный пользователь может получить внутри не привилегированного user namespace.
sudo sysctl -w kernel.unprivileged_userns_clone=0
- Чтобы настройка сохранилась после перезагрузки, добавьте её в конфигурационный файл:
echo "kernel.unprivileged_userns_clone=0" | sudo tee /etc/sysctl.d/99-disable-unpriv-userns.conf
- Если ваша система не использует nftables, вы можете выгрузить соответствующие модули ядра (требуется осторожность, так как это может нарушить работу сетевого экрана):
sudo modprobe -r nf_tables
- Запретите загрузку модуля
nf_tablesчерез blacklist:
echo "blacklist nf_tables" | sudo tee /etc/modprobe.d/blacklist-nftables.conf