Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-34234-Lab — Локальный Docker-лаборатория, демонстрирующая CVE-2026-34234 — неавторизованное удалённое выполнение кода в веб-установщике CtrlPanel. Включает уязвимые и исправленные контейнеры, PoC-скрипты и анализ первопричин для исследований безопасности и защитной проверки. | Kitploit
Инструменты/GitHubGitHub/rootdirective-sec/cve-2026-34234-lab
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubrootdirective-sec/cve-2026-34234-lab

CVE-2026-34234-Lab

Локальный Docker-лаборатория, демонстрирующая CVE-2026-34234 — неавторизованное удалённое выполнение кода в веб-установщике CtrlPanel. Включает уязвимые и исправленные контейнеры, PoC-скрипты и анализ первопричин для исследований безопасности и защитной проверки.

Репозиторий
13 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-34234 - Лаборатория RCE установщика CtrlPanel

Локальная Docker-лаборатория для демонстрации CVE-2026-34234 в CtrlPanel.

Этот репозиторий сравнивает:

  • vuln: CtrlPanel 1.1.1, зафиксированный по дайджесту
  • patched: CtrlPanel 1.2.0, зафиксированный по дайджесту

Лаборатория работает только локально и привязывает сервисы к 127.0.0.1.


Краткое описание

CVE-2026-34234 — это неаутентифицированное удалённое выполнение кода (RCE) в веб-установщике CtrlPanel.

Проблема вызвана двумя связанными ошибками:

  1. Обработчики форм установщика были доступны до проверки install.lock.
  2. Ввод установщика интерполировался в строки команд оболочки.

В этой лаборатории уязвимый контейнер выполняет безвредную команду для подтверждения и записывает её вывод внутри контейнера. Исправленный контейнер получает тот же запрос, но не создаёт файл подтверждения.

Ожидаемый результат:

root@kitploit:~
vulnerable => proof file created
patched    => no proof file

Корневая причина

1. Уязвимое выполнение оболочки в 1.1.1

Исходный уязвимый файл:

root@kitploit:~
public/installer/src/functions/shell.php

Соответствующий код в 1.1.1:

root@kitploit:~
function run_console(string $command, ...) {
    $path = dirname(__DIR__, 4);
    $handle = proc_open("cd '$path' && bash -c 'exec -a ServerCPP $command'", ...);
}

Проблема:

  • run_console() принимает одну строку команды оболочки.
  • Эта строка передаётся в bash -c.
  • Управляемые пользователем значения установщика могут стать частью этой строки команды.
  • Метасимволы оболочки могут изменить структуру команды.

2. Уязвимый путь формы установщика

Исходный уязвимый файл:

root@kitploit:~
public/installer/src/forms/pterodactyl.php

Соответствующее поведение в 1.1.1:

root@kitploit:~
run_console("php artisan settings:set 'PterodactylSettings' 'panel_url' '$url'", ...);
run_console("php artisan settings:set 'PterodactylSettings' 'admin_token' '$key'", ...);
run_console("php artisan settings:set 'PterodactylSettings' 'user_token' '$clientkey'", ...);

Проблема:

  • url, key и clientkey берутся из POST-данных установщика.
  • Значения встраиваются в строки команд оболочки.
  • Конечная точка установщика доступна без аутентификации.

3. Порядок проверки установщика

В рекомендации указано, что public/installer/index.php проверял install.lock только после загрузки/выполнения логики форм установщика. Это делало обработчики установщика доступными даже на уже установленных экземплярах.


Патч / Исправление

1. Ранняя проверка блокировки установщика

Исправление перемещает проверку install.lock до загрузки обработчиков форм.

Исправленное поведение:

root@kitploit:~
if (file_exists('../../install.lock')) {
    exit("The installation has been completed already. Please delete the File 'install.lock' to re-run");
}

2. Избегание выполнения строк оболочки

Исходный исправленный файл:

root@kitploit:~
public/installer/src/functions/shell.php

Соответствующий код в 1.2.0:

root@kitploit:~
function run_console(array $command, ...): string {
    $cwd = $cwd ?? $path;
    $handle = proc_open($command, $descriptors, $pipes, $cwd, null, $options);
}

Почему это исправляет проблему:

  • run_console() теперь принимает массив в стиле argv.
  • Команда больше не составляется как единая строка оболочки.
  • Синтаксис полезной нагрузки, такой как $(), остаётся буквальным вводом вместо синтаксиса оболочки.

Исправленное поведение форм в 1.2.0 использует выполнение команд в стиле массива:

root@kitploit:~
run_console(['php', 'artisan', 'settings:set', 'PterodactylSettings', 'panel_url', $url], ...);
run_console(['php', 'artisan', 'settings:set', 'PterodactylSettings', 'admin_token', $key], ...);
run_console(['php', 'artisan', 'settings:set', 'PterodactylSettings', 'user_token', $clientkey], ...);

Дизайн лаборатории

root@kitploit:~
127.0.0.1:8081 -> vulnerable CtrlPanel 1.1.1
127.0.0.1:8082 -> patched CtrlPanel 1.2.0
127.0.0.1:9100 -> fake Pterodactyl API

Сервисы:

  • vuln: реальный CtrlPanel 1.1.1
  • patched: реальный CtrlPanel 1.2.0
  • fake-api: локальный фейковый API Pterodactyl, используемый только для удовлетворения проверок установщика
  • mysql_vuln / mysql_patched: отдельные экземпляры MariaDB
  • redis_vuln / redis_patched: отдельные экземпляры Redis

Лаборатория не изменяет исходный код приложения CtrlPanel.

Docker-файлы только оборачивают оригинальную точку входа контейнера для нормализации прав выполнения Docker Desktop:

root@kitploit:~
/var/www/html/storage
/var/www/html/bootstrap/cache

После исправления прав обёртка выполняет оригинальную точку входа продукта.


Дизайн PoC

Основной PoC:

root@kitploit:~
poc/poc_http_only.py

Свойства:

  • Отправляет только HTTP POST
  • Не использует docker exec
  • Не проверяет контейнеры
  • Не запускает обратные оболочки
  • Использует только безвредные команды: id, whoami, hostname

Вспомогательный скрипт:

root@kitploit:~
poc/poc_lab.py

Назначение:

  • Отправляет тот же HTTP-запрос
  • Проверяет подтверждение внутри контейнеров с помощью docker compose exec
  • Предназначен только для демонстрации и регрессионного тестирования

Файл подтверждения внутри контейнера приложения:

root@kitploit:~
/var/www/html/storage/logs/cve_2026_34234_proof.txt

Запуск

Начните с чистого состояния лаборатории:

root@kitploit:~
docker compose down -v --remove-orphans
docker compose up -d --build

Дождитесь, пока контейнеры приложения запустятся, затем выполните:

root@kitploit:~
python3 poc/poc_lab.py

Ожидаемый вывод:

root@kitploit:~
== Testing vulnerable ==
proof_exists: True
result: PASS expected_proof=True

== Testing patched ==
proof_exists: False
result: PASS expected_proof=False

[+] Expected result reached:
    vulnerable => proof file created
    patched    => no proof file

Ручной HTTP-тест

Отправьте HTTP-only PoC на уязвимый целевой сервер:

root@kitploit:~
python3 poc/poc_http_only.py --target http://127.0.0.1:8081

Проверьте подтверждение вручную:

root@kitploit:~
docker compose exec vuln sh -lc 'cat /var/www/html/storage/logs/cve_2026_34234_proof.txt'

Ожидаемое подтверждение:

root@kitploit:~
uid=1000(laravel) gid=1000(laravel) groups=1000(laravel)
laravel
<container-hostname>

Выполните тот же запрос к исправленному:

root@kitploit:~
python3 poc/poc_http_only.py --target http://127.0.0.1:8082

Проверьте поведение исправленного:

root@kitploit:~
docker compose exec patched sh -lc 'test -f /var/www/html/storage/logs/cve_2026_34234_proof.txt && cat /var/www/html/storage/logs/cve_2026_34234_proof.txt || echo "no proof file"'

Ожидается:

root@kitploit:~
no proof file

Очистка

Удалите контейнеры, сети и тома лаборатории:

root@kitploit:~
docker compose down -v

Примечания

  • Эта лаборатория предназначена только для локального исследования безопасности.
  • Не запускайте PoC против систем, которыми вы не владеете или на тестирование которых у вас нет разрешения.
  • Подтверждение намеренно ограничено выводом локальных команд внутри контейнера.
  • Уязвимые и исправленные сервисы используют отдельные базы данных и экземпляры Redis.
  • Фейковый API существует только для эмуляции минимальных ответов API Pterodactyl, необходимых для процесса установки.

Отказ от ответственности

Этот репозиторий предоставляется только для образовательных исследований в области безопасности и защитной валидации.

Все демонстрации предназначены для запуска в предоставленной локальной лабораторной среде Docker.

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

Не используйте этот проект против какой-либо системы без явного разрешения. Автор не несёт ответственности за неправильное использование или ущерб, возникший в результате использования этого материала.


Ссылки

  • Рекомендация GitHub по безопасности: https://github.com/Ctrlpanel-gg/panel/security/advisories/GHSA-jmhr-q9q5-fqwh
  • Запись CVE / NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-34234
  • Исправленный релиз: https://github.com/Ctrlpanel-gg/panel/releases/tag/1.2.0
  • Исходный репозиторий: https://github.com/Ctrlpanel-gg/panel
Скачать инструмент