对 PyTorch 基础设施的攻击,损害存储库和版本

PyTorch 机器学习框架开发中使用的基础设施遭到攻击的详细信息被披露,这使得提取足以将任意数据放入 GitHub 和 AWS 上的项目发布的存储库中的访问密钥以及替换代码成为可能在存储库的主分支中并通过依赖项添加后门。 PyTorch 发布欺骗可用于攻击在其项目中使用 PyTorch 的大公司,例如 Google、Meta、波音和洛克希德马丁。作为 Bug Bounty 计划的一部分,Meta 向研究人员支付了 16250 美元以获取有关该问题的信息。

攻击的本质是能够在持续集成服务器上运行代码,这些服务器执行重建并运行作业以测试发送到存储库的新更改。该问题会影响使用自己的外部“自托管运行器”处理程序和 GitHub Actions 的项目。与传统的 GitHub Actions 不同,自托管处理程序不在 GitHub 基础设施上运行,而是在自己的服务器或开发人员维护的虚拟机上运行。

在服务器上执行组装任务允许您组织代码的启动,这些代码可以扫描企业的内部网络,搜索本地文件系统以获取加密密钥和访问令牌,并使用访问外部存储或云服务的参数分析环境变量。在没有适当隔离组装环境的情况下,发现机密数据可以从外部发送给攻击者,例如通过访问外部 API。要确定项目对自托管运行器的使用情况,可以使用 Gato 工具包来分析可公开访问的工作流文件和 CI 任务启动日志。

在 PyTorch 和许多其他使用自托管运行器的项目中,只有其更改之前经过同行评审并包含在项目代码库中的开发人员才允许运行构建作业。使用存储库中的默认设置时拥有“贡献者”状态,可以在发送拉取请求时启动 GitHub Actions 处理程序,并相应地在与存储库或监督项目的组织关联的任何 GitHub Actions Runner 环境中执行代码。

事实证明,指向“贡献者”状态的链接很容易绕过 - 首先提交一个小的更改并等待它被接受到代码库中就足够了,之后开发人员会自动收到活跃参与者的状态,其拉取请求可以在 CI 基础设施中进行测试,无需单独验证。为了获得活跃的开发人员身份,该实验包括一些细微的外观更改以纠正文档中的拼写错误。为了访问 PyTorch 版本的存储库和存储,在“自托管运行器”中执行代码时的攻击拦截了用于从构建过程访问存储库的 GitHub 令牌,以及用于保存构建结果的 AWS 密钥。

该问题并非 PyTorch 特有的,它会影响许多其他使用 GitHub Actions 中“自托管运行器”默认设置的大型项目。例如,提到实施类似的攻击,在一些大型加密货币钱包和价值数十亿美元的区块链项目中安装后门,更改Microsoft Deepspeed和TensorFlow的版本,破坏其中一个CloudFlare应用程序,并执行Microsoft 网络上的计算机上的代码。这些事件的细节尚未披露。根据现有的漏洞赏金计划,研究人员已提交 20 多份申请,以获得价值数十万美元的奖励。

来源: opennet.ru

添加评论