Разбор уязвимости Looney Tunables CVE 2023 4911
Дисклеймер:
Данный материал подготовлен исключительно в образовательных и исследовательских целях.
Вся информация, представленная в этой статье, предназначена для изучения принципов работы уязвимостей, методов их обнаружения и способов защиты информационных систем.
Автор не несёт ответственности за любое неправомерное использование представленных материалов. Любые действия, направленные на эксплуатацию уязвимостей в системах без разрешения владельца, могут нарушать законодательство и правила информационной безопасности.
Используйте данную информацию только в легальных средах.
От автора:
Всем доброго здравия! Не так давно я столкнулся с очень интересной машиной с описываемой в этой статье уязвимостью и хочу подробнее расрыть её для нашего сообщества. В статье мы обсудим как работает экслоит, из-за чего возникла данная уязвимость, истоия обнаружения, а так же как её экслуатировать.
Поехали!

История обнаружения уязвимости:
В октябре 2023 исследовательская группа Qualys обнаружила критическую уязвимость CVE-2023-4911, получившую название Looney Tunables. Она позволяет обычному локальному пользователю повысить привилегии до root практически на всех современных Linux-дистрибутивах.
Уязвимость присутствует в динамическом загрузчике glibc
[ld.so], который используется практически всеми программами в Linux. Это делает проблему особенно опасной: атакующий может использовать обычные системные бинарники с SUID-битом для получения root-доступа.
В этой статье разберём:
1.что такое glibc и
ld.so2.как возникла уязвимость?
3.как обнаружить уязвимую систему?
4.как выглядит эксплуатация Local Privilege Escalation?
1. Что такое glibc и ld.so
glibc (GNU C Library) — основная библиотека стандартных функций в Linux. Практически любое приложение использует её для работы с системой (файлы, память, процессы и т.д.).
ld.so (dynamic loader) — это компонент, который запускается перед выполнением программы и:
1. загружает необходимые shared libraries
2. разрешает зависимости
3. передаёт управление бинарнику
То есть перед запуском программы система сначала выполняет ld.so. Это делает его особенно чувствительным компонентом с точки зрения безопасности.
2. Что такое GLIBC_TUNABLES
В glibc есть механизм tunable parameters — параметры, позволяющие изменять поведение библиотеки через переменные окружения.
Например:
GLIBC_TUNABLES="glibc.malloc.check=1:glibc.rtld.verbose=1"
Они используются для настройки:
-
malloc
-
оптимизаций
-
поведения динамического загрузчика
ld.so парсит эту переменную до запуска программы.
3. Причина уязвимости
Уязвимость вызвана heap buffer overflow при обработке переменной GLIBC_TUNABLES.
Ошибка происходит в коде парсинга строки tunables.
Упрощённая схема:
GLIBC_TUNABLES -> parser -> buffer↓incorrect bounds check↓heap overflow
Если атакующий задаёт специально сформированное значение переменной, происходит переполнение буфера и перезапись соседней памяти.
4. Почему это приводит к Root?
Уязвимость становится критичной из-за SUID-программ.
Например:
/usr/bin/passwd/usr/bin/su/usr/bin/mount
Если бинарник имеет SUID bit, он выполняется с правами владельца (обычно root).
1. атакующий задаёт вредоносную
GLIBC_TUNABLES2. запускает SUID программу
3.
ld.soобрабатывает переменную4. происходит heap overflow
5. attacker получает выполнение кода как root
В итоге обычный пользователь получает root shell.

###На скриншоте, показана финальная отработка экслоита по переполнению буфера. В данной машине были сложности с переписыванием экслоита под уникальный ld.so build id после внесения изменений в скомпиллировный python script эксплоит заработал как надо и мы получили root.
5. Затронутые версии
Согласно документации по CVE уязвимость затронула следующие версии:
glibc 2.34 – 2.38
Она была исправлена в glibc 2.39.
Подверженные системы:
1.Ubuntu 22.04 / 23.04
2.Debian 11 / 12
3.Fedora 37 / 38
многие другие Linux-дистрибутивы.
6. Этап обнаружения уязвимой системы
1.Проверка версии glibc командой в терминале
ldd --versionПример ответа в терминале:
ldd (Ubuntu GLIBC 2.37-0ubuntu2)
Если версия: 2.34 - 2.38 - система потенциально уязвима.
2. Проверка загрузчика:
ls -l /lib64/ld-linux-x86-64.so.2
или
strings /lib64/ld-linux-x86-64.so.2 | grep GLIBC
3. Проводим быстрый PoC тест, отмечу, что на некоторых системах он не сработает должным образом. Второй момент, вам может не подойти первый попавшийся эксплоит, который вы нашли, не бойтесь читать документацию и разобраться с поиском нужного эксплоита
env -i \"GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" \"Z=$(printf '%08192x' 1)" \/usr/bin/su --help
Если система уязвима - возможен crash или abnormal behavior (ненормальное поведение). Рекомендую найти PoC который после теста загрузчика покажет уязвима версия или нет, но опять же, не стоит слепо верить и необходимо проверять самому.
7. Этап эксплуатации (LPE)
Общая логика эксплуатации:
1.Подготовка окружения
2.Формирование payload в
GLIBC_TUNABLES3.запуск SUID бинарника
4.переполнение heap
5.выполнение кода
Упрощенный пример эксплуатации:
export GLIBC_TUNABLES="glibc.malloc.mxfast=glibc.malloc.mxfast=A"
После этого запускается SUID программа:
/usr/bin/su
Эксплоит пытается перезаписать структуры памяти внутри ld.so. Предупреждаю это займёт время, возможно отработает не с первого раза, не забывайте про терпение и внимательность к деталям.
Реальные PoC делают:
heap groomingmemory corruptionoverwrite structuresspawn root shell
Пример результата:
Как я показывал на скриншоте выше это будет получение root - пользователя!
$ whoami
root
8. Почему exploit работает почти везде
Основные причины кроются в простых вещах
1.glibc используется почти во всех Linux
2. ld.so запускается перед каждым бинарником
3. на системе много SUID программ
4. exploit не требует специальных прав
Это делает CVE-2023-4911 очень удобной LPE уязвимостью для пост-эксплуатации.
Подводя итоги:
Looney Tunables - хороший пример того, как небольшая ошибка в библиотеке может привести к полной компрометации системы.
Ключевые моменты:
1.уязвимость в ld.so
2. переполнение heap через
GLIBC_TUNABLES
3. эксплуатация через SUID программы4. результат - Local Privilege Escalation до root
Так, что дамы и господа, не упускайте птицу из рук и не отчаивайтесь если что-то не получается, эксперементируйте, изучайте, не бойтесь копаться и изменять код!
За сим я откланиваюсь, всем спасибо!
Больше практики — в Академии Кракен (Kraken Academy).
Подписывайся на наш Telegram-канал.