Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)

admin 2022年4月24日13:12:22评论164 views字数 1262阅读4分12秒阅读模式
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)
点击蓝字·关注我们
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)
全文 741 字,预计阅读时间 3 分钟
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)

前言

ECDSA(椭圆曲线数字签名算法)签名被广泛应用于各个认证领域,如SSL证书,JWT签名等。近日,国外安全研究员发现了Java自带的ECDSA签名验证函数中,存在认证绕过漏洞。

Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)

影响版本

Java 15, 16, 17, 18


请及时安装Oracle发布的2022 4月补丁

https://www.oracle.com/security-alerts/cpuapr2022.html
P.S.低版本的Java不受影响,高版本重写了该函数,引入了此漏洞
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)

ECDSA算法

是一种非对称加密算法,被广泛应用于数字签名领域。ECDSA相较于RSA,在相同的安全级别下,可以得到更短的密钥和签名,备受数字签名领域的喜爱。

Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)

漏洞简述

ECDSA签名由2个值组成,r和s,推导公式有点复杂,感兴趣的同学可以参考

https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm#Signature_verification_algorithmhttps://zhuanlan.zhihu.com/p/97953640

简单来讲,如果 r=r*(根据s导出的值),即可验证成功。那么如果 r=s=0 呢,显然等式0=0*xxx是成立的,认证通过。

所以,ECDSA算法验证的第一步就是检查 r, s 是否 >=1。

Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)

然而Java中的ECDSA签名验证函数却并没有其进行检查,也就是说,可以设置 r=s=0,从而任何 r=s=0 的空白签名将通过认证。

Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)

应用场景

恶意网站使用空白签名的证书,所有访问该网站的用户(使用存在漏洞的java ECDSA验证)都将验证此证书为有效,从而建立会话,进而通信,此漏洞破坏了正常的SSL认证,会导致用户信息被恶意网站收集并利用。

Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)

漏洞环境&复现
https://github.com/khalednassar/CVE-2022-21449-TLS-PoC

漏洞验证演示

Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)

参考链接
https://neilmadden.blog/2022/04/19/psychic-signatures-in-java/https://github.com/khalednassar/CVE-2022-21449-TLS-PoChttps://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm#Signature_verification_algorithmhttps://zhuanlan.zhihu.com/p/97953640
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)
END
Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)
免责声明

本公众号内的文章及工具仅提供学习用途,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本公众号及文章作者不为此承担任何责任。


好文分享收藏赞一下最美点在看哦

原文始发于微信公众号(我不是Hacker):Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月24日13:12:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Java自带ECDSA签名验证函数存在漏洞,导致认证绕过 (CVE-2022-21449)https://cn-sec.com/archives/937471.html

发表评论

匿名网友 填写信息