IPBUF安全漏洞报告
English
CVE-2026-33628 CVSS 5.4 中危

CVE-2026-33628 Invoice Ninja存储型XSS漏洞

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-33628
漏洞类型
存储型跨站脚本 (Stored XSS)
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Invoice Ninja

相关标签

XSSStored XSSInvoice NinjaCWE-79Web Security

漏洞概述

Invoice Ninja v5.13.0版本存在一处存储型跨站脚本(XSS)漏洞。该漏洞源于发票行项目描述字段未正确调用`purify::clean()`进行过滤,导致攻击者能绕过XSS拒绝列表并植入恶意载荷。当受害者在PDF预览或客户端门户渲染受感染的发票时,载荷将被触发。这可能造成敏感信息泄露或会话劫持。厂商已在v5.13.4版本中通过添加净化函数修复了此问题。

技术细节

该漏洞位于基于Laravel框架的Invoice Ninja应用中。在v5.13.0版本,系统虽实施了XSS拒绝列表过滤机制,但在处理发票行项目描述字段时存在逻辑缺陷。该字段在接收用户输入后,未经过必要的`purify::clean()`函数进行严格净化,导致攻击者能够构造特定的恶意HTML或JavaScript载荷(如利用事件处理器绕过基础过滤)并成功存储至数据库。由于这是存储型漏洞,恶意载荷会持久存在。当具有低权限的攻击者诱导受害者(如系统管理员或客户)在客户端门户或生成PDF预览时渲染该发票,后端模板引擎会将未经过滤的描述字段直接输出至HTML上下文中,进而触发恶意代码执行,可能导致账户劫持或敏感数据窃取。

攻击链分析

STEP 1
1. 攻击者准备
攻击者获取一个低权限账户,能够登录Invoice Ninja并创建或编辑发票。
STEP 2
2. 注入恶意载荷
攻击者在创建发票时,将包含XSS_payload的代码(如<img src=x onerror=...>)填入“行项目描述”字段并保存。
STEP 3
3. 载荷存储
由于后端未对该字段进行`purify::clean()`净化,恶意代码被原样存储在数据库中。
STEP 4
4. 受害者访问
受害者(如管理员或客户)收到发票链接,并在浏览器中查看发票详情或点击PDF预览。
STEP 5
5. 漏洞触发
服务器渲染发票页面时,直接输出了未转义的恶意代码,导致受害者浏览器执行攻击者预设的脚本。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-33628 // Target: Invoice Ninja v5.13.0 // Location: Invoice Line Item Description field // Usage: // 1. Log in to Invoice Ninja. // 2. Navigate to Create Invoice. // 3. In the 'Item Description' field, enter the following payload: const payload = '<img src=x onerror=alert(document.cookie)>'; // 4. Save the invoice. // 5. Open the invoice in the Client Portal or generate a PDF. // 6. The JavaScript alert will trigger, demonstrating the XSS vulnerability.

影响范围

Invoice Ninja v5.13.0
Invoice Ninja < v5.13.4

防御指南

临时缓解措施
如果无法立即升级,建议管理员暂时禁用PDF预览功能或客户端门户,并严格审查所有发票行项目描述中的异常字符。同时,部署Web应用防火墙(WAF)规则以检测和拦截常见的XSS攻击模式。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表