文章总结: 安全团队披露mediawikieasytimeline扩展存在潜伏22年的命令注入漏洞,攻击者通过恶意wikitext注入ploticus指令,利用command功能执行任意shell命令,且结果可回显至页面,实现远程代码执行。影响启用该扩展的站点,官方已着手修复,建议用户及时更新并限制编辑权限。
综合评分: 88
文章分类: 漏洞分析,应急响应,web安全,漏洞预警
紧急安全预警|MediaWiki EasyTimeline 曝22年遗留RCE漏洞,编辑Wiki页面即可执行任意命令
原创
tuto
tuto
杂杂咱谈
2026年8月7日 00:06
福建
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
安全研究团队披露了MediaWiki EasyTimeline扩展中的一项存在22年的历史遗留漏洞。攻击者仅需向启用了EasyTimeline的MediaWiki页面提交恶意WikiText,即可突破文本解析流程,在服务器执行任意Shell命令,并将执行结果直接回显至页面,最终实现远程代码执行。
漏洞概述
EasyTimeline是MediaWiki的官方扩展之一,用于根据WikiText自动生成时间轴图片,被包括Wikipedia在内的大量MediaWiki网站使用。
研究人员发现,由于EasyTimeline.pl在处理用户输入时存在换行符解析缺陷,攻击者能够利用TextData字段构造特殊WikiText,将恶意Ploticus指令注入生成脚本,并借助Ploticus的command:功能执行任意系统命令。
更严重的是,命令执行结果还能够通过MediaWiki的错误回显机制直接返回至网页,实现完整的远程代码执行。
漏洞信息
| 项目 | 内容 |
| — | — |
| 漏洞组件 | MediaWiki EasyTimeline |
| 漏洞类型 | 命令注入 (Command Injection) |
| 最终影响 | 远程代码执行 |
| 影响范围 | 启用 EasyTimeline 扩展的 MediaWiki 站点 |
| 利用条件 | 可编辑包含 <timeline> 标签的 Wiki 页面 |
| 是否需要登录 | 取决于 Wiki 编辑权限 |
| 是否需要用户交互 | 否 |
| 漏洞存在时间 | 约 22 年 |
漏洞影响
攻击者成功利用后可:
- 在服务器执行任意 Shell 命令
- 获取服务器系统信息
- 读取敏感文件
- 下载并执行恶意程序
- 获取 WebShell 或持久化权限
- 横向移动至其他系统
- 完全控制运行 EasyTimeline 的服务器
EasyTimeline 渲染流程
EasyTimeline 的图片生成流程如下:
WikiText
│
▼
Timeline.php
│
▼
Shellbox
│
▼
renderTimeline.sh
│
▼
EasyTimeline.pl (Perl)
│
▼
生成 Ploticus Script
│
▼
Ploticus
│
▼
PNG / SVG
漏洞正是发生在EasyTimeline.pl生成Ploticus脚本过程中。
PoC Payload示例
漏洞攻击链
攻击者提交恶意 WikiText
│
▼
TextData text:"..."
│
▼
注入 \n 转义字符
│
▼
EasyTimeline.pl
将 \n 转换成真实换行
│
▼
生成 Ploticus Script
│
▼
插入新的 #proc getdata
│
▼
command:执行 Shell 命令
│
▼
/bin/sh -c 执行任意命令
│
▼
Shellbox 捕获 file.err
│
▼
命令结果回显到 Wiki 页面
漏洞原理分析
Step 1:EasyTimeline.pl 将 \n 转换为真实换行
攻击者可在 TextData text:"..." 属性中插入字符串 \n,ExtractText()会自动将其转换为真正的换行符(LF),使用户输入携带隐藏换行进入后续处理流程。
Step 2:TextData 未过滤换行 (核心缺陷)
ParseTextData()调用WriteText("^", ...),仅以^作为分隔符,而不会处理真实换行,因此攻击者构造的换行会完整保留下来;相比之下,PlotData使用split('\n', ...)会拆分换行,因此无法利用。
Step 3:恶意 Ploticus 指令成功注入
保留下来的换行最终被写入生成的Ploticus脚本,攻击者可提前结束原有text:参数,并插入新的顶级指令,例如:
#proc getdata
command: id > file.err
从而实现任意 Ploticus 指令注入。
Step 4:Ploticus 调用 /bin/sh -c 执行命令
EasyTimeline调用Ploticus时未启用-noshell安全选项,导致#proc getdata command:会直接通过/bin/sh -c执行,最终实现服务器任意命令执行。
Step 5:命令执行结果回显
MediaWikiTimeline.php::renderTimeline()使用Shellbox捕获生成的file.err文件内容,并通过throwRawException()将其显示在Timeline错误框中,使攻击者无需获得Shell,即可直接在Wiki页面获取命令执行结果。
漏洞时间线
| 时间 | 事件 |
| — | — |
| 约 22 年前 | EasyTimeline 引入换行解析逻辑,漏洞进入代码库 |
| 多年来 | 漏洞长期存在于启用 EasyTimeline 的 MediaWiki 网站 |
| 2026 年 | 安全团队发现并披露该漏洞 |
| 披露后 | 官方着手修复并发布安全更新 |
总结
EasyTimeline RCE 是一起典型的历史遗留漏洞。漏洞源于 EasyTimeline.pl 对用户输入中的 \n 转义处理不当,使攻击者能够突破文本边界,将恶意 Ploticus 指令注入脚本,并借助 command: 功能执行任意 Shell 命令。
由于 MediaWiki 还会自动将命令执行结果回显至页面,攻击者仅凭一段恶意 WikiText 即可完成从页面编辑到服务器命令执行的完整攻击链。这一漏洞潜伏长达 22 年 才被发现,也再次说明历史代码中的细微解析逻辑同样可能演变为高危远程代码执行漏洞。
Simple #MediaWiki # RCE
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:杂杂咱谈 tuto
tuto《紧急安全预警|MediaWiki EasyTimeline 曝22年遗留RCE漏洞,编辑Wiki页面即可执行任意命令》