CVE-2015-1328 Доказательство концепции
Эксплойт, реализующий доказательство концепции (PoC) для CVE-2015-1328, уязвимости повышения привилегий, затрагивающей реализацию overlayfs в ядре Linux. Эта уязвимость позволяет локальным непривилегированным пользователям получить root-доступ, эксплуатируя некорректные проверки прав в операциях монтирования overlayfs в пользовательских пространствах имён.
Обзор
CVE-2015-1328 — критическая уязвимость безопасности, затрагивающая ядра Linux с поддержкой overlayfs и включёнными пользовательскими пространствами имён. Уязвимость позволяет непривилегированному локальному пользователю:
- Создать пользовательское пространство имён с помощью
unshare(CLONE_NEWUSER)
- Смонтировать файловые системы overlayfs внутри пространства имён
- Использовать ошибки проверки прав для записи в
/etc/ld.so.preload
- Выполнить вредоносную общую библиотеку для получения root-привилегий
Данный PoC демонстрирует уязвимость путём:
- Изоляции пространства имён для обхода ограничений монтирования
- Монтирования overlayfs для манипуляции системными файлами
- Внедрения пользовательской общей библиотеки через
/etc/ld.so.preload
- Перехвата
getuid() для выполнения root-оболочки
Затронутые системы
- Ubuntu 14.04 LTS с версиями ядра до 3.19.0-21.21
- Системы с:
- Включёнными пользовательскими пространствами имён (
kernel.unprivileged_userns_clone=1)
- Поддержкой файловой системы overlayfs
- Незаплаченными версиями ядра
Требования
- Компилятор GCC с поддержкой 32-битной сборки
- Ядро Linux с пользовательскими пространствами имён и поддержкой overlayfs
- Соответствующие системные библиотеки (поддержка флага
-m32)
Сборка
Проект включает Makefile для упрощения сборки:
Будут скомпилированы:
ofs — основной бинарный файл эксплойта (статический, 32-битный)
ofs-lib.so — общая библиотека для перехвата LD_PRELOAD (32-битная)
Ручная сборка
Если вы предпочитаете компилировать вручную:
# Компиляция основного эксплойта
gcc -o ofs ofs.c -m32 -static
# Компиляция общей библиотеки
gcc -m32 -fPIC -shared -o ofs-lib.so ofs-lib.c -ldl -static-libgcc
Использование
⚠️ ВНИМАНИЕ: Этот эксплойт изменит системные файлы и попытается получить root-привилегии. Используйте только в контролируемых средах с соответствующим разрешением.
-
Скомпилируйте эксплойт:
-
Запустите эксплойт:
-
В случае успеха эксплойт:
- Создаст необходимые структуры пространств имён
- Смонтирует файловые системы overlayfs
- Запишет в
/etc/ld.so.preload
- Выполнит
/bin/su, что запустит вредоносную библиотеку
- Порождает root-оболочку
Как это работает
Поток эксплойта
- Создание пространства имён: Эксплойт создаёт новое пользовательское пространство имён с помощью
unshare(CLONE_NEWUSER)
- Пространство имён монтирования: Создаёт пространство имён монтирования с помощью
clone() и флага CLONE_NEWNS
- Монтирование overlayfs: Монтирует файловые системы overlayfs для манипуляции системными каталогами
- Манипуляция файлами: Использует overlayfs для переименования файлов и записи в
/etc/ld.so.preload
- Внедрение библиотеки: Записывает вредоносную общую библиотеку в
/tmp/ofs-lib.so
- Повышение привилегий: Выполняет
/bin/su, что запускает предварительно загруженную библиотеку
- Root-оболочка: Библиотека перехватывает
getuid() и порождает root-оболочку
Технические подробности
- Эксплойт использует
clone() с пользовательским стеком для создания изолированных пространств имён монтирования
- Монтирование overlayfs позволяет манипулировать файлами внутри пространства имён, что влияет на хост
- Общая библиотека (
ofs-lib.so) перехватывает getuid() через LD_PRELOAD
- Когда
/bin/su вызывает getuid(), выполняется вредоносная функция
Структура кода
.
├── ofs.c # Основной код эксплойта
├── ofs-lib.c # Общая библиотека для повышения привилегий
├── lib_so.h # Встроенные данные бинарной библиотеки
├── Makefile # Конфигурация сборки
└── README.md # Этот файл
Ключевые файлы
- ofs.c: Содержит основную логику эксплойта, создание пространств имён и операции монтирования
- ofs-lib.c: Реализует перехват
getuid(), порождающий root-оболочку
- lib_so.h: Содержит скомпилированную общую библиотеку в виде бинарного массива (для встраивания)
Смягчение
Для защиты от этой уязвимости:
- Обновите ядро до заплаченной версии (3.19.0-21.21 или новее для Ubuntu 14.04)
- Отключите пользовательские пространства имён, если они не требуются:
echo 0 > /proc/sys/kernel/unprivileged_userns_clone
- Используйте AppArmor/SELinux для ограничения возможностей создания пространств имён
- Мониторьте системные журналы на предмет подозрительных операций монтирования
Правовое и этическое предупреждение
Данный код предоставлен исключительно в образовательных целях и для исследований в области безопасности.
- Несанкционированное использование этого эксплойта против систем без явного разрешения незаконно
- Данный PoC предназначен для:
- Исследователей безопасности, изучающих уязвимости ядра
- Системных администраторов, тестирующих устойчивость своих систем
- Образовательных целей в контролируемых средах
- Авторы не несут ответственности за любое ненадлежащее использование этого кода
- Всегда убедитесь, что у вас есть соответствующее разрешение перед тестированием на любой системе
Ссылки
Лицензия
Этот проект предоставляется «как есть» в образовательных целях. Используйте ответственно и в соответствии со всеми применимыми законами и нормативными актами.