Python曝出15年“老洞”,绿盟君教你如何不“踩坑”
全文共1068字,阅读大约需2分钟。
近日,Python的Tarfile模块中发现一个存在长达15年之久的漏洞,引起了大家的关注,一是存在时间比较久,最早在2007年就被披露并记录为CVE-2007-4559;二是可能影响超过35万个开源存储库。
一
Tarfile漏洞始末
2007年8月24日,某安全研究员上报了Tarfile的目录遍历漏洞[1]。在漏洞上报6天后,组件的作者Lars认为不需要修复该漏洞,是否信任来源包来提取其中内容是使用者应该关注的,并做了文档方面的警告更新[2]。
2014年3月,作者Lars再次收到Tarfile的遍历攻击漏洞的反馈。Lars指出,Tarfile容易受到所有已知针对tar程序的攻击,并列举出9大攻击可能,包括路径遍历、符号链接文件攻击、权限操作、内存泄露等,并强调Tarfile 只是是一个库,不能替代 GNU tar。在一个月后,Lars提议用一个新类SafeTarFile,它是 Tarfile 类的子类和替代品,来解决安全问题,不过截止到2021年2月,SafeTarFile 没有通过现有的测试[3]。
二
漏洞利用原理
Tarfiles 是多个不同文件和元数据的集合,其中Tarfile用于解压缩时,会对文件名、文件大小、校验信息记录在tarinfo中。而Tarfile在调用extract或extractall函数时,可以在文件名中添加操作系统分隔符(“/”或“\”)以及“..”来进行目录遍历攻击。以下是一个典型的6行代码做的一个攻击示范。
最近重新发现了该漏洞的某安全研究员在博客中演示了,在 Windows 上的 Spyder IDE中利用 Tarfile的攻击过程。Spyder IDE 使用扩展名为 .spydata 的文件类型,该数据用于填充变量资源管理器,由于 .spydata 文件实际上是一个 tar 文件,因此程序使用 Tarfile 来提取 .spydata 文件中的所有文件。演示视频中展示了如何利用Tarfile来覆盖程序源代码,甚至尝试获得了管理员访问权限[4]。
三
解决方案
截止到2022年9月,针对此漏洞的相关 PR 仍然没有被合并修复,所以当前几乎所有正在维护的 Python 版本均受影响。在Python官方没有合并修复方案之前,需要谨慎使用Tarfile。对于来历不清楚的包,使用Tarfile解包会存在被攻击的风险。此外,在代码中也要防止类似于上文中,利用Tarfile构造的恶意攻击。
1、通过安全产品检查是否使用Tarfile组件
绿盟代码安全审计系统SDA,拥有静态代码审计和开源组件分析等多项能力。目前通过升级最新的规则包,支持查找代码中是否存在Tarfile文件的使用,然后根据代码上下文,判断是否存在目录遍历漏洞。最新规则升级包,请联系绿盟科技售后人员或从官方升级网站下载。
通过从github上取python-scratchbox项目作为示例代码[5],经过绿盟代码安全审计系统SDA产品检测效果如下:
2、通过代码加固来规避Tarfile风险
对于必须要使用Tarfile的情况下,这里建议做一下函数加固,增加路径检测check_path操作,确保Tarfile执行时不会出现路径穿越操作,具体代码示例如下:
参考文献
[1]. https://mail.python.org/pipermail/python-dev/2007-August/074290.html
[2]. https://bugs.python.org/issue1044#msg55464
[3]. https://bugs.python.org/issue21109
[4]. https://www.trellix.com/en-us/about/newsroom/stories/threat-labs/tarfile-exploiting-the-world.html
https://players.brightcove.net/21712694001/default_default/index.html?videoId=6312605223112
[5]. https://github.com/kad/python-scratchbox
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
随时掌握互联网精彩
- 1 习近平拉美之行的三个“一” 7951156
- 2 微信或史诗级“瘦身” 内存有救了 7918930
- 3 男子求助如何打开亡父遗留14年手机 7844503
- 4 中国主张成为G20峰会的一抹亮色 7792490
- 5 中国对日本等国试行免签 7667174
- 6 7万余件儿童羽绒服里没有真羽绒 7593952
- 7 女生半裸遭男保洁刷卡闯入 酒店回应 7447125
- 8 70多辆小米SU7同一天撞墙撞柱 7390217
- 9 操纵股价 2人被证监会罚没近3.35亿 7210323
- 10 千年古镇“因网而变、因数而兴” 7178377