
Репозиторий, содержащий доказательство концепции (PoC), демонстрирующий влияние CVE-2023-4911, уязвимости в динамическом загрузчике ld.so библиотеки glibc, раскрывающей риски, связанные с Looney Tunables.
GNU C Library (glibc) является библиотекой C в системе GNU и неотъемлемой частью систем на базе Linux. По своей сути glibc определяет основные функции для программ, включая системные вызовы и общие функции, такие как open, malloc, printf и exit. Динамический загрузчик, важный компонент glibc, играет ключевую роль в подготовке и выполнении программ, управляя общими библиотеками и связывая их во время выполнения.
Введённая для предоставления пользователям возможностей без перекомпиляции, переменная окружения GLIBC_TUNABLES позволяет пользователям изменять поведение glibc во время выполнения. Она предоставляет средства для настройки параметров производительности и поведения, влияя на запуск приложений.
Уязвимость переполнения буфера в обработке динамическим загрузчиком переменной GLIBC_TUNABLES представляет критический риск безопасности. Эксплуатация предоставляет локальным злоумышленникам повышенные привилегии, потенциально ведущие к полному доступу root. Успешная эксплуатация на основных дистрибутивах, таких как Fedora, Ubuntu и Debian, подчёркивает серьёзность и широкое влияние.
Неправильное использование или эксплуатация этой уязвимости может повлиять на производительность, надёжность и безопасность системы. Хотя детали эксплуатации не разглашаются, риск неизбежен, поскольку переполнения буфера могут быстро превратиться в атаки на основе данных. Популярные дистрибутивы Linux, использующие glibc, могут быть уязвимы, что подчёркивает необходимость быстрого осведомления и смягчения последствий.
Ubuntu 22.04 Ubuntu GLIBC 2.35-0ubuntu3.1 su from util-linux 2.37.2 ASLR ON
Использован ISO-образ Ubuntu (версия 22.04.1) для создания виртуальной машины
После успешной установки нам не нужно ничего обновлять, но мы установим пакеты git и GNU Binutils, поскольку они отсутствуют в системе, и при компиляции скрипта эксплойта на Python вы столкнётесь с ошибкой.
Используя следующие команды:
$ sudo apt install git
$ sudo apt install binutils
Проверка на уязвимость
$ env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '%08192x' 1`" /usr/bin/su --help
Если на выходе появляется
Segmentation fault (core dumped), то система уязвима.
проверьте версию динамического компоновщика/загрузчика, часто связанного с GNU C Library (glibc)
$ ldd --version
Вывод покажет версию GLIBC
ldd (Ubuntu GLIBC 2.35-0ubuntu3.6) 2.35
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Теперь, когда мы знаем, что наша машина уязвима и готова к повышению привилегий до root
Примечание: Не следует устанавливать gcc на машину, если установить его, уязвимость исчезнет, и скрипт не будет работать.
Поскольку у нас не установлен gcc, нам нужно скомпилировать C-программу на хост-машине, а затем импортировать её на гостевую машину.
мы можем скомпилировать C-программу командой
$ gcc exploit.c -o (имя_выходного_файла)
После импорта выходного файла C-программы также импортируйте скрипт Python (genlib.py).
Теперь скомпилируйте скрипт Python:
$ python3 genlib.py
После компиляции создаётся папка '"'.
Мы будем делать это в папке /tmp, чтобы пользователь мог выполнить скрипт и программу
Теперь наконец выполним программу для повышения привилегий до root
$ ./(имя_программы)
Это займёт некоторое время, и мы получим root-оболочку.
Безопасность для расширения прав, а не для эксплуатации!
Ссылки: