AyushkhatiDev/vibesec

GitHub: AyushkhatiDev/vibesec

一款专为 AI 生成代码设计的命令行安全扫描器,可在发布前快速检测硬编码密钥、注入漏洞和不安全配置等问题。

Stars: 1 | Forks: 0

# VibeSec **在 AI 生成的代码发布之前找出安全漏洞。** [![PyPI version](https://img.shields.io/pypi/v/vibesec.svg)](https://pypi.org/project/vibesec/) [![PyPI downloads](https://static.pepy.tech/badge/vibesec)](https://pepy.tech/project/vibesec) [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/) [![Tests](https://img.shields.io/github/actions/workflow/status/AyushkhatiDev/vibesec/tests.yml?label=tests)](https://github.com/AyushkhatiDev/vibesec/actions) [![Rules](https://img.shields.io/badge/security%20rules-24-blueviolet.svg)](#security-coverage) [![License: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](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 旨在对真实项目发挥作用,而不仅仅是针对合成示例。终端报告会突出显示严重程度分布、风险评分、扫描的文件数、检查的规则、最脆弱的文件,以及带有修复指导的分组发现结果。

VibeSec v0.7.0 terminal scan showing command injection, path traversal, open redirect, and JavaScript path findings in a billing software project

查看扫描摘要输出

VibeSec v0.7.0 terminal scan summary showing severity counts, risk score, files scanned, scan duration, rules checked, and grouped findings

## 当前版本 **最新版本:** `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, 图数据库, 无后门, 逆向工具, 静态代码扫描