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]. cabK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0j5h3W2D9i4K6u0W2M7s2W2@1K9r3!0F1i4K6u0W2L8%4u0Y4i4K6u0r3M7r3W2H3k6i4u0E0j5h3W2D9i4K6u0r3M7s2W2@1K9r3!0F1i4K6u0V1k6r3g2$3i4K6u0r3x3U0l9H3y4#2)9J5k6p5q4#2k6%4g2K6N6q4)9J5c8U0l9%4y4o6t1&6x3q4)9J5k6h3S2@1L8h3H3`.

[2]. 7c8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1N6h3N6K6i4K6u0W2M7s2W2@1K9r3!0F1i4K6u0W2L8%4u0Y4i4K6u0r3K9i4y4K6N6h3f1I4x3o6b7@1i4K6t1K6L8i4y4Y4y4e0f1@1y4U0b7`.

[3]. e30K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1N6h3N6K6i4K6u0W2M7s2W2@1K9r3!0F1i4K6u0W2L8%4u0Y4i4K6u0r3K9i4y4K6N6h3f1J5x3e0p5H3z5b7`.`.

[4]. 9d7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2@1M7X3g2D9L8r3W2^5i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8X3q4T1L8%4g2@1i4K6u0r3L8X3g2%4M7%4u0G2L8$3#2Q4x3V1k6K6N6r3!0J5K9h3g2K6i4K6u0r3N6r3S2J5k6h3q4@1i4K6u0V1L8r3q4T1M7#2)9J5c8Y4c8S2M7X3k6A6L8r3g2Q4x3X3c8W2P5s2m8D9L8$3W2@1K9h3&6Y4i4K6u0V1N6r3S2W2i4K6u0V1N6$3!0J5L8r3c8Q4x3X3g2Z5N6r3#2D9

403K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3L8r3q4&6k6i4u0K6i4K6u0W2j5Y4u0A6k6$3S2@1j5$3!0$3k6g2)9J5k6h3&6W2N6q4)9J5c8U0t1I4y4K6p5J5y4U0V1@1x3o6l9I4i4K6u0r3k6r3g2X3j5i4g2D9N6q4)9#2k6X3c8W2k6X3q4#2L8s2c8Q4x3V1k6A6L8X3c8W2P5q4)9J5k6h3S2@1L8h3I4Q4x3@1k6$3K9h3c8W2L8@1W2V1i4K6y4p5y4U0x3I4x3U0j5H3y4e0t1J5x3K6p5I4x3R3`.`.

[5]. 1b6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6C8j5h3c8Q4x3V1k6H3P5i4c8Z5L8$3&6Q4x3X3c8K6j5%4u0S2N6r3y4Z5j5X3!0^5


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