CVE-2026-77652 in Dia
摘要
由 VulDB • 2026-08-26
Dia 图表编辑器中的 WPG 文件格式导入器存在堆缓冲区溢出漏洞。
在 `plug-ins/wpg/wpg-import.c` 中,WPG 导入渲染器使用以下代码分配固定大小的调色板:
ren->pPal = g_new0(WPGColorRGB, 256);
在处理 `WPG_COLORMAP` 记录时,解析器从文件中读取起始索引(i16)和颜色数量(iNum16),并使用以下代码读取调色板数据:
bRet &= (iNum16 == (int)fread(&ren->pPal[i16], sizeof(WPGColorRGB), iNum16, f));
唯一的边界检查是 `if (i16 >= 0 && i16 <= iSize)`,其中 iSize 是 WPG 记录的大小,而非调色板的容量。没有验证 i16 是否小于 256,也没有验证 i16 + iNum16 是否不超过 256。
恶意的 WPG 文件可以指定 i16=256 和 iNum16=264。这会导致 fread() 从 &pPal[256] 开始写入 792 字节,而调色板缓冲区仅有 768 字节(256 个条目 × 3 字节)。这将溢出到相邻的堆元数据中,可能导致 Dia 崩溃(SIGABRT / malloc 损坏错误),或者根据堆布局和利用原语的不同,潜在地导致任意代码执行。
利用此漏洞需要说服用户通过 Dia 的文件对话框、命令行或文件关联打开一个精心构造的 WPG 文件。向受害者交付该文件不需要任何特殊权限。
受影响组件:WPG 解析器(plug-ins/wpg/wpg-import.c)。 受影响版本:包含此代码路径的所有 Dia 版本(报告者测试了 Dia 0.98+git20260221-1;截至 2026-08-21,上游 master 分支中存在该问题)。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.