lukasz-rybak/CVE-2026-27621
GitHub: lukasz-rybak/CVE-2026-27621
该仓库披露了 TypiCMS Core 中存在的 CVE-2026-27621 漏洞,并提供了通过上传恶意 SVG 文件触发存储型 XSS 的概念验证代码。
Stars: 0 | Forks: 0
# CVE-2026-27621: TypiCMS Core 存在通过 SVG 文件上传导致的存储型跨站脚本 (XSS) 漏洞
## 概述
| 字段 | 详情 |
|---|---|
| **CVE ID** | [CVE-2026-27621](https://nvd.nist.gov/vuln/detail/CVE-2026-27621) |
| **严重程度** | MEDIUM |
| **公告** | [查看公告](https://github.com/TypiCMS/Core/security/advisories/GHSA-xfvg-8v67-j7wp) |
| **发现者** | [Lukasz Rybak](https://github.com/lukasz-rybak) |
## 受影响产品
- **typicms/core** (版本: < 16.1.7)
## CWE 分类
- CWE-79: 网页生成过程中输入未正确中和 ('跨站脚本')
## 详情
#### I. 概要
TypiCMS 的文件上传模块中存在一个存储型跨站脚本 (XSS) 漏洞。该应用程序允许具有文件上传权限的用户上传 SVG 文件。尽管存在 MIME 类型验证,但 SVG 文件的内容未经过净化。攻击者可以上传包含恶意 JavaScript 代码的特制 SVG 文件。当其他用户(如管理员)通过应用程序查看或访问此文件时,脚本会在其浏览器中执行,从而导致该用户会话的泄露。
SVG 解析逻辑中的一个错误加剧了该问题,如果上传的 SVG 不包含 `viewBox` 属性,可能会导致 500 错误。然而,这并不能缓解 XSS 漏洞,因为攻击者可以轻松在其恶意载荷中包含有效的 `viewBox` 属性。
#### II. 漏洞详情
* **漏洞类型:** 存储型跨站脚本 (XSS) (CWE-79)
* **受影响组件:** `TypiCMS\Modules\Core\Http\Requests\FileFormRequest.php` 和 `TypiCMS\Modules\Core\Services\FileUploader.php`。
* **受影响版本:** <= 16.0.5
该漏洞主要源于两点:
1. **宽松的文件验证:** `FileFormRequest` 明确将 `svg` 列为允许上传的 MIME 类型白名单。
2. **缺乏内容净化:** `FileUploader` 服务直接将 SVG 文件保存到服务器,而未解析和净化其内容以删除潜在的恶意元素,如 `
If you see this, the script has run.
2. **上传恶意文件:**
* 以拥有文件上传权限的用户身份登录 TypiCMS 管理面板。
* 导航到 "Files" 模块(例如 `/admin/files`)。
* 上传 `malicious.svg` 文件。应用程序将接受并存储该文件。
3. **触发 XSS:**
* 应用程序将为上传的文件提供一个公共 URL,格式通常为 `http:///storage/files/malicious.svg`。
* 任何导航到此 URL 的人都将在其浏览器中执行嵌入的 JavaScript。
* 攻击者可以将此链接发送给特权用户(例如管理员)。当管理员点击链接时,其会话 Cookie 可能会被窃取,或者攻击者可以代表其执行操作。
#### IV. 影响
成功利用此漏洞允许攻击者在受害者浏览器的上下文中执行任意 JavaScript。尽管会话 Cookie 上使用 `HttpOnly` 标志可以防止通过 `document.cookie` 直接窃取会话 ID,但攻击者仍然可以通过代表受害者执行操作来实现对受害者账户的完全控制。
影响包括:
* **通过操作伪造劫持账户:** 攻击者的脚本可以从受害者的浏览器向应用程序的 API 发出经过身份验证的请求。这允许攻击者执行受害者有权执行的任何操作,例如:
* 为攻击者创建新的管理员账户。
* 更改受害者的电子邮件地址和密码。
* 删除或修改所有内容、用户和设置。
* **敏感信息泄露:** 脚本可以读取受害者在管理面板中查看的任何页面的内容。这包括用户列表(含姓名和电子邮件)、私有应用程序设置和其他敏感数据,随后这些数据可被渗透到攻击者控制的服务器。
* **网络钓鱼和社会工程学:** 脚本可以操纵管理面板的 UI 以显示虚假登录表单,诱骗用户重新输入其凭据,或者将其重定向到恶意网站。
* **键盘记录:** 脚本可以捕获受害者在受感染页面的表单中输入的任何信息。
由于攻击者可以以经过身份验证的管理员身份执行任何操作,此漏洞实际上会导致 **完全的应用程序失陷**,即使没有直接访问会话 Cookie 的权限。风险为 **高**。
#### V. 推荐的补丁和缓解措施
建议采用纵深防御的方法来缓解此漏洞。
1. **主要修复:净化 SVG 内容:**
最稳健的解决方案是在上传时净化 SVG 文件。在保存文件之前,应解析它以删除所有潜在危险元素,包括 `