CVE-2026-0603 – Hibernate 安全问题:你应该担心吗?
Source: Dev.to
摘要
CVE-2026-0603 于 2026 年 1 月 19 日披露,描述了 Hibernate ORM 中 InlineIdsOrClauseBuilder 的高危(CVSS 8.3)二阶 SQL 注入漏洞。该问题出现在将未消毒的字符串值合并到动态 IN 或 OR 子句中进行查询构造时。本文探讨了漏洞的工作原理、受影响的版本以及在何种条件下应用程序仍然安全,特别强调使用序列生成的数值主键的系统。
引言
SQL 注入漏洞在对象关系映射(ORM)框架中仍然是持续的威胁。CVE‑2026‑0603 影响 Hibernate ORM,当以字符串形式处理标识符且允许注入恶意 SQL 片段时会产生漏洞。该漏洞被归类为二阶:恶意输入必须先存入数据库,随后在动态查询中被取出使用。
漏洞描述
缺陷位于组合多个标识符值的 SQL 子句构造过程中。当标识符为字符串时,Hibernate 可能在缺乏足够消毒的情况下直接拼接值,使得拥有低权限的已认证攻击者能够在字段中存储 SQL 元字符(如引号、注释、分号),该字段随后被用作标识符。随后执行的查询可能导致任意 SQL 语句,进而产生:
- 数据泄露 – 高机密性影响
- 未授权修改 – 高完整性影响
- 有限的拒绝服务 – 低可用性影响
受影响版本
该漏洞影响 Hibernate ORM 6.0.0 至至少 6.6.41.Final 的所有版本。早期的 5.x 系列不受影响,因为有问题的代码路径是从 6.x 分支引入的。包含受影响 Hibernate 构建的 Red Hat 产品(如 JBoss EAP、Fuse、OpenShift Application Runtimes)同样受到影响。补丁已于 2026 年 1 月 19 日通过 Red Hat 勘误发布;上游在 6.6.x 系列的修复预计很快推出。
非暴露条件
当主键仅为数值型(Long/BIGINT)且由数据库序列生成时,应用程序不受此漏洞影响。在这种情况下:
- 标识符值由数据库控制,永不来源于用户输入。
- Hibernate 将数值标识符作为绑定参数或字面数字处理,绕过字符串拼接逻辑。
- 不会走到易受攻击的
InlineIdsOrClauseBuilder路径。
该配置实际上阻止了利用,即使使用未打补丁的版本也同样安全。
讨论
将用户提供的值直接用作主键或标识符会带来不必要的风险。数值、序列生成的键提供了对注入和枚举攻击的深度防御层。当需要使用用户可控的值(如用户名、slug、代码)时,应将其存放在单独的带索引列中,并进行严格的验证、规范化和消毒。直接将这些值用作标识符违背了关注点分离原则,增加了攻击面。
结论
对于仅依赖序列生成的数值主键的应用,CVE‑2026‑0603 并不构成实际风险。虽然出于整体安全卫生仍建议打补丁,但在这些环境中的紧迫性较低。使用基于字符串的标识符,尤其是受用户输入影响的系统,需要及时进行修复。
参考文献
- Red Hat 安全通告:
- 关于依赖更新实践的相关讨论: