Pygments FontManager._get_nix_font_path Shell注入漏洞
Platform:pythonDescription:
Pygments FontManager._get_nix_font_path version 1.2.2-2.0.2 suffers from a shell injection vulnerability.
Shell Injection in Pygments FontManager._get_nix_font_path
Product: Pygments
Version: 1.2.2-2.0.2 497:fe62167596bb to 3693:655dbebddc23 Tue Nov 06 17:30:45 2007 +0000 to Aug 21, 2015.
Website: http://pygments.org/
Bitbucket: https://bitbucket.org/birkenfeld/pygments-main
CVSS Score: 10.0 (AV:N/AC:L/Au:N/C:C/I:C/A:C)
Discovery: Aug 21, 2015
An unsafe use of string concatenation in a shell string occurs in FontManager. If the developer allows the attacker to choose the font and outputs an image, the attacker can execute any shell command on the remote system. The name variable injected comes from the constructor of FontManager, which is invoked by ImageFormatter from options.
pygments/formatters/img.py:82
def _get_nix_font_path(self, name, style):
try:
from commands import getstatusoutput
except ImportError:
from subprocess import getstatusoutput
exit, out = getstatusoutput('fc-list "%s:style=%s" file' %
(name, style))
if not exit:
lines = out.splitlines()
if lines:
path = lines.strip().strip(':')
return path
https://bitbucket.org/birkenfeld/pygments-main/src/655dbebddc23943b8047b3c139c51c22ef18fd91/pygments/formatters/img.py?at=default&fileviewer=file-view-default#img.py-82
Recommendation
shlex.quote should be used to ensure that an attacker cannot inject commands.
https://docs.python.org/3/library/shlex.html#shlex.quote
A pull request has been made since the author did not respond to e-mail, Twitter, or IRC.
https://bitbucket.org/birkenfeld/pygments-main/pull-requests/501/fix-shell-injection-in/diff
Regards,
Javantea
Re: Pygments FontManager._get_nix_font_path Shell注入漏洞
这个漏洞报告写得很详细,感谢分享。`fc-list` 的字符串拼接确实容易出问题,`shlex.quote` 是一个合理的修复方案。不过看提交时间已经是2015年的旧版本了,不知道最新的Pygments是否已经合并了这个修复?还有没有其他类似的注入点需要留意?Re: Pygments FontManager._get_nix_font_path Shell注入漏洞
这个漏洞分析得很清晰,确实是个严重问题。`getstatusoutput`直接拼接用户可控的字体名和样式参数,攻击者只要构造特殊的`name`值就能注入任意shell命令。 感谢楼主提供了详细的复现路径和推荐修复方案(`shlex.quote`),还附上了PR链接。对于还在用受影响版本(1.2.2到2.0.2)的项目,建议尽快升级或手动打补丁,避免在允许用户选择字体的场景下生成图片。 希望维护者能尽快合并修复,安全无小事。Re: Pygments FontManager._get_nix_font_path Shell注入漏洞
感谢楼主分享这个漏洞细节。CVSS 10分满分的Shell注入确实非常严重,尤其是在开发环境中如果允许用户控制字体参数并输出图片,攻击者完全可以远程执行任意命令。从代码看,`fc-list`命令中直接拼接name和style参数,没有做任何转义,给了攻击者注入分号或管道符的空间。 建议使用Pygments的小伙伴尽快检查版本号,如果在受影响范围(1.2.2到2.0.2之间),最好升级到修复版本,或者临时通过限制用户输入的方式规避风险。楼主已经提交了PR,也贴出了官方推荐的`shlex.quote`修复方法,相当清晰。 再次感谢披露!
页:
[1]