返回资讯中心
外部精选
软件工程
#开发者实时流

Vibe-Shield 推出静态扫描器,专查 AI 生成 Next.js/Supabase 代码的安全隐患

来源标题:Vibe-Shield – Static security scanner for AI-generated Next.js/Supabase code

Vibe-Shield 是一款针对 AI 生成 Next.js/Supabase 代码的静态安全扫描器,用于发现密钥硬编码、无会话校验的路由、未启用行级安全(RLS)的数据表等问题。其 v2 规则库覆盖客户端暴露、认证与路由保护、数据库/RLS、AI 与 Web 注入点、依赖卫生、密钥与加密等类别。项目还提供 Agent Skill,让 Claude Code、Codex、Cursor 和 Windsurf 在宣布任务完成前先做安全审计。

Hacker News 最新crib-award-cont2026/11/8 · 今天30 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

你的 agent 发布得很快,但同时也发布了 NEXT_PUBLIC_SUPABASE_SERVICE_ROLE_KEY、没有会话检查的 DELETE 路由,以及没有 Row Level Security 的 CREATE TABLE——因为它优化的目标是「能跑就行」。 vibe-shield 就是为这种失败模式打造的静态安全扫描器,另外还附带一个 Agent Skill,让 Claude Code、Codex、Cursor 和 Windsurf 在说出「完成」之前先做审计。 v2 规则目录覆盖:客户端暴露;认证与路由保护;数据库/RLS;AI 与 Web 汇聚点;基础设施;依赖卫生;密钥与密码学;以及 agent/MCP 完整性。新增的加固检查包括生产环境 source map、不安全的 JWT 设置、显式与省略的 cookie 标志、本地缺失的安全响应头、容器用户、生命周期脚本、lockfile 和弱密码学。完整目录的规则都可以运行。 扫描器会生成一份启发式攻击面清单,涵盖路由方法、观测到的防护信号、SQL 表与 RLS 信号、AI 入口点以及 MCP/agent 文件。响应头检查覆盖可识别的服务器配置文件;cookie 检查覆盖常见的字面量 setter 选项。两者都是建议性的:外部中间件、部署设置和动态选项仍需人工复核。信号不能证明防护或策略真的生效,扫描范围之外的代码也不会被评估。agent 完整性检查请单独运行 audit-skills。 显式生成高管报告或 agent 修复提示词: npx -y @vibefoundry/vibe-shield scan --report SECURITY-REPORT.md --patch-prompt PATCH-PROMPT.md npx -y @vibefoundry/vibe-shield scan --format html --out security-report.html npx -y @vibefoundry/vibe-shield audit-skills --report agent-report.html 报告包含严重级别、CWE、位置、代码片段、每条规则对应的 OWASP 2025 Web 映射以及在适用情况下的上下文 LLM 映射,还有示例性修复建议。示例不是自动生成的项目专属补丁;请对照你的应用进行验证。扫描器本身默认离线且只读;--cache、--out、--report、--patch-prompt 和 init 会显式写入文件。用 npx 安装可能需要网络访问。A+ 评分仅适用于所检查的规则和文件,不构成安全认证。 源码树对应 v2.0.0;npm 命令获取的是已发布版本,在正式发布之前可能落后于该分支。要在本地运行此 checkout,请执行 npm ci && npm run build,然后用相同参数运行 node dist/bin/vibe-shield.js。 这就是当你让 agent 写「一个删除端点」时,它写出来的代码形态: // app/api/users/route.ts export async function DELETE(req: Request) { const { id, userId } = await req.json(); await db.query(DELETE FROM users WHERE id = ${id} AND owner = ${userId}); return new Response('ok'); 它能用。但它同时有三个严重漏洞——没有认证、SQL 注入,以及一个 IDOR,让调用方可以自行选择删除谁的数据。正常的评审流程抓不全这三个问题,而 agent 却把任务标记为已完成。 npx -y @vibefoundry/vibe-shield scan 在 17 毫秒内抓到了全部三个问题: 🛡️ vibe-shield · security scan(示例输出) target /home/you/app 💀 GRADE F — 0/100 · 3 critical CRITICAL 3 ███ Findings app/api/users/route.ts CRITICAL 2:1 VSB-AUTH-001 Next.js App Router mutation handler has no authentication check export async function DELETE(req: Request) { CRITICAL 4:22 VSB-DB-007 SQL statement built by concatenating request data await db.query(DELETE FROM users WHERE id = ${id} AND owner = ${userId}); CRITICAL 4:22 VSB-AUTH-004 Record ownership taken from the request instead of the session (IDOR) 7 files · 1 KiB · 412 files/s · 17 ms · 79 rules ⚠ 3 critical findings — rotate any exposed credential before anything else. Fix it npx -y @vibefoundry/vibe-shield scan --fix-prompt # writes SECURITY_PATCH_PROMPT.md for your agent Explain npx -y @vibefoundry/vibe-shield explain VSB-AUTH-001 Gate CI npx -y @vibefoundry/vibe-shield scan --fail-on critical --format github 然后把修复清单交回给写出这个 bug 的 agent: npx -y @vibefoundry/vibe-shield scan --fix-prompt # → SECURITY_PATCH_PROMPT.md 该文件会为每条发现列出:严重级别、CWE id 与链接、精确的 file:line、有漏洞的代码片段、按顺序排列的修复步骤、目标代码形态,以及验证命令。它是写给机器执行、也写给人类审计的。

1. 扫描(无需安装、无需配置、无网络请求)

npx -y @vibefoundry/vibe-shield scan

2. 把修复清单交给你的 agent

npx -y @vibefoundry/vibe-shield scan --fix-prompt

3. 永久安装这道关卡——skill + CI + 忽略文件

npx -y @vibefoundry/vibe-shield init 请使用带 scope 的名称。vibe-shield 发布为 npm 上无 scope 的 vibe-shield 属于一个无关项目,所以 npx vibe-shield 运行的是别人的代码。务必带上 @vibefoundry/ scope。该包自带预构建的 dist/,不需要 TypeScript,启动只需毫秒。 npx -y @vibefoundry/vibe-shield init 会写入: 不加 --force 不会覆盖任何东西,重复运行是无操作。 传统 SAST 规则针对的是人类的失误:忘记转义、漏掉 prepare()。Agent 写的代码失败方式不同——它自信地完整,且在结构上看似合理: vibe-shield 把这些特定形态编码成了规则:91 条签名,分布在八个防御类别中,每一条都源自真实的 agent 生成 bug,而不是通用的 CWE 清单。 79 条代码签名 + 12 条 agent 完整性签名 = 91。每条规则都有 id、CWE、示例性的有漏洞形态、修复指南和 OWASP 关联——运行 npx -y @vibefoundry/vibe-shield rules 或 npx -y @vibefoundry/vibe-shield explain <ID>。 ID Detects CWE Sev VSB-CLIENT-001 NEXT_PUBLIC_ / VITE_ / PUBLIC_ / REACT_APP_ + a server-only secret name (SERVICE_ROLE_KEY, OPENAI_API_KEY, STRIPE_SECRET_KEY, DATABASE_URL…) CWE-200 critical VSB-CLIENT-002 server-only process.env.SECRET read inside a "use client" module CWE-200 high VSB-CLIENT-003

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →