CVE-2026-22189Panda3D是一款开源的3D游戏引擎,广泛用于游戏开发和可视化应用。该漏洞存在于Panda3D的egg-mkfont工具中,版本范围从初始版本到1.10.16均受影响。egg-mkfont是Panda3D提供的字体处理工具,用于从字体文件生成EGG格式的字体数据。在处理用户输入的glyph pattern参数(-gp)时,程序使用sprintf()函数将用户可控的字符串格式化到固定大小的栈缓冲区中,但未进行长度验证。当用户提供的glyph pattern字符串过长时,会发生栈缓冲区溢出,覆盖相邻的栈内存区域。这不仅会导致程序崩溃(确定性崩溃),在特定构建配置和执行环境下,攻击者还可能利用此漏洞实现任意代码执行,绕过安全边界。由于该工具通常在服务器端处理用户提交的内容,攻击者可通过构造恶意请求触发漏洞,对系统安全性造成严重威胁。
漏洞根源在于egg-mkfont工具中的字体文件名构造逻辑。程序在处理-gp(glyph pattern)参数时,调用sprintf()函数将用户输入的pattern字符串写入预定义大小的栈缓冲区。代码示例如下:char buffer[256]; sprintf(buffer, "glyph_%s.png", user_input); 由于sprintf()不进行边界检查,当user_input长度超过缓冲区剩余空间时,会发生栈溢出。攻击者可通过命令行传入超长字符串(如:egg-mkfont -gp "$(python -c 'print("A"*1000)')" input.ttf)触发漏洞。溢出数据会覆盖栈上的返回地址、函数指针等关键数据结构。在未启用栈保护(Stack Canaries)的编译版本中,攻击者可构造ROP链实现代码执行;在启用ASLR但未启用PIE的系统上,仍可通过堆风水等技术绕过缓解措施。建议开发者使用snprintf()替代sprintf(),或在调用前进行输入长度验证,并启用编译器安全选项如-Fstack-protector-strong。