Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-46394-haxcms-git-command-injection — CVE-2026-46394 的 PoC 与 writeup:HAXcms Git.php 中的操作系统命令注入(CWE-78)。仅限授权安全研究。 | Kitploit
工具/GitHubGitHub/shreyas-challa/cve-2026-46394-haxcms-git-command-injection
漏洞分析代码分析漏洞利用Web应用程序漏洞利用渗透测试论文与研究学习与教育
GitHubshreyas-challa/cve-2026-46394-haxcms-git-command-injection

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →

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

CVE-2026-46394 的 PoC 与 writeup:HAXcms Git.php 中的操作系统命令注入(CWE-78)。仅限授权安全研究。

查看仓库
63个月前尚未审核
分享

CVE-2026-46394 - HAXcms Git.php 操作系统命令注入 (CWE-78)

仅用于授权安全测试和研究的概念验证。 此处描述的漏洞已在 HAXcms 的最新版本中修复。 发布此 PoC 是为了让防御者和研究人员能够在他们拥有或明确获准测试的未打补丁实例上验证该问题。

CVECVE-2026-46394
组件HAXcms PHP 后端 - system/backend/php/lib/Git.php
漏洞操作系统命令注入 (CWE-78)
严重性高危 - CVSS 3.1 7.2 独立 / 8.1 结合路径遍历
状态上游已修复。影响补丁之前的版本。
项目elmsln/HAXcms
报告者Shreyas Challa ([email protected])

摘要

HAXcms PHP 后端的 Git.php 库通过拼接未经净化的参数来构建 shell 命令字符串,并将其直接传递给 proc_open()。在 17 个执行 shell 命令的函数中,只有一个(commit())使用了 escapeshellarg()。其余 15 个直接将调用者输入插入到命令字符串中。

任何包含 shell 元字符(&、;、|、$()、反引号)的值一旦到达这些函数,就会以 Web 服务器用户的身份导致任意操作系统命令执行。

唯一正确转义的函数是最明确的证据,表明转义机制是被理解的,只是在其他地方被遗漏了。

根本原因

每个易受攻击的函数都会流经 run() → run_command() → proc_open():

// 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);

易受攻击的示例与唯一安全函数的对比:

// 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));
}

所有受影响函数

函数行Shell 命令已转义?
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)479rm $files否
add_tag($tag, $msg)749tag -a $tag -m $msg$tag:否,$msg:是
commit($message)496commit -av -m $message是(唯一安全的函数)

上下文中的利用

在随附的代码库中,这些函数被调用时使用的值来自服务器/站点配置,而不是直接来自请求体,因此利用是通过链式攻击实现的:

  • 路径遍历 → 配置投毒 → RCE: 使用 saveOutline 路径遍历覆盖站点的 site.json,将元字符注入 metadata.site.git.branch。下一次 gitCommit() 调用 HAXCMSSite.php:584 处的 push('origin', $branch),从而执行载荷。
  • 任何其他将 git 分支/远程设置写入清单的机制都会到达 create_branch()(Operations.php:2762)或 set_remote()(HAXCMSSite.php:625)。

运行 PoC

该 PoC 直接驱动真实的 Git.php 库:它会创建一个临时 git 仓库,使用包含 shell 命令分隔符的载荷调用 create_branch(),并检查写入磁盘的证明文件来确认执行。之后它会自行清理。

前提条件

  • PHP CLI(7.x 或 8.x)
  • PATH 上的 git
  • 一份 HAXcms PHP 后端代码
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 指向你的 HAXcms 克隆中的 Git.php(通过环境变量或第一个参数);它还会自动发现放在其旁边的 haxcms-php/:

# 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 会自动为主机操作系统选择正确的载荷。

示例输出

================================================================
  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.

修复措施

对所有 15 个函数中的每个参数应用 escapeshellarg():

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

纵深防御 - 在值到达 git 层之前对其进行验证:

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

更新到包含上游修复的最新 HAXcms 版本。

负责任披露

此问题已报告给 HAXcms 维护者,并在发布之前被修复。PoC 仅在补丁可用后发布。请仅将其用于你拥有或明确获准测试的系统。

法律 / 授权使用声明

本材料仅供防御性研究、教育和授权安全测试使用。在未经明确许可的情况下对系统运行它可能是非法的。您全权负责遵守所有适用法律,并在测试前获得授权。按“原样”提供,不附带任何保证(参见 LICENSE)。

下载工具