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

简介: 近日,Python的Tarfile模块中发现一个存在长达15年之久的漏洞,引起了大家的关注,一是存在时间比较久,最早在2007年就被披露并记录为CVE-2007-4559;二是可能影响超过35万个开源存储库。

近日,Python的Tarfile模块中发现一个存在长达15年之久的漏洞,引起了大家的关注,一是存在时间比较久,最早在2007年就被披露并记录为CVE-2007-4559;二是可能影响超过35万个开源存储库。

一、Tarfile漏洞始末

2007年8月24日,某安全研究员上报了Tarfile的目录遍历漏洞[1]。在漏洞上报6天后,组件的作者Lars认为不需要修复该漏洞,是否信任来源包来提取其中内容是使用者应该关注的,并做了文档方面的警告更新[2]。

image.png

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行代码做的一个攻击示范。

image.png

最近重新发现了该漏洞的某安全研究员在博客中演示了,在 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产品检测效果如下:

image.png

2、通过代码加固来规避Tarfile风险

对于必须要使用Tarfile的情况下,这里建议做一下函数加固,增加路径检测check_path操作,确保Tarfile执行时不会出现路径穿越操作,具体代码示例如下:

image.png

image.png

相关文章
|
2月前
|
Rust 安全 API
Python潮流周刊#3:PyPI 的安全问题
Python潮流周刊#3:PyPI 的安全问题
30 1
|
4月前
|
缓存 关系型数据库 数据库
上云一年烧320万美元,成功“下云”六个月后Ruby on Rails之父现身回了 14 个问题!...
上云一年烧320万美元,成功“下云”六个月后Ruby on Rails之父现身回了 14 个问题!...
25 1
|
4月前
|
人工智能 移动开发 程序员
猿如意开发工具|python3.7
猿如意开发工具|python3.7
|
10月前
|
Python
Python—不良人李星云小项目
运行窗口后在窗口内按下鼠标键即会切换图片并且播出一段李星云经典语录,松开鼠标键就会切回之前的图片!
168 0
|
Python
Python黑科技05-小项目-让你的微信朋友圈变得不一般
努力让自己变得更好,并坚持对外输出价值,让别人因为你的言行而变得更好。 只有强大的我们才可以通过自身的努力去帮助他人解决更多的问题,这样不仅我们自身会拥有更加美好的人生,我们身边的人也会收获到更加美好的人生。
Python黑科技05-小项目-让你的微信朋友圈变得不一般
|
机器学习/深度学习 编解码 计算机视觉
学会这些Python美图技巧,就等着女朋友夸你吧
Python中有许多用于图像处理的库,像是Pillow,或者是OpenCV。而很多时候感觉学完了这些图像处理模块没有什么用,其实只是你不知道怎么用罢了。今天就给大家带了一些美图技巧,让你的图美翻全场,朋友圈赞不绝口,女朋友也夸你,富贵你好厉害啊!
177 0
Python 常用小妙招(二)
Python 常用小妙招(二)
|
索引 Python
Python 常用小妙招(三)
Python 常用小妙招(三)
|
API ice Python
Python 常用小妙招(一)
Python 常用小妙招(一)

相关实验场景

更多