CVE-2026-8669Perl Imager库1.030及之前版本在处理多帧GIF文件时存在严重的安全缺陷。由于代码逻辑错误,在解析特定GIF帧时未能正确校验图像宽度与屏幕宽度的边界条件,导致发生了堆越界写操作。远程攻击者可以通过诱导用户打开特制的GIF图像文件来触发该漏洞,进而可能导致应用程序崩溃、敏感信息泄露,或在特定条件下执行任意代码,对系统安全构成威胁。
该漏洞的根源在于Imager::File::GIF模块中的i_readgif_multi_low函数实现不当。该函数在初始化阶段,根据GIF文件头部的全局屏幕宽度(SWidth)分配了一个名为GifRow的堆缓冲区,并计划在处理后续每一帧图像时复用该缓冲区以存储行数据。在正常流程中,代码会检查当前图像的宽度加上左侧偏移量(Image.Width + Image.Left)是否超过SWidth,以防止溢出。然而,在处理跳过图像(skip-image)的特定代码分支(位于imgif.c第790至805行)中,程序直接调用了DGifGetLine函数向GifRow写入数据,却完全遗漏了上述关键的边界检查。因此,如果GIF文件中包含宽度大于全局屏幕宽度的帧,程序会将数据写入到GifRow缓冲区之外的堆内存区域,引发堆越界写入。