NotChaosuu/vibecheck

GitHub: NotChaosuu/vibecheck

vibecheck 是一款用 Go 编写的静态安全扫描器,专注于检测 AI 生成 Web 应用中常见的安全配置缺陷和依赖漏洞。

Stars: 0 | Forks: 0

# vibecheck **AI 编写了你的应用,同时也敞开了大门。** 一款专为 AI 生成 / "vibe-coded(凭感觉编码)" Web 应用设计的静态安全扫描工具。将其指向你自己的代码仓库,它会对代码库进行评分,列出每一项发现及其 `文件:行号` 和修复建议,并实时检查你的依赖项是否存在已知漏洞。只需一个二进制文件,没有运行时依赖,无需额外安装任何附属组件。 我们的切入点:AI 代码生成器构建的工具会以可预测的方式发生故障。它们会搭建出一个可用的功能,但将安全配置保留在不安全的默认状态——例如开放的 Firebase 规则、没有行级安全(Row Level Security)的 Supabase 表、保存了真实密钥的 `NEXT_PUBLIC_` 变量,或是带有凭证的通配符 CORS。通用的扫描器是数据流引擎,它们读取应用程序逻辑,但基本上会跳过这类声明式接口配置。vibecheck 则直击痛点。 ``` $ vibecheck ./my-app vibecheck ./my-app Security grade: F (0/100) Findings: 4 critical 5 high Languages: JavaScript, Python Frameworks: Firebase, Flask, Supabase Files scanned: 7 CONFIRMED (5) structural, safe to act on CRIT Subprocess spawned with shell=True api/app.py:6 [command-shell-true] fix: Pass an argument list and drop shell=True. CRIT Firebase rules allow public read/write firestore.rules:3 [firebase-rules-open] match /{document=**} { allow read, write: if true; } fix: Replace `if true` with `request.auth != null` plus per-document ownership checks. CRIT Hardcoded Stripe secret key server.js:5 [secret-stripe-secret-key] fix: Move it to a server-only env var and roll the key in the Stripe dashboard. CRIT Endpoint returns process environment server.js:6 [env-dump-endpoint] fix: Remove the debug route. Never return environment variables to a client. HIGH CORS allows any origin with credentials server.js:4 [cors-wildcard-credentials] fix: Replace the wildcard with an explicit list of trusted origins. REVIEW (4) heuristic, worth a look HIGH Table created without Row Level Security supabase/migrations/001_init.sql:1 [supabase-missing-rls] fix: alter table messages enable row level security; then add per-user policies. VULNERABLE DEPENDENCIES (2) via OSV.dev HIGH jinja2@2.4.1 (PyPI) PYSEC-2026-1475 Jinja sandbox breakout through indirect reference to format method fixed in 3.1.5 ``` ## 已确认 / 待复核 划分 每一项发现都会落入两个通道之一,而这种区分正是核心所在: - **CONFIRMED(已确认)** —— 结构性事实。以 `sk_live_` 开头的字符串就是 Stripe 密钥;`allow read, write: if true` 就是开放规则;`shell=True` 就会运行 shell。这些都可以安全地直接处理。 - **REVIEW(待复核)** —— 启发式分析。“此 API 路由访问了数据库且没有 auth 守卫”或“此 SQL 由字符串拼接构建”*值得一看*,但它是否真的可被利用还需要你的亲眼确认。vibecheck 会如实说明,而不是妄下定论。 一个总是“狼来了”的扫描器最终会被无视。将两者区分开,意味着一条 CONFIRMED 的发现才具有真正的实际意义。 ## 安装 ``` go install github.com/NotChaosuu/vibecheck/cmd/vibecheck@latest ``` 或者从源码构建: ``` git clone https://github.com/NotChaosuu/vibecheck.git cd vibecheck go build -o vibecheck ./cmd/vibecheck ``` 需要 Go 1.22+。**零第三方依赖** —— 整个项目(包括 OSV client)全部使用标准库构建。一款不会反过来拖入庞大依赖树的安全工具。 ## 用法 ``` vibecheck # scan the current directory vibecheck ./my-app # scan a specific path vibecheck --json ./my-app # JSON for CI vibecheck -v ./my-app # verbose: OWASP category + full explanation per finding vibecheck --confirmed-only . # hide the review lane, show only structural findings vibecheck --min-severity high . # only critical + high vibecheck --no-sca . # skip the dependency check (code scan only) vibecheck --offline . # never touch the network vibecheck --exit-code . # exit non-zero on any confirmed critical/high (CI gate) vibecheck --list # print the rule catalogue ``` ## 它能捕获什么 **配置 / 框架错误配置**(通用扫描器遗漏的部分) - 处于测试模式的 Firebase / Firestore / Storage 规则(`allow read, write: if true`) - 创建时没有启用行级安全(Row Level Security)的 Supabase 表,以及显式的 `disable row level security` - 在客户端可触及的代码中使用了 Supabase 的 `service_role` 密钥 - 宽松的 CORS:带有凭证的通配符源(在 Express / FastAPI / Flask 中,与顺序无关) - 包含密钥的 `NEXT_PUBLIC_` / `VITE_` / `REACT_APP_` 变量(它们会被内联到浏览器 bundle 中) - 未被 `.gitignore` 覆盖的 `.env` 文件 **密钥** —— 硬编码的 AWS、Google、Stripe、GitHub、OpenAI、Anthropic、Slack 密钥以及 PEM 私钥,通过其独特的前缀进行匹配,以将误报率保持在接近零的水平。 **注入与不安全的 sink** —— 通过字符串拼接构建的 SQL、`shell=True` 以及动态的 `exec`、对非字面量输入的 `eval`、`pickle.loads` / 不安全的 `yaml.load`、带有未净化值的 `dangerouslySetInnerHTML`。 **认证 / 加密** —— JWT `alg:none`、硬编码的 JWT 密钥、禁用签名验证、关闭 TLS 验证、弱哈希(MD5/SHA1)、遗留的 debug 模式、返回 `process.env` 的路由、访问数据但无 auth 守卫的 API 路由。 **易受攻击的依赖项** —— 解析 `package-lock.json`、`yarn.lock`、`requirements.txt`、`poetry.lock`、`Pipfile.lock` 和 `go.mod`,然后针对每个已解析的版本实时比对 [OSV.dev](https://osv.dev)。因为它是在扫描时进行查询,所以不需要在本地维护并更新漏洞数据库——它始终掌握着最新的安全公告,包括近期的供应链安全事件。 请参阅 [`docs/rules.md`](docs/rules.md) 获取包含严重程度以及“已确认/待复核”划分的完整规则目录。 ## 语言 JavaScript、TypeScript、React、Next.js、Python、Go,以及 Firebase 规则文件和 SQL migrations。规则即是数据,因此添加一种语言或一项检查只需添加条目,无需重写引擎。 ## 扫描你自己的代码 vibecheck 是一款防御性工具,用于审计你拥有或被授权审查的代码。它会读取文件,并且除非你传入 `--offline` / `--no-sca`,否则它只会将你的依赖项名称和版本发送到 OSV.dev——绝对不会发送你的源代码。在发布你的业余项目之前用它扫一扫,或者带上 `--exit-code` 将其置入 CI 作为一道把关卡。 ## 评分机制如何运作 分数从 100 分开始,并会根据每项发现扣分(按严重程度加权),其中已确认(CONFIRMED)的发现比待复核(REVIEW)的发现扣分更多,而易受攻击的依赖项将按其严重程度等同于已确认的发现来计算。一旦出现单项被确认为严重(Critical)的发现,分数将被直接封顶,这样一份基本上干净的评分就无法掩盖那一个真正的漏洞。评级采用 A–F,其中 A 表示没有出现任何被确认的问题。 ## 许可证 MIT。请参阅 [`LICENSE`](LICENSE)。 **Chaosuu** | 专注于反机器人系统与 Web/API 安全的独立研究。 - GitHub: [NotChaosuu](https://github.com/NotChaosuu) - Telegram: [t.me/chaosuudev](https://t.me/chaosuudev) - X: [@NotChaosuu](https://x.com/NotChaosuu) 其他工具: [akamaixray](https://github.com/NotChaosuu/akamaixray) · [apkxray](https://github.com/NotChaosuu/apkxray) · [wafprobe](https://github.com/NotChaosuu/wafprobe) · [authmap](https://github.com/NotChaosuu/authmap) · [tlsprint](https://github.com/NotChaosuu/tlsprint)
标签:AI代码审计, EVTX分析, Go, Ruby工具, 数据可视化, 日志审计, 逆向工具, 零依赖, 静态代码扫描