CVE-2026-22190CVE-2026-22190是Panda3D游戏引擎中egg-mkfont工具存在的一个高危格式字符串漏洞。该漏洞影响Panda3D 1.10.16及之前的所有版本。egg-mkfont是Panda3D提供的字体处理工具,用于生成字体纹理图集和.egg格式的字体定义文件。漏洞源于该工具的-gp(glyph pattern,字符图案)命令行选项在处理用户输入时存在缺陷,用户提供的参数被直接传递给C标准库的sprintf()函数作为格式字符串,而未进行任何安全验证或转义处理。攻击者可以通过精心构造的格式说明符(如%s、%x、%p等)利用此漏洞,从程序栈内存中读取敏感信息,包括栈帧地址、返回指针、局部变量值等。这些信息可能包含内存布局细节,为进一步的高级攻击(如代码执行)提供宝贵的情报。此外,格式化的输出会被写入生成的.egg和.png文件中,攻击者可以在后续步骤中检索这些文件以获取泄露的数据。由于该漏洞无需任何认证即可利用,且可通过网络远程触发,因此具有较高的安全风险。
该漏洞的根本原因在于egg-mkfont工具将-gp选项的用户输入直接作为sprintf()函数的格式字符串参数使用。在C语言中,sprintf()函数的第一个参数是目标缓冲区,第二个参数是格式字符串,后续参数是待格式化的值。当格式字符串包含格式说明符(如%x用于十六进制整数,%s用于字符串,%p用于指针)而对应的参数未提供时,sprintf()会从栈上读取参数指针指向的内存位置作为参数值。攻击者可以通过构造如%x%x%x%x或%p%p%p%p这样的输入,强制程序读取并输出栈上的多个值,从而泄露栈内存布局。攻击流程如下:1)攻击者准备恶意输入,包含格式说明符;2)使用-gp选项调用egg-mkfont工具;3)工具调用sprintf(format_string, arg),其中format_string来自用户输入;4)sprintf()根据格式说明符读取栈内存;5)包含泄露信息的输出被写入.egg/.png文件;6)攻击者获取输出文件提取敏感信息。漏洞利用的关键在于-gp参数未经过滤直接传递给sprintf(),这是典型的格式字符串漏洞模式。