Anonymous 发表于 2015-4-27 16:19:01

Django框架任意文件包含漏洞

在4月21日,基于python的开源web框架Django发布安全公告,称在≤1.5版本的Django中contrib.markup包存在任意文件包含漏洞,攻击者可通过docutils进行攻击。

关于docutils

Docutils项目的主要是为了创造一套将纯文本转换为一些常用格式的工具,这些常用格式包括:HTML、XML和LaTeX。
docutils数据包是渲染reStructuredText(reST)的标准数据包。而reST特征之一是将其他文件包含在一个文档中。在默认情况下处于启用状态。
在Django≤1.5中contrib.markup包依赖于docutils并提供模板过滤器用于按需将reST渲染到HTML,然而他在从文件系统包含本地文件时并没有禁用有问题的选项。如果docutils使用了用户输入的恶意语句来渲染,并且没有禁用指令,那么攻击者可以读取到主机上的任意文件(至少是运行WSGI容器用户可以访问的文件)。这样会泄露用户的一些敏感文件或配置信息。
虽然Django1.6删除了contrib.markup app,但许多Djangoverse中的第三方app仍然依赖于docutils并且复制了Django的模式:
docutils_settings = getattr(settings, ‘RESTRUCTUREDTEXT_FILTER_SETTINGS’, {})
parts = publish_parts(
source=smart_bytes(value),
writer_name=”html4css1″,
settings_overrides=docutils_settings
)
return force_text(parts[“fragment”])
要解决任意文件包含的问题,数据包维护者应当采用如下模式:这些包可能并未包含与Django文档一样的警告,但在任何情况下都应该默认禁用文件包含以保证安全,而不是依靠用户手动配置。
docutils_settings = {
‘raw_enabled': False,
‘file_insertion_enabled': False,
}
docutils_settings.update(getattr(settings, ‘RESTRUCTUREDTEXT_FILTER_SETTINGS’, {}))
parts = publish_parts(
source=smart_bytes(value),
writer_name=”html4css1″,
settings_overrides=docutils_settings
)
return force_text(parts[“fragment”])
使用上述模式的包用户还要更新项目设置,增加如下信息
RESTRUCTUREDTEXT_FILTER_SETTINGS = {
‘raw_enabled': False,
‘file_insertion_enabled': False,
}

wanmznh 发表于 2015-6-28 10:13:08

还是不错的哦,顶了

CHRIS 发表于 2015-6-28 14:15:23

支持中国红客联盟(ihonker.org)

小龙 发表于 2015-6-28 16:39:02

感谢楼主的分享~

ljy07 发表于 2015-6-29 07:16:24

支持,看起来不错呢!

云游者 发表于 2015-7-1 12:21:40

还是不错的哦,顶了

Sty,涛 发表于 2015-7-1 17:03:06

还是不错的哦,顶了

HUC-参谋长 发表于 2015-7-3 04:55:01

支持,看起来不错呢!

wtsqq123 发表于 2015-7-3 11:17:06

支持中国红客联盟(ihonker.org)

Sty,涛 发表于 2015-7-4 02:13:19

页: [1] 2 3
查看完整版本: Django框架任意文件包含漏洞