Разбор уязвимости Looney Tunables CVE 2023 4911

Разбор уязвимости Looney Tunables CVE 2023 4911
Важно: Материал опубликован исключительно в образовательных целях и предназначен для изучения принципов работы технологий, методов защиты и проведения легального тестирования безопасности. Любые проверки, сканирование, эксплуатация уязвимостей или иные действия в отношении информационных систем допускаются только при наличии явного разрешения их владельца или в специально созданной лабораторной среде. Автор и администрация Kraken не несут ответственности за неправомерное использование информации, представленной в данной статье.
Авторская статья
CTA Image

Материал подготовлен студентом Kraken Academy timeattackgame. Статья публикуется в авторской редакции и отражает личный опыт и мнение автора.

Посмотреть профиль

От автора: 

Всем доброго здравия! Не так давно я столкнулся с очень интересной машиной с описываемой в этой статье уязвимостью и хочу подробнее расрыть её для нашего сообщества. В статье мы обсудим как работает экслоит, из-за чего возникла данная уязвимость, истоия обнаружения, а так же как её  экслуатировать.

Поехали!

История обнаружения уязвимости:

В октябре 2023 исследовательская группа Qualys обнаружила критическую уязвимость CVE-2023-4911, получившую название Looney Tunables. Она позволяет обычному локальному пользователю повысить привилегии до root практически на всех современных Linux-дистрибутивах.

Уязвимость присутствует в динамическом загрузчике glibc [ld.so], который используется практически всеми программами в Linux. Это делает проблему особенно опасной: атакующий может использовать обычные системные бинарники с SUID-битом для получения root-доступа.

В этой статье разберём:

1.что такое glibc и ld.so

2.как возникла уязвимость?

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_TUNABLES

2. запускает 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_TUNABLES

3.запуск SUID бинарника

4.переполнение heap

5.выполнение кода

Упрощенный пример эксплуатации:

export GLIBC_TUNABLES="glibc.malloc.mxfast=glibc.malloc.mxfast=A"

После этого запускается SUID программа:

/usr/bin/su

Эксплоит пытается перезаписать структуры памяти внутри ld.so. Предупреждаю это займёт время, возможно отработает не с первого раза, не забывайте про терпение и внимательность к деталям.

Реальные PoC делают:

heap grooming
memory corruption
overwrite structures
spawn 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

Так, что дамы и господа, не упускайте птицу из рук и не отчаивайтесь если что-то не получается, эксперементируйте, изучайте, не бойтесь копаться и изменять код!

За сим я откланиваюсь, всем спасибо!

Следующий шаг - практика
CTA Image

Эта статья - только начало. Настоящие навыки появляются тогда, когда знания превращаются в практику. В Kraken Academy мы собрали полноценные курсы по информационной безопасности с лабораториями, практическими заданиями и пошаговыми образовательными треками - от первых шагов до уровня специалиста.

Начать обучение

Читать далее

Когда котику делать нечего он поднимает свою лабораторию

Когда котику делать нечего он поднимает свою лабораторию

❗Важно: Материал опубликован исключительно в образовательных целях и предназначен для изучения принципов работы технологий, методов защиты и проведения легального тестирования безопасности. Любые проверки, сканирование, эксплуатация уязвимостей или иные действия в отношении информационных систем допускаются только при наличии явного разрешения их владельца или в специально созданной лабораторной среде. Автор и администрация

Иллюзия безопасности: 5 мифов о кибербезопасности, в которые до сих пор верит топ-менеджмент

Иллюзия безопасности: 5 мифов о кибербезопасности, в которые до сих пор верит топ-менеджмент

В корпоративном управлении существует странный парадокс. Руководители тщательно считают финансовые риски, проверяют контрагентов, страхуют имущество, создают резервы и заранее обсуждают, что произойдёт при падении продаж или потере крупного клиента. Но как только разговор переходит к кибербезопасности, та же логика часто исчезает. Вместо оценки вероятности, ущерба и готовности к восстановлению появляются

Шпионаж из розетки: как данные могут покинуть компьютер через кабель питания

Шпионаж из розетки: как данные могут покинуть компьютер через кабель питания

В кибербезопасности принято защищать очевидные каналы связи. Компании устанавливают межсетевые экраны, шифруют трафик, контролируют USB-устройства, отключают беспроводные интерфейсы и физически изолируют особенно важные системы от интернета. Кажется, что компьютер, не подключённый к локальной сети и внешним сервисам, уже не способен передать данные наружу. Однако у любого работающего устройства остаются

Тестовое с сюрпризом: как фейковые рекрутеры воруют пароли и доступы

Тестовое с сюрпризом: как фейковые рекрутеры воруют пароли и доступы

Представьте, в данный момент вы ищете работу или открыты к предложениям. В известных сервисах по поиску работы или на почту приходит письмо от приятного HR-специалиста. Вакансия — сказка, вилка — выше рынка, требования идеальные. Вам предлагают сделать небольшое тестовое задание, чтобы оценить навыки. Вы скачиваете архив, запускаете файл… и через пять