当前位置: 首页 > news >正文

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux云计算 |【第一阶段】ENGINEER-DAY2
  • 敏捷开发适用于哪些项目?你用对了吗?
  • 《Exploring Aligned Complementary Image Pair for Blind Motion Deblurring》
  • 导航专业入门,高考/考研假期预习指南
  • MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统
  • docker compose 部署交互模式的容器-以Ubuntu为例
  • Shell 构建flutter + Android 生成Apk
  • A Survey on Multimodal Large Language Models综述
  • 简单记录一下ubantu18.04初步使用opencv所遇到的问题
  • EasyExcel 学习之 导出 “WPS 表格在试图打开文件时遇到错误”
  • NVIDIA 完全过渡到开源 GPU 内核模块
  • PHP上门按摩专业版防东郊到家系统源码小程序
  • 深入浅出WebRTC—NACK
  • 【.NET全栈】ASP.NET开发Web应用——计算器
  • 【PyTorch】图像二分类项目
  • [deviceone开发]-do_Webview的基本示例
  • ➹使用webpack配置多页面应用(MPA)
  • 2017年终总结、随想
  • eclipse(luna)创建web工程
  • Elasticsearch 参考指南(升级前重新索引)
  • SpingCloudBus整合RabbitMQ
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Vue.js 移动端适配之 vw 解决方案
  • 从输入URL到页面加载发生了什么
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端面试之CSS3新特性
  • 数据科学 第 3 章 11 字符串处理
  • 思维导图—你不知道的JavaScript中卷
  • 一个SAP顾问在美国的这些年
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (js)循环条件满足时终止循环
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (汇总)os模块以及shutil模块对文件的操作
  • (计算机网络)物理层
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (三)SvelteKit教程:layout 文件
  • (四) 虚拟摄像头vivi体验
  • (四)事件系统
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .bat文件调用java类的main方法
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .NET 依赖注入和配置系统
  • .NET和.COM和.CN域名区别