CVE-2026-21871CVE-2026-21871是NiceGUI框架中的一个存储型跨站脚本(XSS)安全漏洞。NiceGUI是一个基于Python的现代UI框架,用于快速构建Web用户界面。该漏洞影响NiceGUI从2.13.0到3.4.1的所有版本。漏洞的根本原因在于ui.navigate.history.push()和ui.navigate.history.replace()这两个历史记录导航方法的实现中,当开发者将攻击者可控的字符串传递给这些方法时,如果URL参数被嵌入到生成的JavaScript代码中而没有进行适当的字符转义处理,恶意构造的载荷可以突破预期的字符串上下文,在受害者的浏览器中执行任意JavaScript代码。攻击者可以利用此漏洞窃取用户会话Cookie、劫持用户账户、进行钓鱼攻击或在用户浏览器中执行恶意操作。由于该漏洞需要用户交互才能触发(UI:R),攻击者通常需要诱导用户访问包含恶意载荷的页面或点击特定链接。值得注意的是,如果应用程序不将任何不可信的输入传递给ui.navigate.history.push/replace方法,则不会受到此漏洞影响。该漏洞已于2026年1月8日披露,并在版本3.5.0中得到修复。
该漏洞属于存储型XSS(Stored XSS)或DOM-based XSS类型,具体取决于攻击向量的传递方式。漏洞产生的核心原因是NiceGUI在实现浏览器历史记录API包装器(ui.navigate.history.push和ui.navigate.history.replace)时,直接将传入的URL参数拼接到生成的JavaScript代码中,而没有对特殊字符进行充分的转义处理。攻击者可以通过构造特殊的URL字符串,利用JavaScript字符串字面量的语法特性,突破字符串边界并注入任意JavaScript代码。例如,当传入的URL包含单引号或双引号时,如果这些字符未被正确转义,攻击者可以提前关闭字符串字面量,然后添加任意JavaScript语句。由于这些方法通常在页面导航或状态更新时被调用,恶意代码会在用户浏览器中执行,影响范围包括但不限于:窃取用户认证令牌、读取页面内容、修改DOM结构或重定向用户到钓鱼网站。攻击的触发条件是用户访问包含恶意载荷的页面或与触发历史记录更新的UI元素进行交互。由于CVSS评分考虑了网络攻击向量(AV:N)和低攻击复杂度(AC:L),攻击者可以在无需特殊权限的情况下远程利用此漏洞,但需要诱导用户进行特定操作(UI:R)。