CVE-2026-41681rust-openssl为Rust编程语言提供OpenSSL绑定。在0.10.39至0.10.78之前的版本中,EVP_DigestFinal()函数总是向输出缓冲区写入EVP_MD_CTX_size(ctx)大小的数据。如果输出缓冲区小于该大小,MdCtxRef::digest_final()会发生越界写入,通常导致堆栈破坏。该漏洞可从安全的Rust代码触发,具有极高的安全风险。
该漏洞的根本原因是rust-openssl在封装OpenSSL的EVP_DigestFinal()函数时,未正确校验输出缓冲区的长度。在受影响版本中,MdCtxRef::digest_final()方法直接调用底层API,假设缓冲区足够大以容纳哈希摘要(例如SHA-256需要32字节)。当开发者传入的切片长度小于哈希算法预期的输出大小时,底层C代码会继续写入数据,覆盖堆栈上的相邻内存。由于此API在Rust中被暴露为“safe”函数,普通开发者无需编写unsafe代码即可触发此内存破坏,可能导致任意代码执行或拒绝服务。