CVE-2025-69419CVE-2025-69419是OpenSSL中的一个高危安全漏洞,存在于PKCS#12文件解析过程中。该漏洞由于OPENSSL_uni2utf8()函数在将PKCS#12 BMPString(UTF-16BE编码)转换为UTF-8时存在边界计算错误,导致在堆分配的缓冲区之前发生一字节的越界写入。当应用程序调用PKCS12_get_friendlyname()函数解析恶意构造的PKCS#12文件时,攻击者可利用此漏洞触发内存损坏,最终可能导致拒绝服务(DoS)攻击。值得注意的是,虽然PKCS12_parse()函数使用不同的代码路径可以避免此问题,但PKCS12_get_friendlyname()直接调用了存在漏洞的函数路径。此漏洞不需要认证或用户交互即可被利用,攻击者只需诱导目标系统解析一个特制的PKCS#12文件即可。
漏洞根源在于OPENSSL_uni2utf8()函数执行BMPString到UTF-8的两遍转换机制。在第二遍(输出阶段),辅助函数bmp_to_utf8()错误地将剩余UTF-16源字节数作为目标缓冲区容量传递给UTF8_putc()。具体来说,对于BMP码点高于U+07FF的字符(如中文、日文等非ASCII字符),UTF-8编码需要3个字节,但此时传递的缓冲区容量可能只有2字节。UTF8_putc()函数在缓冲区不足时返回-1,但该负值被直接加到输出长度变量中而未经过任何验证。这导致输出长度变为负数,后续的NUL终止符写入操作会在负偏移位置执行,从而在堆分配缓冲区的边界之前写入一字节数据。这种越界写入可造成堆内存损坏,触发不可预测的应用程序行为,严重时可导致进程崩溃实现DoS。