介绍
大家好!今天我想分享一下我刚开始从事漏洞研究员工作时发现的(并因此获得报酬的)第一批漏洞之一。
Behave 似乎是一个很酷的存储库,由于我喜欢 Python,所以我决定在其中进行探索。第一步是了解什么是行为驱动开发 (BDD) 以及 behavior 本身的工作原理。然后是时候 fork 存储库并使用我最喜欢的 SAST 工具Snyk对其进行扫描了。
果然,我得到了很多结果。我仔细检查了所有结果,排除了误报和严重程度较低的问题,直到我偶然发现了一个看起来很有希望的东西——脚本convert_i18n_yaml.py。
漏洞概述
此漏洞是CWE-502 不受信任数据反序列化的典型示例https://cwe.mitre.org/data/definitions/502.html。在我们的案例中,这是由于 Behave 使用时yaml.load未指定加载器或pyYAML版本而导致的。
在pyYAML5.1 或更低版本中,如果未指定加载器,则使用默认加载器。此配置是许多类似反序列化漏洞的根源,wiki对此pyYAML有专门的警告。
开发
假设应用程序使用旧版本的 pyYAML,例如 3.13。攻击者可以制作恶意yaml文件并将其传递给convert_i18n_yaml.py。由于不安全的反序列化,yaml文件中的恶意代码将被执行。
这是一个更实际的例子:
1、创建恶意 YAML 文件(evil_i18n.yml):
!!python/object/apply:os.system [ “ls -la” ]
2、运行convert_i18n_yaml.py恶意文件:
python convert_i18n_yaml.py --data=evil_i18n.yml i18n.py
这将ls -la在服务器上执行命令!
缓解措施
修复此漏洞的最简单方法是使用yaml.safeLoad。这也是官方的修复方法。从那时起,Behave 就弃用了此文件并在其新版本中将其删除。
结论
所有正在使用 的人yaml.load,请停止使用。请使用yaml.safeLoad。如果必须使用yaml.load,请指定一个加载器,例如SafeLoader,或者更好的是,使用 的最新版本pyYAML。
如果你读到这里,谢谢你!希望你喜欢。祝你狩猎愉快~
https:
/
/medium.com/
@piyushbhor22/code-execution-vulnerability-
in
-behave-a-deep-dive-b8c7431a71f9
原文始发于微信公众号(Ots安全):Behave 中的代码执行漏洞:深入探究
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论