TreRB/vercel-env-audit

GitHub: TreRB/vercel-env-audit

针对 2026 年 4 月 Vercel 安全事件的响应式审计工具,用于检测未标记为 Sensitive 的环境变量。

Stars: 0 | Forks: 0

# @valtik/vercel-env-audit 审计 Vercel 团队中的每一个环境变量,并标记未 标记为 **Sensitive** 的变量。这是针对 [2026 年 4 月 Vercel 安全事件](https://valtikstudios.com/blog/vercel-april-2026-security-incident-runbook) 暴露路径的响应式修复,该路径会导致明文环境变量通过受损的构建/运行时路径泄露。 ## 安装 ``` npx @valtik/vercel-env-audit --help ``` 或全局安装: ``` npm i -g @valtik/vercel-env-audit vercel-env-audit --help ``` 需要 Node.js **20+**(使用内置的 `fetch`)。 ## 用法 ``` # 显式提供令牌 vercel-env-audit --token "$VERCEL_TOKEN" # 或通过环境变量 VERCEL_TOKEN=xxxxx vercel-env-audit # 限制特定项目(可重复) vercel-env-audit --project my-app --project marketing-site # 用于 CI 的机器可读输出 vercel-env-audit --json > audit.json # 如果发现任何非敏感密钥则构建失败 vercel-env-audit --fail-on-warn ``` ### 选项 | 标志 | 说明 | | --- | --- | | `--token ` | Vercel API 令牌。默认使用 `VERCEL_TOKEN`。 | | `--team ` | 要审计的团队 ID。默认从 `user.defaultTeamId` 自动检测。 | | `--project ` | 限制到单个项目。可重复使用。 | | `--json` | 输出机器可读的 JSON(不显示表格)。 | | `--fail-on-warn` | 如果发现任何非 Sensitive 变量,即使风险为中等也退出 1。 | | `--verbose` | 向标准错误输出额外进度日志。 | | `--help` | 显示帮助并退出。 | ### 退出码 | 代码 | 含义 | | --- | --- | | `0` | 正常 — 未发现 HIGH 风险项。 | | `1` | 至少发现一个 HIGH 风险项,或触发了 `--fail-on-warn`。 | | `2` | API 错误或参数错误。可能会输出部分结果。 | ## 风险分类方式 每个环境变量会被归入三个风险等级之一。 | 风险 | 标准 | | --- | --- | | **HIGH** | 键名匹配敏感模式(`API_KEY`、`SECRET`、`TOKEN`、`PASSWORD`、`PRIVATE_KEY`、`AUTH`、`CREDENTIAL`、`DATABASE_URL`、`CONNECTION_STRING`、`_PAT`、`SIGNING_KEY`)**且** `type !== "sensitive"` **且** 不是 `NEXT_PUBLIC_*`。 | | **MEDIUM** | `type !== "sensitive"`,但键名不匹配已知敏感模式。仍有审查价值。 | | **LOW** | `type === "sensitive"` **或** 键名为 `NEXT_PUBLIC_*`(按设计为公开)。 | ## 示例输出 ``` VERCEL ENVIRONMENT VARIABLE AUDIT team_xxxxxxxxxxxx ┌──────────────────────┬────────────────────────────┬──────────────┬─────────┬──────┐ │ Project │ Var │ Env │ Sens. │ Risk │ ├──────────────────────┼────────────────────────────┼──────────────┼─────────┼──────┤ │ valtik-studios-webs… │ RESEND_API_KEY │ production │ ✗ │ HIGH │ │ valtik-studios-webs… │ RESEND_FROM │ production │ ✗ │ MED │ │ valtik-studios-webs… │ CSRF_SECRET │ production │ ✓ │ LOW │ └──────────────────────┴────────────────────────────┴──────────────┴─────────┴──────┘ Summary: 12 env vars total • 3 non-Sensitive (rotate + mark Sensitive) • 1 HIGH risk secret exposed • 11 MEDIUM risk • 0 LOW risk ``` ## JSON 输出结构 ``` { "tool": "@valtik/vercel-env-audit", "version": "0.1.0", "teamId": "team_xxx", "summary": { "total": 12, "high": 1, "medium": 11, "low": 0, "nonSensitive": 3, "sensitive": 9 }, "findings": [ { "project": "valtik-studios-website", "projectId": "prj_xxx", "key": "RESEND_API_KEY", "target": "production", "type": "encrypted", "sensitive": false, "risk": "high" } ] } ``` 输出中**绝不包含**实际的值。仅包含键名、目标环境以及 Vercel 的 `type` 标志。 ## 本工具不做什么 - 它**不会**解密任何环境变量的值。Vercel 请求会以 `decrypt=false` 发出。 - 它**不会**尝试利用配置错误。 - 它**不会**修改任何 Vercel 资源。100% 只读。 - 它**不会**向外部报告。请求仅发送到 `api.vercel.com`。 ## CI 集成 将其添加到 GitHub Actions 步骤中,以在 PR 中引入未标记的密钥时失败: ``` - name: Vercel env audit run: npx -y @valtik/vercel-env-audit --fail-on-warn env: VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} ``` ## 上下文 由 [Valtik Studios](https://valtikstudios.com/open-source) 发布。完整的事故运行手册请参见 [Vercel 2026 年 4 月安全事件运行手册](https://valtikstudios.com/blog/vercel-april-2026-security-incident-runbook)。 ## 许可证 MIT © 2026 Valtik Studios LLC
标签:API令牌, April 2026 Vercel 安全事件, CMS安全, Fail on warn, GNU通用公共许可证, HIGH, JavaScript, MITM代理, Node.js, OSV, Secret Management, SEO: Vercel 安全, SEO: 密钥泄漏, SEO: 构建安全, SEO: 环境变量审计, Vercel, 二进制发布, 对称加密, 开源工具, 敏感信息, 构建安全, 泄露防护, 环境变量, 自动化审计, 自定义脚本, 风险分级, 高危风险