-
Notifications
You must be signed in to change notification settings - Fork 29
Closed
Labels
bugSomething isn't workingSomething isn't workingsecuritySecurity related issuesSecurity related issues
Description
问题描述
report_feedback MCP 工具的后端仅做 Pydantic 长度校验(10-2000字符),不过滤 HTML 标签。<script> 等危险内容会原样存入数据库。
风险等级:P0
虽然前端(React + Ant Design)默认对 JSX 表达式做 HTML 转义,但以下场景可能导致 XSS 攻击成功:
- 使用
dangerouslySetInnerHTML渲染反馈内容 - Ant Design 组件的自定义 render 使用
innerHTML - 未来前端重构或引入富文本组件
即使前端当前安全,后端不过滤本身就是 defense-in-depth 的缺失。
潜在攻击链
- 攻击者获取有效 API token
- 通过
report_feedback提交包含<script>的恶意 payload - 管理员在后台查看反馈内容时触发 XSS
- 攻击者获取管理员 session/cookie → 权限提升
复现步骤
- 调用
report_feedback工具,feedback_message参数包含<script>alert(1)</script> - 观察后端接受并存入数据库(无过滤)
- 在管理后台查看该反馈记录
修复建议
- 后端输入侧 sanitize:对
feedback_message字段 strip HTML 标签和事件属性(建议使用成熟的 sanitize 库而非正则黑名单) - 前端渲染路径审查:确认反馈内容渲染未使用
dangerouslySetInnerHTML - 存量数据清理:修复后清理数据库中已存在的含 HTML 标签的反馈记录
- 自动化回归测试:CI 中加入 XSS payload 的回归测试用例,防止后续提交引入回归
发现来源
QA 安全审计(2026-03-28),详见 QA 学习笔记 #16。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingsecuritySecurity related issuesSecurity related issues