我们如何在npm之外接受恶意软件建议

2026年8月6日1 次浏览来源:GitHub Blog阅读原文

一个被破坏的软件包可以在安装它时窃取证书,直到最近,GitHub只能在npm中标出这些证书.

现在不是了 这就是Discarbot背后的供应链工程团队如何利用OpenSSF’s共享的恶意包数据,将恶意软件咨询扩展至8个生态系统的故事.

这里 & rsquo; 的状态: 今年早些时候, Deptabot 开始在 npm 依赖性中标记恶意软件 。

如果你写出 JavaScript , 就会有好消息 。

现在,我们 & rsquo; 将同样的功能带入 PyPI 。

We’ve 增强 GitHub 咨询数据库以摄取来自 OpenSSF’s 恶意包存储器的恶意包报告,这意味着恶意包建议和依赖提示它们的力量覆盖了所有8个主要包生态系统:npm, PyPI, Maven, RubyGems, Nuget, Go, punchers.io, 和 PHP Composer.

在GitHub’s供应链安全组织中, 我领导Deptabot团队, 并在这篇文章中, I’ll 告诉你这个管道是如何运作的.

咨询数据库多年来从外部来源输入了脆弱性数据。

RubySec代表宝石,RustSec代表箱子,PyPA代表Python.

每一个都是一个进口商,可以读取一份公开的咨询回函,并将记录映入我们的数据库。

Malware是出局的奇数:它流经一个单独的,内部的,npm的只路径,围绕GitHub’s自己检测出恶意npm包.

将现有的探测从一个到八个支持的生态系统,需要我们多年的时间。

与此同时,OpenSSF已经解决了每个人的聚合问题.

他们的恶意包回波于2023年推出,超过15,000份OSV格式的报告.

从那时起,它每天都在增长,并得到了社区提交和整个行业的自动检测来源的提供:伤寒症、依赖性综合包、账户接管、恶意预建二进制。

It’s public, it’s 结构化,覆盖了OSV schema支持的任何生态系统.

因此,设计几乎是自己写的。

我们没有建造八个独特的探测系统,而是建造了一个进口商。

我们重新使用同样的模式, 我们的基于 repo 的 进口商已经遵循了 。 。

新的 OpenSSF 导入者会读取每个OSV 记录,并在任何内容触及数据库之前对照计划验证所需的字段,类型和格式.

无法进行验证的记录会被拒绝并登录。

It’s从未悄悄地补齐并挥手通过,因为 & ldquo; 大多有效的” 恶意软件咨询正是六个月后被你咬的东西.

有效记录被正常化为种子条目:来源、标识符、存在时的CVEID、作为快照保存的完整上游记录以及我们出版管道所绘制的子集消耗。

正常化听起来很无聊 直到你满足数据。

上游生态系统的弦能和我们的一样(Repo说,我们的数据库说), OSV记录将受影响的版本列为我们在范围中认为的离散值,有些记录完全没有可用版本的名称.

细节字段经常是空的,当多个来源报告同一软件包时,它们的书写被附加在一个blob中.

报告也会被收回:Repo保存了整个文件夹,以备被证明是错误的咨询意见,因此进口商必须应对星期一被标出并在星期三被否定的包.

然后是 & rsquo; 解调问题, 它和rsquo; 是一个有趣的问题 。

GitHub 本身是 OpenSSF repo 的促进者; 我们自己的 npm 恶意软件建议 向上游流入其中 。

幼稚地导入重播, 而 We’d 将重新循环导入我们自己的数据 。

固定在 OSV’s 源元数据上: 报告来源的每个恶意包记录条目, 任何标签都始于我们。

进口商在创建种子条目之前会丢弃这些内容 。

当我们验证了活的数据, 不止哈

分享