CVE-2026-45130Vim 9.2.0450 之前的版本中存在一个堆缓冲区溢出漏洞。该漏洞位于 src/spellfile.c 的 read_compound() 函数中,当加载启用 UTF-8 编码的恶意拼写文件时触发。攻击者可通过控制拼写文件中的长度字段导致整数溢出,进而引发堆溢出,可能导致应用程序崩溃或代码执行。
该漏洞根因在于 Vim 处理拼写文件时的整数溢出。在 src/spellfile.c 的 read_compound() 函数中,程序从拼写文件的复合部分读取一个受攻击者控制的长度字段,并将其用于 32 位有符号整数乘法运算。由于未对该数值进行充分的边界检查,乘法结果发生溢出,导致程序分配了一个远小于实际所需大小的堆缓冲区。随后,程序进入写入循环,向该小缓冲区写入大量数据,从而引发堆缓冲区溢出。利用条件方面,由于 'spelllang' 选项可以通过文件末尾的 modeline 进行设置,攻击者若能将恶意构造的 .spl 文件放置在 Vim 的运行时路径中,并诱导用户打开包含特定 modeline 的文本文件,即可在受害者打开文件时自动触发漏洞,导致 Vim 崩溃或潜在的任意代码执行。