leitwacht/malicious-packages

GitHub: leitwacht/malicious-packages

Leitwacht 发布的恶意 npm 包 CC0 开源威胁情报数据库,采用 OSV 格式,可被 osv-scanner 等工具直接消费以在构建阶段拦截恶意依赖安装。

Stars: 1 | Forks: 0

# Leitwacht malicious-packages 由 [Leitwacht](https://leitwacht.eu) 检测到的恶意 npm 包的公开、**宽松许可** ([CC0-1.0](./LICENSE)) 数据源,采用 [OSV](https://ossf.github.io/osv-schema/) 格式 — 这是一个 CC0 OSV **源数据库**,可被 `osv-scanner` / `deps.dev` 消费,并可供 `osv.dev` 摄取。 采用 CC0 协议发布,因此它可以被 OSV 吸收并嵌入到任何地方,且不会给消费者带来任何归属或许可负担。 ## 这里面有什么 记录位于 `osv//.json` 路径下,其中 id 是我们自己的 **`LWA-YYYY-NNNN`**(“Leitwacht Advisory”)—— 因此仅凭 id 就可以推导出记录的路径。根目录下的 [`index.json`](./index.json) 将每个 id 映射到其文件、包,以及(一旦 OSV 分配了的话)规范的 `MAL-YYYY-NNNN`,我们会将其导入到记录的 `aliases` 中。每条记录都永久链接到其在 `https://threatintel.leitwacht.eu/d/` 的详细报告。 这些记录**在构建上具有高精度**:只有在从包源本身独立验证了其不良行为之后,才会在此处命名某个包。 该数据源**仅记录后续内容**,且记录具有**粘性** —— 一旦某个包拥有了 `LWA-` 记录,它就会被保留,只有在其 [下架请求](https://threatintel.leitwacht.eu/policy#dispute) 得到支持时才会被移除(标记为 `withdrawn`,绝不会无声无息地被删除)。 **范围 —— 任何你都不希望安装的东西。** 每条记录都包含一个 `database_specific.leitwacht.category`,以便你分辨*它到底是什么*: - `malware` — 攻击者植入的恶意代码(凭据/钱包窃取、后门、木马投放器、安装时 RCE); - `dependency_confusion` — 名称/作用域抢注,其 payload 来自不受信任的外部来源(获取的 tarball 或被命名为恶意的依赖项),而不是直接植入在包本身中; - `pua` — 风险软件(代理软件、远程二进制执行、挖矿程序、强制遥测); - `research_poc` — 安全研究 / 概念验证包。 所有这些都表现出你绝对不希望在构建过程中运行的行为 —— 这就是底线。我们对每一项进行**基于事实的**描述,绝不会将研究 PoC 定性为犯罪恶意软件。CWE 标签在类别上是准确的:`malware` 带有 **CWE-506**(植入恶意代码);`dependency_confusion` 带有 **CWE-829**(包含来自不受信任控制范围的功能 —— 代码是从外部依赖项/tarball 中拉取的,并非植入于此);`pua` 和 `research_poc` 不带有 CWE。请注意,OSV 消费者会拦截*所有*记录,无论其类别如何;该标签是为了向人类说明情况,而不是为了降低其严重程度。 被刻意**排除在外**的内容:空壳 / 无代码的命名空间预留(不含任何可执行内容交付,因此安装时不会发生任何事情),以及良性发布者意外造成的凭据泄露(这是一种需要轮换的真实暴露风险 —— 而非攻击你的包)。所有通过门槛的检测都会被发布 —— 包括 OSV 已经覆盖的那些:我们会发布我们自己独立的第一方记录,并将 OSV 的 `MAL-` id 导入到 `aliases` 中作为交叉引用。OSV 已覆盖绝不被用作省略记录的理由;一旦发布,该记录即具有粘性并被保留。 发布的文本已经过净化处理:移除了泄露的机密、对 IOC 进行了脱敏处理、且不含任何个人数据。 ## 使用它来拦截安装 预构建的 osv-scanner 离线 DB 作为滚动发布的 **Release** 资产进行发布(不放入 git 中,以保持代码库的精简)。获取它并离线校验你的 lockfile: ``` base=https://github.com/leitwacht/malicious-packages/releases/download/db-latest mkdir -p leitwacht-osv/osv-scanner/npm && cd leitwacht-osv/osv-scanner/npm # 下载最新的离线 DB 及其签名: curl -sSLO $base/all.zip curl -sSLO $base/all.zip.cosign.bundle # 在信任之前请验证其确实属于我们(无密钥 Sigstore —— 无需分发 # 密钥;签名与我们的确切构建 workflow 身份绑定): cosign verify-blob all.zip \ --bundle all.zip.cosign.bundle \ --certificate-identity \ 'https://github.com/leitwacht/malicious-packages/.github/workflows/build-offline-db.yml@refs/heads/main' \ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' # 然后进行离线扫描(osv-scanner 仅读取 all.zip,绝不读取 osv/ tree): cd - && osv-scanner scan source --offline --local-db-path ./leitwacht-osv -L package-lock.json ``` DB 在每次重建时都使用 [Sigstore](https://www.sigstore.dev/) 无密钥签名进行签名;同时还发布了 `sha256sum -c all.zip.sha256` 用于基础的完整性校验。 要浏览或审计原始检测数据,请 `git clone` 该代码库 —— `osv/` 下的 JSON 记录是事实来源;Release 资产只是为 osv-scanner 打包的这些记录。 或者 —— 一旦此数据源被摄取为 OpenSSF 源 —— 你将自动通过 `osv.dev`、`osv-scanner`、GitHub/Dependabot 以及任何消费 OSV 的工具获取我们的检测。无需任何 Leitwacht 集成。 ## 争议 / 下架 被错误标记了?检测属于研究性质,按原样发布。请在 请求更正(或提交一个 issue)。获得支持的争议将被**撤销**(即 OSV 的 `withdrawn` 字段),而不是被无声无息地删除 —— 审计跟踪会被保留,且消费者将停止强制执行它。
标签:DAST, Homebrew安装, npm生态, OSV格式, 威胁情报, 开发者工具, 恶意软件分析, 暗色界面