甲骨文修复 Java “年度加密漏洞”

举报
liuzhen007 发表于 2022/05/26 22:47:05 2022/05/26
【摘要】 前言Java 版本 15 到 18 在 ECDSA 签名验证中存在一个缺陷,这使得不法分子可以轻松地对文件和其他数据进行数字签名,就好像他们是合法组织一样。因此,网络犯罪分子可以假冒经过加密签名的恶意下载和发布虚假信息,就好像它是真实的一样,而受影响的 Java 应用程序和服务将无法区分真假。可能造成的影响范围很广,包括加密通信、身份验证令牌、代码升级等,Oracle 和其他 Java 编写...

前言

Java 版本 15 到 18 在 ECDSA 签名验证中存在一个缺陷,这使得不法分子可以轻松地对文件和其他数据进行数字签名,就好像他们是合法组织一样。因此,网络犯罪分子可以假冒经过加密签名的恶意下载和发布虚假信息,就好像它是真实的一样,而受影响的 Java 应用程序和服务将无法区分真假。可能造成的影响范围很广,包括加密通信、身份验证令牌、代码升级等,Oracle 和其他 Java 编写的程序也都受到数据安全性的影响。本月甲骨文修复了这个漏洞——这家数据库巨头本季度修复了 500 多个安全漏洞——因此,鼓励大家尽早升级并经常升级。

正文

ECDSA 数字签名算法使用椭圆曲线密码学,多年来,其在应用过程中遇到了各种问题。尽管甲骨文仅将这次安全漏洞 (CVE-2022-21449) 的严重性评级为 7.5(满分 10),但安全咨询公司 ForgeRock 将该漏洞评级为 10。

Infosec 专家 Thomas Ptacek 已经将其描述为“年度加密漏洞”,我们倾向于同意这一点。

这是一个年度加密漏洞。把它标记为四月 Java 15-18 ECDSA 不会检查随机 x 坐标和签名证明是否非零;(0,0) 签名验证任何消息。这样就破坏了 JWT、SAML 等流程。

— Thomas H. Ptacek (@tqbf) [2022 年 4 月 20 日]

这个漏洞特别有趣的是,它非常容易被利用,并且存在明显的编程错误。当 Java 15 的部分签名验证代码从其 C++ 重写为 Java 时引入了该错误——包括 ECDSA 验证代码。

为了方便处理,ECDSA 签名由一对数字组成,称为(r, s)。为了验证签名,代码会执行一些数学运算,涉及数据的散列(指纹)、对数据进行数字签名的任何组织或个人的公钥、rs; 一方使用r,另一方使用rs

计算的双方必须相等才能通过签名检查。这意味着数据是由签名者的私钥进行数字签名的,表明数据来源于签名者或得到了签名者的同意。如果签名检查失败,这可能意味着签署数据的人不是他们所说的人(因为他们无权访问与给出公钥对应的密钥、私钥)并且数据是不应该受信任的。

理论上,要使签名有效,(r, s)不可能是(0, 0)因为某些数学运算涉及将这些数字与其他值相乘。出现该错误是因为原始 C++ 代码检查了两者rs都是非零,如果它们不满足则不会接受签名。新的 Java 代码没有检查这部分的逻辑,它只是继续并使用零值进行计算。

你不需要知道很多数学知识就应该知道:任何数乘以零都等于零。计算的一部分涉及除以s——但不幸的是,如果除以零,则不会产生错误。

结论

最终的结果就是,在有问题的代码版本中,任何提供空白签名的人都将被接受。正常的验证途径仍然可以正常工作,这就是为什么两年前没有注意到这一点。这是甲骨文产品中的 gazillon 远程代码执行漏洞,无需身份验证即可利用。




作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家(博客之星)、华为云享专家(共创编辑、十佳博主)、51CTO社区编辑、InfoQ 签约作者,欢迎关注我分享更多干货!😄 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200