vlambda博客
学习文章列表

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

漏洞验证演示

Replay Share Like

0/0

进度条,百分之0
00:00
/
00:46
00:46
全屏

继续观看

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

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

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
免责声明

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