GitHub 令牌泄漏, Python 核心资源库面临潜在攻击

TheHackerNews网站消息,软件供应链安全公司 JFrog 的网络安全研究人员称,他们发现了一个意外泄露的 GitHub 令牌,可授予 Python 语言 GitHub 存储库、Python 软件包索引(PyPI)和 Python 软件基金会(PSF)存储库的高级访问权限。

该令牌属于 Python 软件基金会的基础设施主管,并且意外地包含在一个编译的二进制文件中,该文件作为容器镜像的一部分发布在 Docker Hub 上。

JFrog 的研究人员在一份报告中写道:“这次的情况比较特殊,如果令牌落入不法分子之手,他们可能向 PyPI 软件包甚至 Python 语言本身注入恶意代码(类似于用恶意软件包替换所有 Python 软件包),其潜在后果难以估量。”

因此,理论上攻击者可以利用管理员权限,通过毒化与 Python 编程语言核心或 PyPI 软件包管理器相关的源代码,策划大规模的供应链攻击。

这一事件表明,仅从源代码中清除访问令牌(某些开发工具会自动这样做)不足以防止潜在的安全漏洞。由于自动构建过程和开发人员的失误,敏感凭据也可能被包含在环境变量、配置文件甚至二进制文件中。

令牌泄漏

PyPI 管理员兼 Python 软件基金会 (PSF) 基础设施主管 Ee Durbin 撰写了一份事件报告,解释了泄露事件发生的原因。该事件涉及 Durbin 自己账户的访问令牌,由于他在组织中的角色,该账户拥有管理权限。

2023 年初,Durbin 正在开发 cabotage-app,这是 PSF 开发的一款基于 Docker 的工具,用于在 Kubernetes 集群上部署 PyPI 和相关服务。在开发代码库的构建部分时,他不断遇到 GitHub 对匿名访问实施的 API 速率限制。

在Durbin 所谓的 "偷懒行为 "中,他决定在本地修改源代码,为自己的账户添加一个访问令牌,以绕过默认的速率限制,更快地完成工作。这是一个快速解决方案,是配置本地主机 GitHub 应用程序来完成构建而不是使用 GitHub API 的替代方案。

Durbin 知道在源代码中添加个人访问令牌 (PAT) 并不安全,但这种更改只是针对他的本地代码库副本,从未打算远程推送。事实上,自动构建和部署脚本应该恢复本地变更,从而清除令牌。

但 Durbin 没有意识到的是,作为构建过程的一部分而生成的 .pyc(Python 编译字节码)文件中也包含了令牌,而这些存储在 __pycache__ 文件夹中的文件并未配置为从上传到 Docker Hub 的最终 Docker 镜像中排除。

PyPI 安全团队在 6 月下旬收到 JFrog 的通知后,撤销了该令牌,并审查了所有 GitHub 审计日志和账户活动,以查找该令牌可能被恶意使用的迹象。目前,没有发现恶意使用的证据。包含令牌的 cabotage-app 版本于 2023 年 3 月 3 日发布在 Docker Hub 上,并于 2024 年 6 月 21 日(即 15 个月后)被移除。

Durbin 写道:" Cabotage 现在完全是自托管的,这意味着 cabotage-app 的构建不再使用公共注册表,部署构建仅从源代码的清洁检查中启动。这减少了本地编辑进入开发环境之外的镜像构建的情况,同时也消除了发布到公共注册表的需要。”

Durbin 表示,除非万不得已,他今后将避免为自己的账户创建个人访问令牌。除了这一案例之外,这种长效令牌并没有在其他任何情况发挥作用。

关于此次事件,Durbin 认为这是一个很好的提醒,要为 API 令牌设置严格的过期日期(如果需要的话),像对待源代码一样对待 .pyc 文件,并在自动化系统上只从干净的源代码执行构建。

参考来源:

https://www.csoonline.com/article/2515722/python-github-token-leak-shows-binary-files-can-burn-developers-too.html

https://thehackernews.com/2024/07/github-token-leak-exposes-pythons-core.html

相关推荐

  1. GitHub个人访问令牌登录

    2024-07-20 06:40:03       25 阅读
  2. Python | R 潜在混合模型

    2024-07-20 06:40:03       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 06:40:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 06:40:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 06:40:03       45 阅读
  4. Python语言-面向对象

    2024-07-20 06:40:03       55 阅读

热门阅读

  1. Azure MySQL资源优化策略

    2024-07-20 06:40:03       15 阅读
  2. IP地址与mac地址的绑定、解绑

    2024-07-20 06:40:03       20 阅读
  3. Go的数据结构与实现【LinkedList】

    2024-07-20 06:40:03       18 阅读
  4. postgres 的WAL日志膨胀的几种原因

    2024-07-20 06:40:03       18 阅读
  5. 桥接模式(Bridge Pattern)

    2024-07-20 06:40:03       18 阅读
  6. Metalog 源码解读

    2024-07-20 06:40:03       13 阅读
  7. 452. 用最少数量的箭引爆气球

    2024-07-20 06:40:03       15 阅读
  8. Python爬虫——1爬虫基础(一步一步慢慢来)

    2024-07-20 06:40:03       11 阅读
  9. 2024.7.19 Ai大模型问答 - 底特律和长春

    2024-07-20 06:40:03       17 阅读
  10. 【python】python面向对象之——继承

    2024-07-20 06:40:03       18 阅读