漏洞概述 漏洞名称: Akaunting 3.1.21 - 认证存储型XSS在报告描述渲染中 漏洞类型: 存储型跨站脚本(XSS) CVSS评分: 4.8(中等) CVE ID: CVE-2026-11944 发现者: Oscar Naveda(Fluid Attacks AI SAST Scanner) 影响范围 受影响产品: Akaunting 受影响版本: 3.1.21 远程可利用: 是 漏洞描述: Akaunting 3.1.21 在报告管理流程中存在一个认证存储型跨站脚本漏洞。具有创建或更新报告权限的用户可以在报告的描述字段中存储任意HTML/JavaScript。存储的值在两个管理上下文中未经输出编码直接渲染: - 报告编辑表单,值被插入到 中 - 报告索引页面,值在报告卡描述中直接打印 攻击者可以使用闭合 textarea 上下文的载荷,如 ,并在另一个认证用户打开受影响的报告编辑页面时执行JavaScript。相同的存储值也会在报告索引页面作为原始HTML渲染。 修复方案 当前状态: 目前没有可用的补丁 建议: 等待官方发布修复补丁 POC代码 步骤1 - 创建带有恶意描述的报告 1. 以允许创建报告的用户身份登录Akaunting,例如 admin@example.com。 2. 打开 。 3. 点击“新建报告”。 4. 填写带有有效名称的表单,例如:Report XSS Evidence。 5. 选择任何可用的报告类型,例如:Income Summary。 6. 将报告描述设置为: 。 7. 保存报告。 步骤2 - 从报告编辑页面触发载荷 1. 返回到报告列表。 2. 打开创建的报告进入编辑模式。 3. 存储的描述值被加载到共享的 textarea 组件中。 4. 浏览器解析注入的 作为元素的结束,创建注入的 ,并执行 onerror 处理程序。 预期结果: 在认证的Akaunting源中执行。 检查DOM显示输出等效于: 。 步骤3 - 从报告索引页面触发载荷 1. 存储包含可执行HTML的报告描述,例如: 。 2. 打开 。 预期结果: 报告索引页面通过 打印报告描述。 注入的图像元素被解析,其 onerror 处理程序执行。 证据 视频证据: 包含漏洞利用的视频 静态证据: 包含漏洞利用的截图 系统信息 产品: Akaunting 版本: 3.1.21 操作系统: 任意 参考 GitHub仓库: https://github.com/akaunting/akaunting 安全: https://github.com/akaunting/akaunting/security 时间线 2026年6月11日: 发现漏洞 2026年6月11日: 联系供应商 2026年6月22日: 公开披露 信用 发现者: Oscar Naveda(Fluid Attacks) 工具: AI SAST Scanner