CVE-2025-55854 - 存储型跨站脚本(XSS)漏洞
漏洞概述
CVE ID: CVE-2025-55854
漏洞类型: 存储型跨站脚本(XSS)
严重程度: 高危
受影响组件: 用户个人资料简介字段
受影响应用: FreelanceHub (https://github.com/nooncarlett/FreelanceHub)
描述
在 FreelanceHub 应用的用户个人资料功能中发现了一个存储型跨站脚本(XSS)漏洞。该漏洞源于 Bio 字段的输入清理不足,允许攻击者注入恶意 JavaScript 代码,当其他用户查看受影响的个人资料页面时,该代码会执行。
该漏洞使攻击者能够:
- 在其他用户的浏览器上下文中执行任意 JavaScript
- 窃取会话令牌和 Cookie
- 代表已认证用户执行操作
- 将用户重定向到恶意网站
- 篡改应用界面
受影响版本
- FreelanceHub(补丁之前的所有版本)
- 测试环境:运行在 8080 端口的 localhost 部署
技术细节
根本原因
该应用在将 Bio 字段中的用户输入存储到数据库并在个人资料页面上渲染之前,未能正确清理该输入。HTML 被直接渲染,没有转义特殊字符或移除潜在危险的标签和事件处理程序。
攻击向量
- 攻击类型: 存储型 XSS
- 输入向量: 用户个人资料 Bio 字段
- 执行上下文: 任何查看攻击者个人资料的用户
- 是否需要认证: 是(攻击者需要有效账户)
概念验证
前提条件
- 运行中的 FreelanceHub 应用实例
- Web 浏览器(Chrome、Firefox、Edge 等)
- 能够创建用户账户
分步复现
步骤 1:创建新账户
- 导航至
http://localhost:8080/auth
- 使用有效凭据注册新用户账户
- 完成注册流程并登录

步骤 2:导航至个人资料页面
- 成功登录后,导航至
http://localhost:8080/profile
- 在个人资料编辑表单中找到 Bio 字段
步骤 3:注入 XSS 载荷
- 在 Bio 字段 中输入以下载荷:
步骤 4:提交表单
- 点击 保存 或 更新个人资料 按钮
- 等待个人资料已更新的确认信息
步骤 5:触发 XSS
- 访问或重新加载个人资料页面:
http://localhost:8080/profile
- JavaScript 警告框将自动执行
- 结果: JavaScript 代码成功执行,确认了存储型 XSS 漏洞
预期行为
应用应对输入进行清理,并应:
- 从 Bio 字段中剥离所有 HTML 标签
- 对特殊字符(
<、>、"、' 等)进行编码
- 实施内容安全策略(CSP)标头
实际行为
恶意 HTML/JavaScript 载荷被存储在数据库中,并在个人资料页面渲染时执行,没有任何清理或编码。
影响评估
严重程度:高危
CVSS v3.1 评分: 8.1(高危)
向量字符串: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
实际影响
- 会话劫持: 攻击者可以窃取会话令牌并冒充用户
- 凭据窃取: 恶意脚本可以创建虚假登录表单以捕获凭据
- 数据泄露: 敏感用户数据可以被发送到攻击者控制的服务器
- 恶意软件分发: 用户可以被重定向到恶意网站
- 网络钓鱼攻击: 受信任的域名可以被用来托管具有说服力的钓鱼内容
- 账户接管: 与其他漏洞结合,这可能导致账户完全沦陷