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



相关文章
|
2天前
|
机器学习/深度学习 人工智能 数据挖掘
Numba是一个Python库,用于对Python代码进行即时(JIT)编译,以便在硬件上高效执行。
Numba是一个Python库,用于对Python代码进行即时(JIT)编译,以便在硬件上高效执行。
20 9
|
2天前
|
机器人 Shell 开发者
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
18 8
|
1天前
|
存储 缓存 算法
如何优化Python代码?
【7月更文挑战第14天】如何优化Python代码?
13 6
|
2天前
|
数据格式 Python
Python代码示例,读取excel表格,将行数据转为列数据。(10)
【7月更文挑战第10天】Python代码示例,读取excel表格,将行数据转为列数据。
17 2
|
4天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
【7月更文挑战第11天】Python的asyncio库简化了单线程并发编程,利用协程和事件循环实现异步操作。async def定义异步函数,await挂起协程等待IO完成。例如,fetch_data模拟网络请求,main函数并发执行多个任务。asyncio.gather收集结果,Semaphore限制并发数,保证资源管理。asyncio提供高效优雅的并发解决方案。
20 4
|
3天前
|
数据可视化 PyTorch Serverless
Python 性能分析的几个方法,找到你代码中的那个她
我们在编写了一个脚本在笔记本上处理一些数据,然后去喝杯咖啡或者上了个厕所,15分钟后回来时发现进度才完成不到10%。 我们的脑袋里面就会发问:为什么这么慢?究竟是在哪个部分是慢的?是读取数据、处理数据还是保存数据?如何让它变快?它真的很慢吗? 有了这个疑问我们尝试去解决这个问题,下面我们介绍几个 python 性能分析的工具。
|
5天前
|
存储 算法 搜索推荐
Python高手必备!揭秘图(Graph)的N种风骚表示法,让你的代码瞬间高大上
【7月更文挑战第10天】在Python中,图数据结构通过邻接矩阵、邻接表、边列表和邻接集来表示,用于社交网络分析和路径查找等。邻接矩阵用二维数组存储连接,邻接表仅存储每个节点的邻居,节省空间。边列表列出所有边,而邻接集用集合确保邻居唯一性。选择合适表示法能提升代码效率和可读性,展现编程技巧。
12 1
|
2天前
|
机器学习/深度学习 TensorFlow API
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
9 0
|
2天前
|
Unix Linux Python
`subprocess`模块是Python中用于生成新进程、连接到它们的输入/输出/错误管道,并获取它们的返回(退出)代码的模块。
`subprocess`模块是Python中用于生成新进程、连接到它们的输入/输出/错误管道,并获取它们的返回(退出)代码的模块。
6 0
|
2天前
|
Unix Shell Python
Python代码示例标准输出与标准错误输出
Python代码示例标准输出与标准错误输出
5 0