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 до версии, в которой исправлена ошибка обработки строк.

  1. Обновите индексы пакетов:
sudo apt update

  1. Установите обновления для glibc (для Debian/Ubuntu):
sudo apt install --only-upgrade libc6 libc-bin libc-l10n locales

  1. Для систем на базе RHEL/CentOS/Fedora:
sudo yum update glibc

  1. После обновления рекомендуется перезагрузить систему, чтобы убедиться, что все запущенные процессы и службы используют новую версию библиотеки:
sudo reboot

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

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

  1. Использование 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);
            }
        }
    }
}

  1. Запуск скрипта SystemTap (требует установленного systemtap и kernel-devel):
stap -g stop_looney.stp

  1. В качестве альтернативы можно временно найти и снять SUID-бит с критических утилитарных программ, если они не требуются пользователям немедленно (это может нарушить работу системы):
sudo chmod u-s /usr/bin/sudo

Примечание: Использование SystemTap является предпочтительным методом временной защиты без нарушения функциональности SUID-приложений.