
Appsmith 中通过存储型 XSS 实现权限提升的概念验证
披露信息: 最初由我通过 GHSA-5hw4-whxv-6794 报告
⚠️ 仅限授权渗透测试/研究使用。
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-30862 |
| 严重性 | 🔴 严重 |
| CVSS 评分 | 9.1 |
| CVSS 向量 | [CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H] |
| CWE | CWE-79、CWE-269、CWE-352 |
| 受影响产品 | Appsmith ≤ 1.95 |
| 已修补版本 | 1.96 |
| 安全公告 | GHSA-5hw4-whxv-6794 |
Table Widget(TableWidgetV2)中存在一个严重存储型 XSS 漏洞。根本原因在于 React 组件渲染管道中缺乏 HTML 净化处理,导致恶意属性被直接插入到 DOM 中。通过利用"邀请用户"功能,拥有普通用户账户([email protected])的攻击者可以强制系统管理员执行高权限 API 调用(/api/v1/admin/env),从而实现完全的管理员账户接管。
1. 根本原因:缺少输出净化处理点 该漏洞存在于 Table Widget 的渲染引擎中
文件: app/client/src/widgets/TableWidgetV2/component/cellComponents/BasicCell.tsx
当 columnType 设置为 URL 或 Plain Text 时,BasicCell 组件未能对数据进行净化处理。它直接返回用户提供的原始值,并将其作为 React 子元素直接渲染,浏览器会将其解释为可执行的 HTML。
存在漏洞的代码片段(第 132-143 行和第 172-173 行):
const contentToRender = useMemo(() => {
switch (columnType) {
case ColumnTypes.URL:
// 将 'url' 直接插入 href,未进行净化处理
return <a href={url} target="_blank">{value}</a>;
default:
return value; // 第 141 行:返回原始值
}
}, [columnType, url, value]);
// 第 173 行:未净化内容被注入 DOM 的最终处理点
<Content ref={contentRef}>{contentToRender}</Content>
2. 攻击向量:通过社会工程学实现 XSS 到 CSRF(邀请功能) 尽管 SESSION cookie 受 HttpOnly 保护,但 XSRF-TOKEN 可以通过 document.cookie 访问。由于 Appsmith 允许任何用户邀请他人加入其应用,攻击者可以利用此功能作为投递机制,在管理员的活动会话中执行跨权限请求伪造(CPRF)。
步骤 1:XSS 漏洞验证
使用普通用户账户登录:[email protected]。
创建一个新应用并添加一个 Table Widget。
在 Table Data 属性中,注入以下内容:
[{ "id": 1, "payload": "" }]
-- 步骤 2:武器化(完全管理员接管)
[email protected] 身份,更新 Table Data,使用以下旨在修改管理环境的载荷:[
{
"id": 1,
"Status": "System Update Required",
"payload": "alert('Admin Privileges Granted to [email protected]'));\">"
}
]
使用 "Share" 功能邀请系统管理员([email protected])加入该应用。这将强制管理员在打开邀请时查看恶意表格。
管理员启动应用后,脚本在后台执行。它会读取管理员的 XSRF-TOKEN 并发送 PUT 请求,将 [email protected] 添加到管理员白名单中。
结果: 再次以 [email protected] 身份登录。您现在将拥有 Admin Settings 和所有实例配置的完全访问权限。
漏洞类型: 存储型 XSS / 垂直权限提升。
严重性:9.1(严重)| CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H
风险: Appsmith 实例被完全攻陷。攻击者能够访问敏感的环境变量、数据库凭据,并能够修改实例中的任何应用。
净化处理点: 在 BasicCell.tsx 及相关组件中,使用 DOMPurify.sanitize() 包装所有动态输出。
强化 CSP: 实施严格的 connect-src 策略,防止 XSS 载荷对管理端点进行未经授权的 API 调用。
https://github.com/user-attachments/assets/206a10e4-1619-4887-a552-99761baa0a29