ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Home Assistant 统计图表实体名称存储型 XSS 分析

Home Assistant 统计图表实体名称存储型 XSS 分析 技术原理与风险范围展示数据在 HTML 上下文会改变语义Statistics Graph 的 tooltip 旧实现把 param.seriesName 插入 HTML 字符串。实体名称原本只是数据但进入 HTML 解析器后标签字符可能变成元素或事件处理器。[1] 风险发生在输出上下文而不是名称字段是否结构化。输入来源不只是在本地表单里改名公告指出认证用户可以设置名称某些集成还可能提供默认实体名称。[1] 这形成条件式供应链路径上游设备或服务给出名称Home Assistant 存储并展示用户在统计图表中触发提示框。并非所有集成都可控也不是所有部署都添加了相关卡片。修复从逐字段过滤转向安全渲染原语官方 PR 将多个 ECharts tooltip 从返回 HTML 字符串迁移到 Lit 模板结果使用户可控字段以文本表达式自动编码并在图表基类集中包装 formatter。[4][5] 这比每个调用点手工调用过滤函数更稳定也覆盖统计、历史、能耗和网络图等多处渲染路径。编码必须与上下文对应HTML 文本、属性、URL 和 JavaScript 字符串的规则不同。模板自动转义能降低文本进入 HTML 的风险但开发仍要避免把结果重新解释为原始 HTML。链接目标、富文本和图表库扩展分别需要自己的策略。工程推断任何把标签、设备名、模型名或节点名交给图表 formatter 的前端都应审计 formatter 返回类型。字符串方便却可能绕过框架默认安全边界。安全模型与检测思路以下仅用 Python 对固定无害标签做文本编码不启动浏览器、不生成事件处理器也不是 Home Assistant PoC。它展示数据以文本呈现与拼进 HTML 之间的区别。from html import escapedef tooltip_text(entity_name, value):return f{escape(entity_name, quoteTrue)}: {value}sample bKitchen Power/bsafe tooltip_text(sample, 1.2 kWh)assert b not in safeassert lt;bgt; in safeassert safe.endswith(1.2 kWh)assert tooltip_text(Solar, 0) Solar: 0print(4 text-rendering checks passed)输入或请求期望语义检查重点普通实体名称保持可读修复不能破坏正常图表无害标签文字按文本显示不得生成新元素数值与单位正确拼接数据格式回归历史与新增数据走同一 renderer存量内容不能绕过修复修复与交付建议P0 升级到受支持的新版本GitHub Advisory Database 将 2026.7.0 标为受影响、2026.7.0 为首次修复版本。[2][3] 鉴于项目公告版本字段存在格式差异生产环境应升级到当前受支持版本而不是依赖异常区间做豁免。升级后清理前端缓存并确认实际资源哈希变化。P1 盘点图表和实体名称来源列出 Statistics Graph 卡片、统计字段类型、集成来源和可修改实体名称的角色。对外部集成提供的名称建立长度和字符审计但不要把输入过滤作为唯一防线输出仍必须按文本上下文编码。P1 做无脚本的渲染回归在隔离环境使用无害标签文字确认 tooltip 显示字面字符而不创建额外 DOM 元素。覆盖折线图、历史数据、缓存数据和多个字段。不要把真实事件处理器复制到生产系统验证。P2 统一前端渲染规范禁止用户可控字段通过字符串拼接进入 HTML formatter优先使用模板文本表达式或 DOM 文本节点。对不得不支持富文本的入口使用明确允许策略并独立验证 URL。安全团队可用静态搜索定位返回 HTML 字符串的 tooltip formatter。总结图表库不是安全边界。任何标签只要进入 HTML 解释上下文就可能从数据变成代码。把安全编码交给统一渲染原语并覆盖存量数据和集成来源才能减少同类遗漏。本文未确认在野利用也不把所有集成名称都视为恶意。
返回列表