在隔离的离线虚拟机中构建已注册的开源仓库,并扫描其安全漏洞,通过电子邮件发送包含复现步骤和建议补丁的发现结果的服务。
OSS Scanner 是 Anthropic 提供的一项服务,用于扫描关键开源仓库中的安全漏洞。请访问 red.anthropic.com/oss-scanner 了解更多关于该服务的信息。
请注意,使用此工具须遵守 OSS Scanner 条款 中规定的条款和条件。
通过提交一个添加单个目录的拉取请求来注册一个开源项目:
projects/<name>
我们的安全扫描器会在隔离的虚拟机中构建你的项目,然后在无互联网访问的情况下对其进行分析,并将发现的问题通过电子邮件发送给 primary_contact(以及任何抄送对象),每份报告都附有复现步骤和可用的建议补丁。报告由模型生成,未经人工审核。因此,我们不会对这些发现设定 90 天的披露期,也不会将其公开。项目所有者应提供 project.yaml(用于配置扫描器)、Dockerfile(说明如何构建项目),以及可选的 threat_model.md(提供项目特定的威胁建模)。
从 templates/project.yaml 开始:
repo: https://github.com/example/project # required: the git repository to scan; add #branch to pin one
primary_contact: [email protected] # required: reports and build problems go here (one address)
auto_ccs: # optional: more addresses on every mail
- [email protected]
homepage: https://example.org # optional
disabled: false # optional: true pauses reports without removing the enrolment
dockerfile: .oss-scanner/Dockerfile # required unless a Dockerfile sits in this repo next to your project.yaml
threat_model: .oss-scanner/threat_model.md # optional; also supports placing the file in this repository
repo 和 primary_contact 始终为必填项。除非你将 Dockerfile 与 project.yaml 放在同一目录下(见下文),否则 dockerfile 为必填项。其他字段均为可选项。
project.yaml 中的电子邮件地址是公开的。请使用你愿意公开的地址,例如安全别名。
如需接收加密的电子邮件报告,请添加你的 ASCII 装甲格式 OpenPGP 公钥。此时报告仅发送至 primary_contact;pgp 不能与 auto_ccs 同时使用:
pgp: |
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBF...
-----END PGP PUBLIC KEY BLOCK-----
要选择报告的发送位置,请为每个渠道设置其接收的最低严重级别:low、medium、high、critical,或使用 none 关闭该渠道。未指定的渠道将使用此处显示的默认值,达到或超过两个最低级别的报告会同时发送到两个渠道。pgp 仅适用于电子邮件,因此 GitHub 报告不会使用你的密钥加密:
output_format:
email:
min_severity: low
github_security_advisory: # GitHub private vulnerability reporting
min_severity: none
你必须提供 Dockerfile,且只能放在以下两个位置之一:
dockerfile: 设置为其路径(我们建议放在类似 .oss-scanner/Dockerfile 的位置)。这是首选方案,因为它允许你在无需在此处提交拉取请求的情况下更新构建;或者,project.yaml 放在一起,路径为 projects/<name>/Dockerfile,且不在 project.yaml 中设置 Dockerfile: 键。如果你不想向自己的仓库添加文件,可以将其放在此处,扫描器会像构建仓库内副本一样构建它。(威胁模型的工作方式相同。将 threat_model 字段设置为其在你仓库中的位置,或将其放在此处 projects/<name>/threat_model.md。)
Dockerfile 的用途是搭建你的环境、安装所有依赖并构建项目。初始项目设置运行时启用了网络访问,但之后的安全审计运行时没有互联网访问。构建或测试所需的任何内容都必须在初始 Dockerfile 设置期间获取。我们建议检查你的测试在构建的镜像内能否通过。
threat_model.md(可选但强烈推荐)文件允许你向扫描器提供有关你预期安全目标的文档。我们发现,提供关于如何评定报告严重性的指导最为有用(例如,你是否认为认证后 SQLi 是高危还是严重?没有已证实利用的缓冲区溢出是否上限为高危?存储型 XSS 何时为中危、高危和严重?)此文件还可以说明项目做什么、不可信输入从何处进入、哪些组件重要、哪些不在范围内、你希望报告和补丁呈现的样子,或任何你认为重要或有用的其他内容。
我们建议你在提交拉取请求之前运行两个命令:
tools/validate.py 根据上述规则检查 projects/<name>/。tools/check <name> 按照我们扫描器的方式构建你的项目,并在无网络的成品镜像中打开一个 shell。如果你的测试在此容器中通过,我们的扫描器很可能就能处理你的项目。tools/check --qemu <name> 在按扫描器方式布局的虚拟机内执行相同操作。这些工具需要你的主机已安装 git、Docker 以及带 PyYAML 的 Python 3(pip install pyyaml);--qemu 需要 x86-64 上的 Linux 并使用 QEMU 而非 Docker。
primary_contact 发送包含错误信息的电子邮件。primary_contact 及任何其他抄送对象,并附上复现步骤和可用的建议补丁。你可以随时通过 PR 编辑你的项目。要取消注册你的项目,请将 disabled 字段设置为 true 以暂停报告,或删除 projects/\<name\>/ 以完全撤回项目。
tools/check 会像 docker build 一样,在启用网络访问的情况下运行你项目的 Dockerfile。使用 --qemu 时,构建在虚拟机内运行,这使其无法访问你的文件,但它仍可访问你计算机上的服务和本地网络。只检查你信任的项目,或使用一台没有重要数据的机器。tools/check 会将 Claude Code 安装到它构建的镜像中(与扫描器一样)。Claude Code 受其自身条款约束。请访问 red.anthropic.com/oss-scanner。
维护状态: 此仓库由 Anthropic 积极维护。我们仅审查并合并注册拉取请求(projects/<name>/ 下的更改);我们不接受其他贡献,包括对 tools/ 或 templates/ 的更改。有关如何注册,请参阅 CONTRIBUTING.md;要报告此仓库中的漏洞,请参阅 SECURITY.md;以及 CODE_OF_CONDUCT.md。