CVE-2023-4911
GNU GNU C Library
2023-11-21
GNU C Library's dynamic loader ld.so contains a buffer overflow vulnerability when processing the GLIBC_TUNABLES environment variable, allowing a local attacker to execute code with elevated privileges.
Технический анализ и план устранения
Суть уязвимости
Уязвимость CVE-2023-4911 (известная как Looney Tunables) представляет собой переполнение буфера в куче (heap-based buffer overflow) в динамическом загрузчике ld.so библиотеки GNU C Library (glibc). Проблема возникает при обработке переменной окружения GLIBC_TUNABLES, когда она содержит некорректно сформированные данные (например, повторяющиеся параметры с лишними кавычками).
Поскольку динамический загрузчик используется при запуске программ с установленным битом SUID (например, sudo, chsh), локальный неавторизованный пользователь может использовать эту ошибку для повреждения памяти и выполнения произвольного кода с правами суперпользователя (root).
Как исправить
Основным и единственным надежным способом устранения уязвимости является обновление пакета glibc до версии, в которой исправлена ошибка обработки строк.
- Обновите индексы пакетов:
sudo apt update
- Установите обновления для glibc (для Debian/Ubuntu):
sudo apt install --only-upgrade libc6 libc-bin libc-l10n locales
- Для систем на базе RHEL/CentOS/Fedora:
sudo yum update glibc
- После обновления рекомендуется перезагрузить систему, чтобы убедиться, что все запущенные процессы и службы используют новую версию библиотеки:
sudo reboot
Временные меры
Если немедленное обновление библиотеки невозможно, необходимо ограничить возможность эксплуатации через системные инструменты мониторинга или фильтрацию переменных окружения.
- Использование SystemTap для блокировки запуска SUID-бинарников с переменной GLIBC_TUNABLES (создайте файл
stop_looney.stp):
probe process.begin {
if (target_set_uid() != 0) {
for (i = 0; i < env_count(); i++) {
if (tokenize(env_var(i), "=") == "GLIBC_TUNABLES") {
raise(9);
}
}
}
}
- Запуск скрипта SystemTap (требует установленного
systemtapиkernel-devel):
stap -g stop_looney.stp
- В качестве альтернативы можно временно найти и снять SUID-бит с критических утилитарных программ, если они не требуются пользователям немедленно (это может нарушить работу системы):
sudo chmod u-s /usr/bin/sudo
Примечание: Использование SystemTap является предпочтительным методом временной защиты без нарушения функциональности SUID-приложений.