安全公告:Qt中QTextCodec::codecForName()的越界读取漏洞

💡 原文英文,约300词,阅读约需1分钟。
📝

内容提要

Qt 5 Core兼容模块的QTextCodec::codecForName()函数存在越界读取漏洞(CVE-2026-9499),影响Qt 4.0.0至6.8.7及6.9.0至6.11.0版本。传入非NUL终止的QByteArray可能导致错误匹配或崩溃,CVSS评分6.3(中危)。建议升级至6.8.8或6.11.1,或应用官方补丁。

🔎

延伸解读

漏洞影响范围与触发条件

该漏洞影响Qt 4.0.0至6.8.7以及6.9.0至6.11.0的广泛版本,包括Qt 5的LTS分支。触发条件较为特殊:仅当应用程序使用QByteArray::fromRawData()构造非NUL终止的字节数组并传递给QTextCodec::codecForName()时才会触发。如果应用未使用此构造方式,则不受影响。

实际风险与攻击面

虽然CVSS评分为6.3(中危),但实际风险有限。越界读取仅限于与Qt内部固定编码列表的比较,不会泄露应用或用户数据。最坏情况是错误匹配或崩溃(拒绝服务)。攻击者需能控制传入的QByteArray内容,且需满足非NUL终止条件,因此利用门槛较高。

修复建议与注意事项

官方建议升级至Qt 6.8.8或6.11.1,或应用补丁。由于没有实用的运行时绕过方法,升级或打补丁是唯一解决方案。开发者应检查代码中是否使用了QByteArray::fromRawData(),并确保传递给codecForName()的字节数组以NUL结尾,以降低风险。

Q&A

Qt的QTextCodec::codecForName()存在什么漏洞?

该函数存在越界读取(缓冲区过度读取)漏洞,CVE编号为CVE-2026-9499。当传入非NUL终止的QByteArray(如通过QByteArray::fromRawData()创建)时,可能导致错误匹配或应用程序崩溃。

CVE-2026-9499影响哪些Qt版本?

影响Qt 4.0.0至6.8.7,以及Qt 6.9.0至6.11.0版本。该缺陷自Qt5Compat模块引入(Qt 6.0.0)时存在,Qt 4.0.0至5.15.19 LTS的Qt Core/qtbase中也有等效代码路径。

如何触发Qt的QTextCodec::codecForName()越界读取漏洞?

通过向QTextCodec::codecForName()传入非NUL终止的QByteArray(例如使用QByteArray::fromRawData()创建的)即可触发。这会导致编解码器名称匹配例程读取超出缓冲区末尾,可能造成错误匹配或崩溃。

CVE-2026-9499的CVSS评分是多少?严重程度如何?

CVSS 4.0评分为6.3,属于中危(MEDIUM)。攻击向量为网络,攻击复杂度低,但需要攻击者具备一定条件(AT:P),无需用户交互,对可用性有低影响。

CVE-2026-9499漏洞可能造成哪些影响?

可能导致编解码器名称匹配错误,最坏情况下应用程序崩溃(拒绝服务)。但越界读取范围受最长编解码器名称候选长度限制,且读取的字节仅与Qt内部固定编解码器列表比较,不会暴露应用程序或用户数据。

如何修复CVE-2026-9499漏洞?

升级到Qt 6.8.8、6.11.1或更高版本,或应用官方补丁。官方提供了针对dev、6.9、6.8、6.5分支的补丁链接。

是否有临时缓解措施可以应对CVE-2026-9499?

没有实际可用的运行时绕过方法,只能应用补丁或升级。但如果应用程序不通过QByteArray::fromRawData()构造编解码器名称的QByteArray,则不受此漏洞影响。

🏷️

标签

➡️

继续阅读