安全公告:CVE-2026-15037 - QDom注释、CDATA和处理指令序列化中的XML注入漏洞
内容提要
Qt框架的QtXml模块存在XML注入漏洞(CVE-2026-15037),影响Qt 4、5及6.12之前版本。当应用将不可信文本插入QDom注释、CDATA或处理指令节点并序列化时,攻击者可注入恶意标记,破坏文档结构。CVSS评分2.9(低危)。缓解措施:设置无效数据策略为ReturnNullNode或DropInvalidChars,并验证输入。升级至Qt 6.12或更高版本可修复。
延伸解读
漏洞影响范围与触发条件
该漏洞影响Qt 4、Qt 5以及Qt 6.12之前的所有版本,默认策略为AcceptInvalidChars。攻击者需要将不可信文本插入QDom注释、CDATA或处理指令节点,并在序列化时触发。由于CVSS评分仅2.9,且不涉及机密性、代码执行或拒绝服务,实际风险较低,但可能破坏文档结构,导致下游处理异常。
缓解措施与升级建议
在受影响版本中,可通过设置QDomImplementation::setInvalidDataPolicy为ReturnNullNode或DropInvalidChars来缓解。使用ReturnNullNode时,需检查工厂函数返回值是否为null。此外,建议对输入进行验证,并将QDom输出视为不可信结构。升级到Qt 6.12或更高版本可彻底修复,因为默认策略已改为ReturnNullNode。
开发者注意事项
开发者应避免直接将未经验证的文本插入QDom节点,尤其是在处理用户输入或外部数据时。即使升级到修复版本,也应保持输入验证和输出检查的习惯,以防御其他潜在的注入风险。同时,注意QDom的InvalidDataPolicy设置需在构建文档前完成,否则可能不生效。
Q&A
CVE-2026-15037 影响哪些 Qt 版本?
该漏洞影响所有 Qt 4、Qt 5 以及 Qt 6.12 之前的 Qt 6 版本。
CVE-2026-15037 漏洞的具体危害是什么?
当应用程序将不可信文本插入 QDom 注释、CDATA 或处理指令节点并序列化时,攻击者可以注入恶意标记,关闭预期节点并注入攻击者控制的兄弟标记,从而破坏生成的 XML 文档结构。该漏洞不影响机密性,也不会在 Qt 内部导致代码执行或拒绝服务。
CVE-2026-15037 的 CVSS 评分是多少?
CVSS 4.0 评分为 2.9,属于低危漏洞。
如何缓解 CVE-2026-15037 漏洞?
在所有受影响版本上,可以在构建文档前设置无效数据策略:调用 QDomImplementation::setInvalidDataPolicy(QDomImplementation::ReturnNullNode) 或 DropInvalidChars。使用 ReturnNullNode 时,当给定 XML 1.0 无效数据时,QDom 工厂函数会返回空节点,需检查返回值。此外,建议在插入前验证不可信输入,并且不要将 QDom 输出视为可信结构。
如何彻底修复 CVE-2026-15037 漏洞?
升级到 Qt 6.12 或更高版本,其中默认的 InvalidDataPolicy 已改为 ReturnNullNode。对于 Qt 6.11 及更早版本,默认策略未变,需应用上述缓解措施。
CVE-2026-15037 漏洞的成因是什么?
漏洞成因是 QtXml 模块在序列化 QDom 注释、CDATA 和处理指令节点时,对无效数据的处理不当(默认策略为 AcceptInvalidChars),导致未正确中和输出,从而允许 XML 注入。