Python曝出15年“老洞”,绿盟君教你如何不“踩坑”

发布者:绿盟科技
发布于:2022-09-26 09:35

近日,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


声明:该文观点仅代表作者本人,转载请注明来自看雪