vlambda博客
学习文章列表

年度加密漏洞提前锁定:Java JDK 加密实现漏洞可用于伪造凭据

 聚焦源代码安全,网罗国内外最新资讯!

编译:代码卫士

Java JDK 的某些加密操作实现中存在一个灾难性漏洞,可使攻击者轻易伪造虚假凭据。
年度加密漏洞提前锁定:Java JDK 加密实现漏洞可用于伪造凭据


该灾难性弱点影响 Java JDK 15及后续版本,已由 Oracle 在今天的关键补丁更新发布中修复。由于这些缺陷牵涉对使用广泛的 ECDSA 签名的实现,因此 Oracle Java 和 OpenJDK 均需更新。问题源自编程错误,而非底层加密技术出现问题。

如不修复,缺陷可导致攻击者伪造某些SSL 证书类型和握手,从而导致中间操纵人攻击。安全研究员 Neil Madden 提醒称,如不修复该漏洞,则已签名的 JWTs、SAML 断言、WebAuthn 认证信息等可被轻易入侵。

ForgeRock 公司的一名安全架构师 Wadden 指出,“这个漏洞的严重性不容忽视。如果你在这些安全机制中使用 ECDSA 签名,服务器运行的是2022年4月关键补丁更新之前发布的 Java 15、16、17或18,则攻击者可轻易并完全绕过签名。”


年度加密漏洞提前锁定:Java JDK 加密实现漏洞可用于伪造凭据
通灵卡片


多年来,Java 一直支持 ECDSA 作为签名所有类型数字化文档的广泛使用的标准。Wadden 解释称,错误是因为将原生 C++ 代码中的EC 代码覆写到Java 作为Java 15 发布而引发的。

Java 的 ECDSA 签名验证实现未检查和 ECDSA 签名相关的值 r 或 s 是否为0,因此可以生成一个二者均为0(编码正确)的签名值,而Java 将其作为任何信息和任何公钥的合法签名。它就相当于数字化的银行身份卡片。Wadden 将该空白银行ID卡片概念比作科幻电影《神秘博士》手中的通灵卡片。在电影中,角色通过通灵卡片愚弄人们进行合作。


年度加密漏洞提前锁定:Java JDK 加密实现漏洞可用于伪造凭据
不愉快的漏洞披露过程


Wadden 和同事在去年11月发现了该缺陷并将其告知Oracle 及其它 Java 开发者,然而披露过程并不理想。

Wadden 表示,“我对于披露流程很失望。我报告给 OpenJDK 联盟,然后掉入Oracle 黑洞。公平点说,他们确实迅速响应邮件,但总是提供最低限度的响应,直到修复方案进入 OpenJDK GitHub 移植仓库时,我才获悉修复方案详情。”


年度加密漏洞提前锁定:Java JDK 加密实现漏洞可用于伪造凭据
漏洞评分存在争议


Oracle 在发布说明中,给出的CVSS评分为 7.5,而ForgeRock 给出10分。

Wadden 指出,行业躲过一劫,“很惊讶竟然没人找到并利用它,但这可能更加突出 Java 8多么稳固!大多人认为公钥签名计划是超级安全的,但实际这些实现漏洞并不新鲜。对我而言,这个漏洞最令人担心的地方在于,WebAuthn/FIDO 生态系统本质上是围绕 ECDSA P-256 签名的一个单一文化。”

行业大咖 Thomas H Ptacek 称该漏洞是“年度加密漏洞”。




代码卫士试用地址:https://codesafe.qianxin.com
开源卫士试用地址:https://oss.qianxin.com


年度加密漏洞提前锁定:Java JDK 加密实现漏洞可用于伪造凭据 代码卫士
#软件供应链安全系列(7)--- 名人名书 #《软件供应链安全—源代码缺陷实例剖析》#2021北京网络安全大会(BCS)
年度加密漏洞提前锁定:Java JDK 加密实现漏洞可用于伪造凭据 代码卫士
#2021北京网络安全大会(BCS) #软件供应链安全系列(1)--软件供应链安全实践—奇安信集团代码安全事业部黄永刚 #通信行业网络安全论坛
年度加密漏洞提前锁定:Java JDK 加密实现漏洞可用于伪造凭据 代码卫士
#软件供应链安全 北京电视台报道《2021中国软件供应链安全分析报告》发布





推荐阅读








原文链接

https://portswigger.net/daily-swig/java-encryption-implementation-error-made-it-trivial-to-forge-credentials


题图:Pixabay License



本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。




年度加密漏洞提前锁定:Java JDK 加密实现漏洞可用于伪造凭据

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的产品线。

    觉得不错,就点个 “在看” 或 "” 吧~