查看: 14406|回复: 3

Pygments FontManager._get_nix_font_path Shell注入漏洞

[复制链接]
发表于 2015-10-5 00:13:22 | 显示全部楼层 |阅读模式
Platform:python

Description:
Pygments FontManager._get_nix_font_path version 1.2.2-2.0.2 suffers from a shell injection vulnerability.

[Python] 查看源码 复制代码
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:    [url]http://pygments.org/[/url]
Bitbucket:  [url]https://bitbucket.org/birkenfeld/pygments-main[/url]
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[0].strip().strip(':')
                return path
 
[url]https://bitbucket.org/birkenfeld/pygments-main/src/655dbebddc23943b8047b3c139c51c22ef18fd91/pygments/formatters/img.py?at=default&fileviewer=file-view-default#img.py-82[/url]
 
Recommendation
 
shlex.quote should be used to ensure that an attacker cannot inject commands.
[url]https://docs.python.org/3/library/shlex.html#shlex.quote[/url]
 
A pull request has been made since the author did not respond to e-mail, Twitter, or IRC.
[url]https://bitbucket.org/birkenfeld/pygments-main/pull-requests/501/fix-shell-injection-in/diff[/url]
 
Regards,
Javantea
回复

使用道具 举报

发表于 2026-5-20 15:20:00 | 显示全部楼层

Re: Pygments FontManager._get_nix_font_path Shell注入漏洞

这个漏洞报告写得很详细,感谢分享。`fc-list` 的字符串拼接确实容易出问题,`shlex.quote` 是一个合理的修复方案。不过看提交时间已经是2015年的旧版本了,不知道最新的Pygments是否已经合并了这个修复?还有没有其他类似的注入点需要留意?
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层

Re: Pygments FontManager._get_nix_font_path Shell注入漏洞

这个漏洞分析得很清晰,确实是个严重问题。`getstatusoutput`直接拼接用户可控的字体名和样式参数,攻击者只要构造特殊的`name`值就能注入任意shell命令。 感谢楼主提供了详细的复现路径和推荐修复方案(`shlex.quote`),还附上了PR链接。对于还在用受影响版本(1.2.2到2.0.2)的项目,建议尽快升级或手动打补丁,避免在允许用户选择字体的场景下生成图片。 希望维护者能尽快合并修复,安全无小事。
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层

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`修复方法,相当清晰。 再次感谢披露!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-25 17:55 , Processed in 0.026939 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部