momenbasel/vulnhawk

GitHub: momenbasel/vulnhawk

VulnHawk 是一款利用 AI 上下文推理能力,专注于检测业务逻辑缺陷、权限绕过及 IDOR 等传统 SAST 工具遗漏漏洞的静态代码扫描器。

Stars: 39 | Forks: 5

VulnHawk

AI 驱动的代码安全扫描器,能够发现 Semgrep 和 CodeQL 遗漏的漏洞。

PyPI  GitHub Marketplace  License  Stars

快速开始GitHub Action对比支持的语言常见问题

## 问题所在 传统的 SAST 工具依赖于模式匹配和 AST 规则。它们擅长捕捉已知的漏洞模式,但根本上**无法推理意图**。 如果你的 API 有 20 个端点,其中 19 个在对资源执行操作前验证了授权,Semgrep 无法标记出那个没有验证的端点——因为没有可以匹配的模式。漏洞在于*缺失*某种模式。 ## 解决方案 VulnHawk 利用 AI 分析代码,对于它检查的每一段代码,它都会包含代码库中其他地方的**相关代码**作为上下文。这个增强步骤让 AI 能够比较相似组件如何处理安全性——并找出那个处理不一致的组件。

VulnHawk Demo

## 快速开始 ``` pip install vulnhawk ``` 选择后端: ``` # Claude Code CLI - 订阅者免费(推荐) vulnhawk scan ./src -b claude-code # Codex CLI - ChatGPT Pro/Plus 订阅者免费 vulnhawk scan ./src -b codex # Claude API export ANTHROPIC_API_KEY=sk-ant-... vulnhawk scan ./src # OpenAI API vulnhawk scan ./src -b openai -m gpt-4o # Ollama - 免费、本地、完全私有 vulnhawk scan ./src -b ollama -m llama3.1 ``` 无需配置文件。无需编写规则。无需构建数据库。 ## VulnHawk 与其他 SAST 工具的对比 | 功能 | VulnHawk | Semgrep | CodeQL | Snyk Code | Checkmarx | SonarQube | |:---|:---:|:---:|:---:|:---:|:---:|:---:| | 检测方法 | AI 推理 | AST 模式 | QL 数据流 | ML + 规则 | 模式 + 流 | 模式 | | 业务逻辑缺陷 | **是** | 否 | 有限 | 有限 | 有限 | 否 | | 跨文件上下文 | 自动 | 自定义规则 | 自定义查询 | 部分 | 付费版 | 有限 | | 设置复杂度 | 零配置 | 规则配置 | 数据库构建 + QL | 配置文件 | 复杂 | 服务器设置 | | 需要自定义规则 | 否 | 是 (YAML) | 是 (QL) | 部分 | 是 | 是 | | 上下文感知修复 | **是** | 通用 | 通用 | 通用 | 通用 | 通用 | | 本地 / 私有模式 | Ollama | 是 | 是 | 否 | 否 | 自托管 | | CI/CD 集成 | 单行 Action | Action | Action | Action | 插件 | 插件 | | SARIF 输入(链式工具) | **是** | 否 | 否 | 否 | 否 | 否 | | 定价 | 免费\* | 免费 / 付费 | 免费 / 付费 | 免费 / $$$ | $$$$$ | 免费 / $$$ | \*配合 Claude Code、Codex CLI 或 Ollama 使用免费。API 后端每次扫描费用约为 $0.50-$2.00。 ### VulnHawk 能发现其他工具无法发现的问题 | 漏洞类别 | 基于规则的工具为何会漏掉它 | |:---|:---| | N 个端点中有一个缺少授权 | 没有可匹配的模式——漏洞在于*缺失*检查 | | IDOR / BOLA | 需要理解 JWT 中的用户 ID 应与 URL 中的 ID 匹配 | | 支付金额篡改 | 业务逻辑——不应信任来自客户端的金额字段 | | 输入验证不一致 | 5 个处理器进行了清理,第 6 个没有——需要跨文件比较 | | 存储输入的误用 | 输入被安全保存,但在 3 个文件外被 `eval()` 或直接作为原始 SQL 使用 | | 状态更新中的竞态条件 | 并发修改余额且未加锁 | ### 推荐的工具组合 VulnHawk 被设计为一个**互补层**,而非替代品: | 层级 | 工具 | 目的 | |:---|:---|:---| | 1 | **Semgrep** | 对已知的不良模式进行快速、确定性的把关 | | 2 | **CodeQL** | 跨越复杂调用链进行深度污点追踪 | | 3 | **VulnHawk** | 业务逻辑、授权缺口、IDOR 以及规则无法表达的不一致问题 | ## 使用方法 ### 扫描模式 ``` vulnhawk scan ./src # Full scan (default) vulnhawk scan ./src --mode auth # Auth bypass, missing checks, session flaws vulnhawk scan ./src --mode injection # SQLi, command injection, SSTI, XSS vulnhawk scan ./src --mode secrets # Hardcoded keys, tokens, passwords vulnhawk scan ./src --mode config # Debug mode, permissive CORS, insecure cookies vulnhawk scan ./src --mode crypto # Weak hashing, hardcoded keys, bad RNG ``` ### 输出格式 ``` vulnhawk scan ./src -o json -f results.json # JSON vulnhawk scan ./src -o sarif -f results.sarif # SARIF (GitHub Code Scanning) vulnhawk scan ./src -o markdown -f report.md # Markdown report ``` ### 严重程度过滤 ``` vulnhawk scan ./src --severity high # Critical + High only vulnhawk scan ./src --severity info # Everything ``` ### SARIF 输入 - 与其他工具链式组合 将 Semgrep、CodeQL 或任何生成 SARIF 的工具的输出输入到 VulnHawk。它利用这些发现作为额外的上下文来**验证、扩展并串联**它们,从而挖掘更深层的漏洞。 ``` # 先运行 Semgrep,然后用 VulnHawk 丰富 semgrep --config auto ./src -o semgrep.sarif --sarif vulnhawk scan ./src --sarif-input semgrep.sarif ``` 这实现了: - 验证其他工具的发现是真实的还是误报 - 在标记位置附近发现相关漏洞 - 构建连接跨工具发现的多步骤攻击链 - 检查建议的修复是否解决了真正的根本原因 ### 试运行 ``` vulnhawk info ./src # Preview files, chunks, and language breakdown ``` ## GitHub Action VulnHawk 作为**默认分支上的基准扫描**运行,并在**每个 Pull Request 上进行增量扫描**。 ### 推荐设置 ``` name: VulnHawk Security Scan on: push: branches: [main, master] pull_request: permissions: security-events: write contents: read jobs: vulnhawk: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: momenbasel/vulnhawk@main with: target: '.' backend: 'claude-code' claude-code-oauth-token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} severity: 'medium' fail-on-findings: 'true' ``` 发现结果会通过 SARIF 自动上传到 GitHub 的 **Security > Code Scanning** 选项卡。 ### 后端选项
后端配置
Claude Code (免费) ``` backend: 'claude-code' claude-code-oauth-token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} ``` 获取你的 token:`claude config get oauth_token`
Codex (免费) ``` backend: 'codex' ``` 需要在 runner 上执行 `codex login`。
Claude API ``` api-key: ${{ secrets.ANTHROPIC_API_KEY }} ```
OpenAI API ``` backend: 'openai' api-key: ${{ secrets.OPENAI_API_KEY }} ```
### 在 CI 中与 Semgrep 链式组合 ``` steps: - uses: actions/checkout@v4 - name: Semgrep (fast pattern scan) uses: returntocorp/semgrep-action@v1 with: config: auto generateSarif: true - name: VulnHawk (deep AI analysis) uses: momenbasel/vulnhawk@main with: target: '.' backend: 'claude-code' claude-code-oauth-token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} sarif-input: 'semgrep.sarif' ``` ## 支持的语言 | 语言 | 扩展名 | 框架检测 | |:---|:---|:---| | Python | `.py` | Django, Flask, FastAPI | | JavaScript | `.js` `.jsx` | Express, Fastify, Next.js | | TypeScript | `.ts` `.tsx` | Express, NestJS, Fastify | | Go | `.go` | net/http handlers | | Java | `.java` | 类/方法拆分 | | PHP | `.php` | Laravel routes, classes, traits, interfaces | | Ruby | `.rb` `.erb` | Rails routes, classes, modules | ## 工作原理 ``` Codebase ──> Discover ──> Chunk ──> Enrich ──> Analyze ──> Validate ──> Report │ │ │ │ │ Respects Functions Related LLM with Dedup + .gitignore Classes code from security confidence .vulnhawk- Routes same dir + prompts scoring ignore Modules auth patterns ``` **增强**步骤是核心差异点。对于每个代码块,VulnHawk 包含: - 同一目录中的其他函数/路由 - 整个代码库中的 Auth 中间件和守护模式 这为 AI 提供了识别不一致性所需的上下文。 ## 配置 ### .vulnhawkignore 从扫描中排除路径(gitignore 语法): ``` generated/ vendor/ third_party/ *.gen.go ``` ### 环境变量 | 变量 | 描述 | |:---|:---| | `CLAUDE_CODE_OAUTH_TOKEN` | Claude Code CLI 身份验证(订阅用户免费) | | `ANTHROPIC_API_KEY` | Claude API 密钥 | | `OPENAI_API_KEY` | OpenAI API 密钥 | ## 成本 | 后端 | 每次扫描(约 100 个文件) | 要求 | |:---|:---|:---| | **Claude Code CLI** | **免费** | Claude Code Max 或 Team 订阅 | | **Codex CLI** | **免费** | ChatGPT Pro 或 Plus 订阅 | | Claude API | ~$0.50 - $2.00 | Anthropic API 额度 | | OpenAI API | ~$1.00 - $4.00 | OpenAI API 额度 | | **Ollama** | **免费** | 具有 8GB+ VRAM 的本地机器 | ## 常见问题
Claude Code CLI 后端如何实现免费? Claude Code 订阅(Max 每月 $100-$200,或 Team 计划)包含无限的 CLI 使用权限。VulnHawk 在底层调用 `claude --print`,通过你现有的订阅传输分析提示词。无需 API 密钥。无按 Token 计费。
如何获取用于 CI/CD 的 OAuth token? 在本地计算机上运行 `claude config get oauth_token`。将输出作为名为 `CLAUDE_CODE_OAUTH_TOKEN` 的 GitHub Actions Secret 添加。
我应该在每个 PR 上运行,还是仅在 main 分支上运行? 两者皆可。推送到 main 分支的扫描建立你的安全基准并填充 Security 选项卡。PR 扫描在合并前捕获新漏洞。推荐的工作流配置会处理这两种触发器。
我的代码是否会被发送到外部服务? 是的——代码块会被发送到配置的 LLM 提供商(Anthropic 或 OpenAI)。对于完全私密、隔离环境的扫描,请使用完全在本地机器上运行的 **Ollama** 后端。
它会替代 Semgrep 或 CodeQL 吗? 不会。VulnHawk 是一个互补层。Semgrep 和 CodeQL 在各自擅长的领域(模式匹配和污点追踪)表现出色。VulnHawk 能够捕获业务逻辑漏洞、授权缺口以及规则无法表达的不一致问题。将这三者结合使用可获得最强的覆盖能力。
它支持 PHP / Laravel 和 Ruby / Rails 吗? 支持。VulnHawk 包含针对两者的框架感知代码分块功能。它检测 Laravel `Route::get()` 定义、PHP 类/trait/接口、Rails 路由声明(`get`、`post`、`resources`)以及 Ruby 类/模块。它还提取框架特定的导入(`use`、`require`、`include`)。
什么是 SARIF 输入? 你可以将任何其他扫描器(Semgrep、CodeQL、Snyk 等)生成的 SARIF 文件输入给 VulnHawk。VulnHawk 在分析过程中将这些发现作为额外的上下文——验证它们,在附近发现相关问题,并构建连接跨工具发现的多步骤攻击链。
## 贡献 参见 [CONTRIBUTING.md](CONTRIBUTING.md)。 ``` git clone https://github.com/momenbasel/vulnhawk.git cd vulnhawk uv venv .venv && source .venv/bin/activate uv pip install -e ".[dev]" pytest ``` ## 支持本项目 如果 VulnHawk 对你有用,请考虑 [赞助本项目](https://github.com/sponsors/momenbasel) 以支持持续开发。 ## 许可证 VulnHawk 采用 [VulnHawk License](LICENSE),是**源码可用**的。 **对所有人免费**——个人、团队、初创公司和企业可以免费使用 VulnHawk 进行内部安全扫描,前提是通过官方分发渠道安装: - [GitHub Marketplace](https://github.com/marketplace/actions/vulnhawk-security-scan) - [PyPI](https://pypi.org/project/vulnhawk/) - [本仓库](https://github.com/momenbasel/vulnhawk) 你不得出售本软件,不得将其作为竞争性服务提供,也不得将 Fork 作为产品重新分发。Fork 仅允许用于向此仓库提交 Pull Request。完整条款请参阅 [LICENSE](LICENSE)。
标签:AI风险缓解, C2, CMS安全, DevSecOps, GitHub Action, Go, IDOR, JavaScript, OpenVAS, PHP, Python, Ruby, Ruby工具, SAST, TypeScript, 上游代理, 云安全监控, 人工智能, 代码安全, 安全插件, 授权绕过, 无后门, 源码扫描, 漏洞枚举, 用户模式Hook绕过, 盲注攻击, 知识库, 结构化查询, 自动化安全, 逆向工具, 逻辑漏洞, 静态分析