ArisRhiannon/vibecheck

GitHub: ArisRhiannon/vibecheck

vibecheck是一个用于检测AI编码代理可能遗漏的安全漏洞的快速、低误报率的代码安全门控工具。

Stars: 2 | Forks: 0

# 氛围检测 [![ci](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c79058e7d8025425.svg)](https://github.com/ArisRhiannon/vibecheck/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) 一个快速、**代理原生**的“安全发布?”门,适用于vibe编码的应用。它使用**真实解析器**解析您的**JS/TS/JSX/TSX** (`@babel/parser`)、**Python**(stdlib `ast`)和**Go**(`go/parser`),并使用**污点分析**(JS/TS、Python和Go的跨过程分析——返回污点 + 参数→汇点摘要,文件内和跨文件)来标记AI编码代理出错的安全类别——提交的秘密、通过*抽象化*原始查询API的SQL注入、XSS、SSRF、路径遍历、命令注入、不安全的反序列化、弱JWT/CORS/cookie——并根据**置信度**对每个发现进行排序,以便代理可以修复真正的错误并忽略噪音。 ``` vibecheck . # human report (severity + confidence) vibecheck . --ci # exit 1 only on high-confidence (taint-backed) issues vibecheck . --json # machine-readable findings for agents / CI ``` ## 它是什么——以及它不是什么(阅读此内容) vibecheck **不是** [Semgrep](https://semgrep.dev) 或 [CodeQL](https://codeql.github.com) 的替代品。那些是更深入、更广泛的跨语言引擎,您应该运行它们以实现全面覆盖。vibecheck旨在在**一个狭窄、可衡量的轴上做得更好**:一个**低误报率、基于污点的门,用于AI-vibe编码失败类别,在代理循环中运行,并在毫秒内预提交**,具有**发布的精确度/召回率**,因此您可以信任`--ci`/MCP信号。与大型引擎**一起使用**,而不是代替它们。 | | vibecheck | Semgrep | CodeQL | |---|---|---|---| | 解析 | 真实AST(Babel JS/TS/JSX + Python `ast`) | 真实,多种语言 | 真实,多种语言 | | 数据流 | 跨过程(返回污点 + 参数→汇点;文件内 + 通过导入跨文件) | 污点(Pro) | 完全跨过程 | | 语言 | **JS/TS/JSX/TSX + Python + Go** | 许多 | 许多 | | 速度/基础设施 | 毫秒,本地,无需账户 | 快速 | 较慢,CI导向 | | 代理原生(MCP,置信度门控) | **是,一等** | 部分支持 | 否 | | 规则广度 | 小,专注 | 2000+ | 巨大 | 如果您只采用一个通用的SAST,请采用Semgrep或CodeQL。采用vibecheck作为**快速代理/CI预飞**,它不会使代理淹没在误报中。 ## 测量质量(未声称) 针对JS/TS、Python **和** Go(易受攻击 + 安全 + 故意安全)的**91个案例**的标记基准(参见[`METRICS.md`](METRICS.md),使用`bun benchmark/run.ts`重现): - 在语料库上**精确度100**%,**召回率100**%,**F1 100**%。 产生**零误报**的复杂安全案例包括:参数化查询、标记模板SQL、数值强制和模式验证输入、ORM/RegExp `.exec()`、Supabase **匿名** / Stripe **可发布** 密钥、加固cookie、允许列表CORS、固定JWT算法——正好是正则表达式检查器会触发的模式。此基准是精心挑选的;对于**现实世界的测量**(9个固定的开源库,1,218个文件,手动分类),请参阅[`docs/CORPUS.md`](docs/CORPUS.md)——该基准暴露了一个关键错误(Python/Go文件在真实扫描中未被扫描)并推动了精确度修复(相对重定向,仅服务器源SSRF)。 ## 置信度 每个发现都有一个**置信度**: - `high` — 用户输入的**源可以证明流向汇点**(基于污点),或一个确定的事实(提交的秘密、JWT `none`)。这些会失败`--ci`,并且是MCP `scan`工具默认返回的内容。 - `medium` — 一个危险的汇点,其值非字面值且没有已证明的来源(例如`eval(x)`)。 - `review` — 需要人类审查的结构性异味(例如没有可见身份验证的路由)。**默认排除在`--ci`和代理循环之外**,因此代理永远不会追逐幽灵工作。添加`--all`以包括它们。 ## 安装与使用 ``` npm i -D @arisrhiannon/vibecheck # or: bun add -d @arisrhiannon/vibecheck (Node >= 20) vibecheck . --ci vibecheck explain VC-SQLI vibecheck mcp # MCP stdio server exposing a `scan` tool (high-confidence by default) ``` 代理:请参阅[`AGENTS.md`](AGENTS.md) —— 在声明任务完成之前运行`vibecheck . --ci`并修复每个高置信度发现。 ## 规则(已实施和基准测试) 基于污点:`VC-RCE-EVAL`、`VC-RCE-CHILD-PROCESS`、`VC-SQLI`、`VC-XSS-REACT`、`VC-XSS-DOM`、`VC-SSRF`、`VC-PATH-TRAVERSAL`、`VC-OPEN-REDIRECT`。AST配置:`VC-CORS-WILDCARD`、`VC-JWT-NONE`、`VC-JWT-UNPINNED`、`VC-COOKIE-INSECURE`、`VC-STACK-EXPOSURE`。来源/秘密:`VC-SECRET-*`(8)、`VC-ENV-COMMITTED/DRIFT/MISSING`、`VC-NEXT-PUBLIC-SECRET`、`VC-SUPABASE-SERVICE-ROLE`。建议:`VC-ROUTE-NO-AUTH`(审查)、`VC-INPUT-NO-VALIDATION`。**Python**(`VC-PY-*`):`VC-PY-RCE`、`VC-PY-CMDI`、`VC-PY-SQLI`、`VC-PY-DESERIALIZE`、`VC-PY-YAML`、`VC-PY-SSTI`、`VC-PY-OPEN-REDIRECT`、`VC-PY-PATH`。**Go**(`VC-GO-*`):`VC-GO-CMDI`、`VC-GO-SQLI`、`VC-GO-PATH`、`VC-GO-OPEN-REDIRECT`、`VC-GO-SSRF`。`vibecheck explain `打印每个的修复。 ## 局限性 - **JS/TS/JSX/TSX + Python + Go**(Python需要`python3`,Go需要在PATH上有一个`go`工具链)。更多语言在路线图上(每个都通过其自己的真实解析器,永远不会手工制作)。 - **污点范围**:JS/TS污点是**跨过程的,具有真实的跨文件模块解析**——函数摘要携带**返回污点**和**参数→汇点**可达性,在文件内和通过解析的相对导入**跨文件**(命名、**别名**`a as b`和**命名空间**`* as ns`),通过固定点**多跳**传播;尊重清理器。未跟踪(假阴性):重新导出(`export { x } from …`)、默认导出、CommonJS `require`/动态`import()`、裸/包导入、在最坏情况下文件顺序中深度超过~7跳的链、方法和解构参数。**Python**也是跨过程的(返回污点 + 参数→汇点 **和** 类`@staticmethod`解析,通过解析的`from .mod import`/`import mod`进行文件内和跨文件,未解析:`import a.b`点未别名的、`*`/重新导出、装饰器)。Python请求**来源**跨越Flask、Django、**aiohttp**(`request.match_info`、`await request.post()`)、FastAPI/Starlette(`request.query_params`/`path_params`、`await request.json()/form()`)、Tornado、Bottle、Pyramid。**Go**在**包内和包间**是跨过程的(返回污点 + 参数→汇点;未别名的`pkg.Func`通过包名解析)。别名的包导入(`import u "…/util"`)和多返回赋值(`x, _ := f(src)`)未跟踪。 - 配置/秘密规则基于模式,其中AST没有增加价值。 - 一个高信号门和早期警告——**不是安全性的证明**。与Semgrep/CodeQL配对并审查。 ## 配置 —— `.vibecheck.json` ``` { "ignoreRules": ["VC-INPUT-NO-VALIDATION"], "allowPaths": ["test/**"], "failSeverity": "high" } ``` ## 许可证 MIT © 2026 Aris Rhiannon —— 查看 [LICENSE](LICENSE).
标签:数据可视化, 日志审计, 自动化payload嵌入, 自动化攻击, 逆向工具