Python漏洞允许在35万个项目中执行代码

简介: Python漏洞允许在35万个项目中执行代码

640.png


Python 编程语言中一个被忽视了 15 年的漏洞现在重新成为人们关注的焦点,因为它可能会影响超过 35万个开源存储库并可能导致代码执行。


该安全问题于 2007 年披露并标记为 CVE-2007-4559,从未收到补丁,唯一提供的缓解措施是警告开发人员有关风险的文档更新。


自 2007 年以来未修补


该漏洞位于 Python  tarfile 包中,在使用未经处理的 tarfile.extract() 函数或 tarfile.extractall() 的内置默认值的代码中。


这是一个路径遍历漏洞,使攻击者能够覆盖任意文件。


640.png


自 2007 年 8 月首次报告以来,CVE-2007-4559 的技术详细信息已经可用 。虽然没有关于攻击中利用该漏洞的报告,但它代表了软件供应链中的风险。


今年早些时候,在调查另一个安全问题时,Trellix 的一名研究人员重新发现了 CVE-2007-4559,Trellix 是一家提供扩展检测和响应 (XDR) 解决方案的新企业,由  McAfee Enterprise 和 FireEye合并而成。


“在调用 tarfile.extract() tarfile.extractall() 之前未能编写任何安全代码来清理成员文件会导致目录遍历漏洞,从而使不良行为者能够访问文件系统” - Charles McFarland,漏洞研究员Trellix 高级威胁研究团队


该缺陷来源于Python 的 tarfile 模块中的 extract 函数中的代码明确信任 TarInfo 对象中的信息“并加入了传递给 extract 函数的路径和 TarInfo 对象中的名称”


640.png

CVE-2007-4559 - 与文件名


披露后不到一周,Python 错误跟踪器上的一条消息宣布该问题已关闭,修复正在更新文档并警告“从不受信任的来源提取档案可能很危险”。


估计有 35万个项目受到影响

 

通过分析影响,Trellix 研究人员发现该漏洞存在于数千个开源和闭源软件项目中。


研究人员抓取了一组 257 个更有可能包含易受攻击代码的存储库,并手动检查了其中的 175 个以查看它们是否受到影响。这表明其中 61% 的人很脆弱。


对其余存储库运行自动检查将受影响的项目数量增加到 65%,这表明存在广泛的问题。


然而,这个小样本集仅作为估算 GitHub 上所有受影响的存储库的基准。


“在GitHub 的帮助下,我们能够获得一个更大的数据集,其中包含588840 个独特的存储库,其中包含在其 python 代码中的 'import tarfile'”


使用手动验证的 61% 的漏洞率,Trellix 估计有超过 35万个易受攻击的存储库,其中许多用于帮助开发人员更快地完成项目的机器学习工具(例如 GitHub Copilot)。


这种自动化工具依赖于来自数十万个存储库的代码来提供“自动完成”选项。如果他们提供不安全的代码,问题就会在开发人员不知情的情况下传播到其他项目。


640.png

GitHub Copilot 建议易受攻击的tarfile提取代码


进一步研究该问题,Trellix 发现易受 CVE-2007-4559 攻击的开源代码“跨越了众多行业”。


正如预期的那样,受影响最大的是开发部门,其次是网络和机器学习技术。

640.png


跨行业存在的易受 CVE-2007-4559 影响的代码


利用 CVE-2007-4559


在今天的一篇技术博客文章中,重新发现了该漏洞的 Trellix 漏洞研究员 Kasimir Schulz 描述了在 Windows 版本的 Spyder IDE(一种用于科学编程的开源跨平台集成开发环境)中利用 CVE-2007-4559 的简单步骤。

在这个演示视频中,我们展示了攻击者如何利用 Spyder IDE 中的 tarfile 漏洞。Spyder IDE 使用扩展名为 .spydata 的文件类型,该数据用于填充变量资源管理器,并且该文件通常在研究人员之间共享。但是,由于 .spydata 文件实际上是一个 tar 文件,因此程序使用 tarfile 来提取 .spydata 文件中的所有文件。在视频中,我们展示了我们如何利用它来覆盖程序源代码,甚至添加社会工程方面来尝试获得管理员访问权限。


研究人员表明,该漏洞也可以在 Linux 上利用。他们设法在 Polemarch IT 基础设施管理服务的测试中升级文件写入并实现代码执行。

640.png25

在此演示视频中,我们展示了攻击者如何利用polemarch IT 管理框架中的tarfile 漏洞。通过告诉程序与我们的恶意“项目”同步,我们能够让程序提取我们恶意制作的 tar 文件,覆盖 Polarmarch 用户的现有 bashrc。下次有人登录时,他们会收到消息说他们已被黑客入侵并被踢出局。


除了引起对漏洞及其带来的风险的关注外,Trellix 还为超过 11,000 个项目创建了补丁。修复程序将在受影响的存储库的分叉中提供。稍后,它们将通过拉取请求添加到主项目中。


由于受影响的存储库数量众多,研究人员预计未来几周将有超过 70,000 个项目得到修复。然而,达到 100% 的目标是一项艰巨的挑战,因为维护者也需要接受合并请求。


Python 软件基金会就 CVE-2007-4559 到目前为止未发表建议。



本博客的目的是深入研究漏洞的技术细节,并展示攻击者编写漏洞利用程序是多么容易。在博客的过程中,我们还将探索编写一个工具的过程,该工具通过利用 AST 中间表示的力量来自动检测源代码中的 tarfile 漏洞。最后,这篇文章将向您介绍我们如何利用一个流行的开源存储库,使用路径遍历攻击来执行代码。


博客全文阅读地址:

https://www.trellix.com/en-us/about/newsroom/stories/threat-labs/tarfile-exploiting-the-world.html



相关文章
|
3天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第35天】装饰器在Python中是一种强大的工具,它允许开发者在不修改原有函数代码的情况下增加额外的功能。本文旨在通过简明的语言和实际的编码示例,带领读者理解装饰器的概念、用法及其在实际编程场景中的应用,从而提升代码的可读性和复用性。
|
4天前
|
设计模式 缓存 监控
Python中的装饰器:代码的魔法增强剂
在Python编程中,装饰器是一种强大而灵活的工具,它允许程序员在不修改函数或方法源代码的情况下增加额外的功能。本文将探讨装饰器的定义、工作原理以及如何通过自定义和标准库中的装饰器来优化代码结构和提高开发效率。通过实例演示,我们将深入了解装饰器的应用,包括日志记录、性能测量、事务处理等常见场景。此外,我们还将讨论装饰器的高级用法,如带参数的装饰器和类装饰器,为读者提供全面的装饰器使用指南。
|
4天前
|
存储 算法 搜索推荐
Python高手必备!揭秘图(Graph)的N种风骚表示法,让你的代码瞬间高大上
在Python中,图作为重要的数据结构,广泛应用于社交网络分析、路径查找等领域。本文介绍四种图的表示方法:邻接矩阵、邻接表、边列表和邻接集。每种方法都有其特点和适用场景,掌握它们能提升代码效率和可读性,让你在项目中脱颖而出。
16 5
|
2天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
|
4天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
14 4
|
6天前
|
缓存 开发者 Python
探索Python中的装饰器:简化和增强你的代码
【10月更文挑战第32天】 在编程的世界中,简洁和效率是永恒的追求。Python提供了一种强大工具——装饰器,它允许我们以声明式的方式修改函数的行为。本文将深入探讨装饰器的概念、用法及其在实际应用中的优势。通过实际代码示例,我们不仅理解装饰器的工作方式,还能学会如何自定义装饰器来满足特定需求。无论你是初学者还是有经验的开发者,这篇文章都将为你揭示装饰器的神秘面纱,并展示如何利用它们简化和增强你的代码库。
|
4天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
14 2
|
6天前
|
机器学习/深度学习 自然语言处理 API
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程。通过简单的代码示例,展示如何将文本转换为自然流畅的语音,适用于有声阅读、智能客服等场景。
36 3
|
8天前
|
设计模式 缓存 测试技术
Python中的装饰器:功能增强与代码复用的艺术####
本文将深入探讨Python中装饰器的概念、用途及实现方式,通过实例演示其如何为函数或方法添加新功能而不影响原有代码结构,从而提升代码的可读性和可维护性。我们将从基础定义出发,逐步深入到高级应用,揭示装饰器在提高代码复用性方面的强大能力。 ####
|
6天前
|
算法 IDE API
Python编码规范与代码可读性提升策略####
本文探讨了Python编码规范的重要性,并深入分析了如何通过遵循PEP 8等标准来提高代码的可读性和可维护性。文章首先概述了Python编码规范的基本要求,包括命名约定、缩进风格、注释使用等,接着详细阐述了这些规范如何影响代码的理解和维护。此外,文章还提供了一些实用的技巧和建议,帮助开发者在日常开发中更好地应用这些规范,从而编写出更加清晰、简洁且易于理解的Python代码。 ####