AyushkhatiDev/vibesec
GitHub: AyushkhatiDev/vibesec
一款专为 AI 生成代码设计的命令行安全扫描器,可在发布前快速检测硬编码密钥、注入漏洞和不安全配置等问题。
Stars: 1 | Forks: 0
# VibeSec
**在 AI 生成的代码发布之前找出安全漏洞。**
[](https://pypi.org/project/vibesec/)
[](https://pepy.tech/project/vibesec)
[](https://www.python.org/downloads/)
[](https://github.com/AyushkhatiDev/vibesec/actions)
[](#security-coverage)
[](LICENSE)
AI 编码工具可以在几分钟内构建一个可运行的应用程序。但它们也可能在不知不觉中引入硬编码的密钥、被禁用的授权、不安全的 JWT 处理、命令注入、SSRF、不安全的 Dockerfile 以及有风险的 GitHub Actions 工作流。
**VibeSec 是一款专门为这种新工作流程(AI 辅助、快速搭建的软件)构建的快速 CLI 安全扫描器。**
```
pip install vibesec
vibesec scan ./my-app
```
VibeSec 为开发者提供了即时、实用的答案:
- 什么存在漏洞?
- 有风险的代码在哪里?
- 严重程度如何?
- 我该如何修复?
## 为什么选择 VibeSec?
| AI 生成代码中的问题 | VibeSec 的作用 |
|---|---|
| AI 工具会复制不安全的教程模式 | 检测硬编码的密钥、禁用的 RLS、薄弱的 Flask 配置、不安全的 JWT 以及缺失的身份验证 |
| 通用扫描器可能存在大量误报或漏掉 AI 特有的错误 | 针对幻觉包和脚手架管理员路由等 AI 代码故障模式提供专门的规则 |
| 安全审查会减慢快速原型设计的速度 | 可作为本地 CLI 运行,在 CI 中运行,或针对公共 GitHub 仓库运行 |
| 扫描发现的问题难以处理 | 按文件对发现的问题进行分组,分配严重等级,提供修复提示,并计算风险评分 |
| 团队需要适合审计的输出 | 导出终端、JSON、SARIF 和独立的 HTML 报告 |
**当前数据:** `24` 条安全规则、`179` 个自动化测试、`999` 次 PyPI 下载,以及支持用于 GitHub 代码扫描的 SARIF。
## 30秒演示
```
$ vibesec scan ./my-app
VibeSec v0.7.0 - AI-Generated Code Security Scanner
CRITICAL 6 findings
HIGH 3 findings
MEDIUM 2 findings
Risk score 79
Files scanned 4
Rules checked 24
config.py
CRITICAL - Hardcoded Secret
Found: Database URL with credentials detected in source code
Fix: Move to environment variables. Never commit secrets to git.
```
### 真实扫描输出
VibeSec 旨在对真实项目发挥作用,而不仅仅是针对合成示例。终端报告会突出显示严重程度分布、风险评分、扫描的文件数、检查的规则、最脆弱的文件,以及带有修复指导的分组发现结果。
## 当前版本
**最新版本:** `0.7.0`
当前版本的亮点:
- 24 条已注册的漏洞规则
- 179 个自动化测试
- 使用 `ThreadPoolExecutor` 进行并行文件扫描
- 丰富的终端进度显示和分组发现结果
- 风险评分:`CRITICAL x 10 + HIGH x 5 + MEDIUM x 2 + LOW x 1`
- 用于 GitHub 代码扫描的 SARIF 输出
- 独立的 HTML 报告
- 带有大小验证的 GitHub 仓库 URL 扫描
- 符号链接保护和路径包含检查
- 最大 10 MB 文件大小限制
- 使用 magic bytes 进行二进制文件检测
- `.vibesecignore` 和 `vibesec.toml` 配置
- 批量和缓存的 npm registry 检查
- 针对 SQL、命令注入、路径遍历和 SSRF 接收器的 Python 污点分析
- 用于请求数据流的基础 JavaScript 污点跟踪回退
## 安装
```
pip install vibesec
```
用于本地开发:
```
git clone https://github.com/AyushkhatiDev/vibesec
cd vibesec
python -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
pytest tests/ -v
```
## 用法
扫描本地项目:
```
vibesec scan ./my-project
```
扫描公共 GitHub 仓库:
```
vibesec scan https://github.com/owner/repo
```
按严重程度过滤:
```
vibesec scan ./my-project --severity critical
```
忽略特定规则:
```
vibesec scan ./my-project --ignore rls,cors,packages
```
使用 Groq 生成 AI 驱动的修复建议:
```
export GROQ_API_KEY="..."
vibesec scan ./my-project --fix
```
输出 JSON:
```
vibesec scan ./my-project --output json
```
写入 SARIF:
```
vibesec scan ./my-project --output sarif --sarif-output vibesec-results.sarif
```
写入独立的 HTML 报告:
```
vibesec scan ./my-project --output html --html-output report.html
```
检查已安装的版本:
```
vibesec --version
```
## 安全覆盖范围
VibeSec 目前提供 **24 条安全规则**。
### 核心 AI 代码规则
| 规则 | 严重程度 | 捕获内容 |
|---|---:|---|
| Hardcoded Secret | CRITICAL | 源代码中的 API key、密码、token、服务密钥和数据库 URL |
| Supabase RLS Disabled | CRITICAL | 显式的 `DISABLE ROW LEVEL SECURITY` 语句 |
| SQL Injection Risk | CRITICAL | 到达 SQL 接收器的受污染 Python 请求数据 |
| Missing Route Authentication | HIGH | 没有可见 auth 中间件的敏感/管理员路由 |
| Hallucinated Package | HIGH | 已知不存在的 npm 包名称和可疑的注册表缺失 |
| Source Map Exposure | HIGH | 生产环境 source map 暴露和提交的 `.map` 文件 |
| Unsafe JWT Handling | HIGH | `none` 算法、禁用的验证、浏览器存储的 token |
| Client-Side Role Trust | HIGH | 基于 localStorage 或 URL 参数的管理员/角色检查 |
| Insecure Flask Configuration | HIGH | `DEBUG=True`、硬编码的 `SECRET_KEY`、薄弱的回退密钥 |
| Credentials in Environment File | HIGH | 提交在 `.env` 文件中的真实凭证 |
| Unsafe HTML Injection | MEDIUM | `dangerouslySetInnerHTML`、动态 `innerHTML`、`eval` |
| Missing Webhook Verification | MEDIUM | 没有签名检查的 Stripe/GitHub webhook |
| Permissive CORS Configuration | MEDIUM | 通配符 CORS 和凭证配置错误 |
### 深度应用安全规则
| 规则 | 严重程度 | 捕获内容 |
|---|---:|---|
| Command Injection | CRITICAL | 动态 `os.system`、`eval`、`exec`、subprocess shell 用法、Node `child_process` 接收器 |
| Path Traversal | HIGH | 流入 `open`、`send_file`、`Path`、`fs.readFile`、`res.sendFile` 的用户可控路径 |
| Server-Side Request Forgery | HIGH | 到达 `requests`、`httpx`、`urllib`、`fetch`、`axios` 的用户可控 URL |
| Insecure Deserialization | CRITICAL/HIGH | `pickle`、`marshal`、不安全的 `yaml.load`、`shelve.open` |
| Server-Side Template Injection | CRITICAL | 动态 `render_template_string`、Jinja/Mako 模板构建 |
| Weak Cryptography | HIGH/MEDIUM/LOW | MD5/SHA1、弱密码、用于 token 的不安全随机性 |
| Open Redirect | MEDIUM | 请求可控的重定向目标 |
### 平台和供应链规则
| 规则 | 严重程度 | 捕获内容 |
|---|---:|---|
| Node.js Security Misconfiguration | MEDIUM | 缺失 Helmet、不安全的 cookie、原型污染模式、缺失速率限制 |
| Next.js Security Issue | HIGH/MEDIUM | 未经身份验证的 API 路由、薄弱的 server action、公开的 secret 环境变量、缺失 headers |
| Docker Security Issue | HIGH/MEDIUM | Root 容器、secret ENV/ARG、`latest` 标签、`curl | bash`、暴露的数据库端口 |
| GitHub Actions Security Issue | HIGH/MEDIUM | 未固定的 action、`pull_request_target` 风险、secret 日志记录、shell 注入 |
## 污点分析
VibeSec 包含一个过程内 Python 污点引擎。它通过赋值、字符串格式化、f-string、推导式、三元表达式、海象表达式和常见转换来跟踪用户可控的输入。
Source 包括:
- Flask 请求数据:`request.args`、`request.form`、`request.json`、cookie、header、文件
- Django 请求数据:`request.GET`、`request.POST`、`request.FILES`、`request.COOKIES`
- FastAPI 辅助工具:`Query`、`Path`、`Body`、`Header`、`Cookie`
- CLI 和环境 source:`input`、`sys.argv`、`os.getenv`
- WebSocket 接收调用
Sink 包括:
- SQL 执行:`cursor.execute`、`db.execute`、`session.execute`、SQLAlchemy `text`
- 命令执行:`os.system`、`subprocess.run`、`os.popen`、`eval`、`exec`
- 文件系统路径:`open`、`pathlib.Path`、`send_file`、`os.path.join`
- SSRF 目标:`requests`、`urllib`、`httpx`、`fetch`、`axios`
示例:
```
user_id = request.args.get("id")
query = f"SELECT * FROM users WHERE id = {user_id}"
cursor.execute(query)
```
VibeSec 会对此发出警告,因为请求可控的数据到达了 SQL sink。
```
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
```
VibeSec 会忽略此项,因为它已参数化。
## 配置
VibeSec 同时支持 `.vibesecignore` 和 `vibesec.toml`。
`vibesec.toml` 示例:
```
[vibesec]
ignore = ["rls", "cors"]
severity_threshold = "medium"
max_file_size = 10485760
exclude_paths = ["tests/", "node_modules/", "dist/"]
exclude_rules = ["packages"]
[vibesec.rules]
secrets.skip_test_files = true
flask_secrets.skip_test_files = true
```
在适用的地方,CLI 标志会覆盖配置值:
```
vibesec scan . --ignore rls --severity high
```
## 报告
### 终端
默认的终端报告会按文件对发现的问题进行分组,并包括:
- 严重程度计数
- 风险评分
- 已扫描文件
- 扫描持续时间
- 已检查规则总数
- 最脆弱的文件
- 每项发现问题的修复提示
### JSON
```
vibesec scan . --output json
```
### SARIF
```
vibesec scan . --output sarif --sarif-output vibesec-results.sarif
```
SARIF 可以上传到 GitHub 代码扫描,以便发现的问题显示在 Security 标签页和 pull request 批注中。
### HTML
```
vibesec scan . --output html --html-output report.html
```
HTML 报告是独立的,包含一个摘要表、按文件分组的发现结果以及代码片段。
## GitHub Actions
```
name: VibeSec
on:
push:
pull_request:
permissions:
contents: read
security-events: write
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install VibeSec
run: pip install vibesec
- name: Run scan
run: vibesec scan . --output sarif --sarif-output vibesec-results.sarif
continue-on-error: true
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v4
if: always()
with:
sarif_file: vibesec-results.sarif
category: vibesec
```
## 工程笔记
VibeSec 刻意保持轻量化:
- 规则是具有稳定发现模式(finding schema)的纯 Python 函数。
- 在需要精确度的地方,Python 检查使用 AST 分析。
- 当可用时,JavaScript/TypeScript 分析使用 Node 解析器,并回退到 regex/污点启发式方法。
- 文件遍历已缓存,并避免符号链接、超大文件、二进制文件、构建目录和依赖目录。
- npm registry 检查是批量、缓存、有超时限制且有上限的,以避免扫描缓慢。
- GitHub 仓库扫描会验证 `owner/repo`,通过 GitHub API 检查仓库大小,并拒绝大于 500 MB 的仓库。
发现模式:
```
{
"rule": "Rule Name",
"severity": "CRITICAL|HIGH|MEDIUM|LOW",
"file": file_path,
"line": line_number,
"message": "What was found",
"fix_hint": "How to fix it",
"code_snippet": "offending code",
}
```
## 测试
```
pytest tests/ -v
```
当前测试覆盖率:
- 179 个通过的测试
- 针对每条 v0.7.0 新规则的正面和负面测试
- 针对 `--ignore`、`--version` 和缺失路径的 CLI 测试
- 针对并行扫描的扫描器测试
- 针对 HTML 输出的报告器测试
- 针对符号链接保护、二进制检测、文件大小限制和 GitHub URL 验证的工具测试
## 路线图
已完成:
- [x] 覆盖应用、平台、供应链和 CI/CD 风险的 24 条安全规则
- [x] 基于 AST 的 Python 污点分析
- [x] 基础 JavaScript 污点分析回退
- [x] SARIF、JSON、终端和 HTML 报告
- [x] GitHub URL 扫描
- [x] 配置文件支持
- [x] 并行扫描
- [x] 符号链接、路径包含、二进制文件和文件大小保护
- [x] CI 测试管道
接下来:
- [ ] 针对系统语言 C、C++、Rust 和 Zig 的文件发现
- [ ] 针对不安全 libc 调用和内存管理模式的 C/C++ 安全规则
- [ ] 针对 `unsafe`、原始指针、FFI、手动 `Send`/`Sync` 以及易导致崩溃的 `unwrap`/`expect` 的 Rust 规则
- [ ] 针对 allocator 误用、易导致整数溢出的操作以及 `unreachable` 的 Zig 规则
- [ ] 使用 tree-sitter、clang、rust-analyzer 或 Zig 编译器 API 进行基于解析器的系统语言研究
- [ ] VS Code 扩展
- [ ] 用于托管扫描的 Web 仪表板
## 项目愿景
VibeSec 并不试图取代所有的安全扫描器。它专注于一个具体且不断增长的问题:**AI 辅助开发创建可运行软件的速度,快于团队安全审查它的速度。**
该项目旨在做到:
- 足够快,可在本地开发期间运行
- 足够精确,可避免嘈杂的报告
- 足够实用,能解释如何修复每个问题
- 通过 SARIF 和 JSON 对 CI 友好
-简单的 Python 规则模块实现可扩展
## 作者
由 [Ayush Khati](https://github.com/AyushkhatiDev) 构建。
VibeSec 最初是一个针对 AI 生成的 Web 应用程序漏洞的专用扫描器,后来发展成为一个更广泛的静态分析项目,涵盖应用程序安全、部署安全、供应链风险和 CI/CD 配置错误。
如果您发现 bug 或需要新规则,请提交 issue:
https://github.com/AyushkhatiDev/vibesec/issues
## 许可证
MIT。详见 [LICENSE](LICENSE)。
查看扫描摘要输出
标签:AI代码安全, DOE合作, Python, Sysdig, 图数据库, 无后门, 逆向工具, 静态代码扫描