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

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

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

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

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/jeongjunsoo/cve-2022-0778
漏洞分析漏洞利用密码学学习与教育实验室与实践
GitHubjeongjunsoo/cve-2022-0778

CVE-2022-0778

针对 CVE-2022-0778 的概念验证漏洞利用,这是 OpenSSL 的 BN_mod_sqrt() 函数中的拒绝服务漏洞,附带基于 Docker 的实验室环境用于测试和分析。

查看仓库
12年前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2022-0778

贡献者

  • 정준수(@jeongjunsoo)

摘要

  • CVE-2022-0778 漏洞影响了 OpenSSL 中用于计算模素数平方根的 BN_mod_sqrt() 函数。

  • 当该函数处理非素数基的恶意构造证书时,未修补的服务器可能会遭受 DoS 攻击。


影响目标

  • OpenSSL 1.0.2
  • OpenSSL 1.1.1
  • OpenSSL 3.0

补丁之前

root@kitploit:~
i = 1;
if (!BN_mod_sqr(t, b, p, ctx))
    goto end;
while (!BN_is_one(t)) {
    i++;
    if (i == e) {
        ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
        goto end;
    }
    if (!BN_mod_mul(t, t, t, p, ctx))
        goto end;
}

  • 根据该算法,当 i 的值达到 e 时,循环应终止。
  • 然而,通过特定输入使 i 和 e 都为 1 时,该循环不会结束,从而产生无限循环。
  • 这会导致拒绝服务。

补丁之后

root@kitploit:~
for (i = 1; i < e; i++) {
    if (i == 1) {
        if (!BN_mod_sqr(t, b, p, ctx))
            goto end;
    } else {
        if (!BN_mod_mul(t, t, t, p, ctx))
            goto end;
    }
    if (BN_is_one(t))
        break;
}
/* If not found, a is not a square or p is not prime. */
if (i >= e) {
    ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
    goto end;
}

  • 原有的 while 语句被替换为 for 语句。
  • 因此,当 i 的值达到 e 时,循环会自动终止。
  • 上述补丁消除了无限循环的风险。

环境配置与执行

  • Ubuntu 环境配置

  • docker compose up -d 启动测试环境

  • docker run -it --rm -p 12345:12345 yywing/cve-2022-0778 --addr 0.0.0.0:12345

  • docker compose exec curl top 查看进程状态

  • docker compose exec curl bash 进入 bash

  • curl -k https://172.17.0.1:12345 向 12345 端口发送 HTTPS 请求


执行

  • 准备三个终端窗口(A、B、C)用于实验。

  • 在 A 终端中运行 docker run -it --rm -p 12345:12345 yywing/cve-2022-0778 --addr 0.0.0.0:12345 命令启动 Docker 镜像。

  • 接着在 B 终端中执行 docker compose exec curl top 命令,查看当前运行进程的情况。

  • 最后在 C 终端中输入 docker compose exec curl bash,然后执行 curl -k https://172.17.0.1:12345 向 12345 端口发送 HTTPS 请求。

结果

  • 在 B 终端中执行的 top 命令结果显示,curl 进程几乎占用了 100% 的 CPU 资源。这是因陷入无限循环所致。

总结

  • 该漏洞因缺乏素数验证而产生。
  • 通过将 while 语句改为 for 语句进行了修补,以防止无限循环问题。

参考

  • https://github.com/drago-96/CVE-2022-0778

  • https://hackyboiz.github.io/2022/03/19/syru/cve-2022-0778/

  • https://github.com/yywing/cve-2022-0778/


下载工具