关键漏洞信息 漏洞概述 漏洞类型: Stored XSS via Tooltip.vue 受影响组件: components/ui/Tooltip.vue (通过 components/cards/LazyBookCard.vue 触发) 受影响版本: Audiobookshelf Web 客户端 v2.31.0 及更早版本 影响平台: Web 客户端 (主库视图) 描述 问题: 全局 Tooltip 组件在渲染文本内容时显式使用 innerHTML,未进行内容 sanitization。例如在“Library Grid”(LazyBookCard.vue)中,未 sanitization 的书籍标题直接传递到 tooltip 中。因此,在书籍标题中的任何 HTML 标签在用户将鼠标悬停在封面之上时会被解析并由浏览器执行。 漏洞代码位置 文件: components/ui/Tooltip.vue 方法: updateText, createTooltip 攻击向量 1. 攻击者利用图书管理权限添加包含恶意元数据的项(例如:Harmless Book Title<img src=x onerror=alert(localStorage.token 2. 受害者访问主库或主页仪表板。 3. 受害者将鼠标移动到网格上(被动交互)。 4. 当鼠标悬停在恶意书籍封面之上时,tooltip 渲染未 sanitization 的 HTML。 5. XSS 有效载荷在受害者的浏览器中立即执行。 漏洞CVSS评分 CVSS v3.1向量: CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N CVSS评分: 4.8(中等) 影响 攻击者可以在受害者的浏览器中执行任意代码,例如:窃取敏感数据,特别是存储在 localStorage 中的数据,包括访问令牌,授予管理员访问权限(如果管理员用户受到攻击)。 受害者在主库视图中悬浮鼠标在恶意项上方。 修复建议 将 innerHTML 赋值替换为textContent,以防止 HTML 解析。 修复情况 已在 commit 503f461 中修复。 修补版本: 2.32.0