glferreira-devsecops/cascavel-secret-scanner
GitHub: glferreira-devsecops/cascavel-secret-scanner
Cascavel Secret Scanner 是一款在 CI/CD 中自动检测硬编码密钥的轻量级开源工具。
Stars: 1 | Forks: 0
🐍 Cascavel Secret Scanner
专为 CI/CD pipeline 设计的企业级密钥检测工具。
只需一行代码,零配置,即可阻止硬编码凭证进入生产环境。
快速开始 • 为何选择 Cascavel? • 检测模式 • 高级用法 • 输入 • 输出
## 🚀 快速开始 在任何 workflow 中添加一行代码即可。就这么简单。 ``` name: Security on: [push, pull_request] jobs: secrets: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: glferreira-devsecops/cascavel-secret-scanner@v1 ``` ## 💡 为何选择 Cascavel? | | Cascavel | 其他工具 | |:--|:---------|:------------| | ⚡ **配置时间** | 1 行代码,零配置 | 需配置文件、Docker 镜像、API key | | 🎯 **检测模式** | 40+ 精选规则,按严重程度分类 | 通常包含数百条嘈杂的规则 | | 🔒 **SARIF** | 原生输出 → GitHub Security 标签页 | 通常需要 adapter | | 📊 **步骤总结** | workflow 运行中内置表格展示 | 需手动解析 | | 🔐 **脱敏处理** | 日志中自动打码 | 常导致密钥本身泄露 | | 📁 **语言支持** | 30+ 种文件类型,覆盖所有主流 ecosystem | 通常仅支持特定语言 | | 🚫 **基线** | 抑制已知的检测发现 | 支持有限或不支持 | | 🕵️ **Git 历史** | 可选的深度扫描已删除文件 | 需要使用单独的工具 | | 💰 **成本** | 免费且开源 | 免费版限制或需付费 | ## 🔍 检测模式 ### 🔴 严重 — 凭证直接暴露 | ID | 描述 | 示例模式 | |:---|:------------|:----------------| | `aws-access-key` | AWS Access Key ID | `AKIA...` | | `aws-secret-key` | AWS Secret Access Key | `aws_secret_access_key = "..."` | | `gcp-service-account` | GCP Service Account Key | `"type": "service_account"` | | `azure-storage-key` | Azure Storage Account Key | `AccountKey=...` | | `github-token` | GitHub PAT / Fine-grained Token | `ghp_...`, `github_pat_...` | | `gitlab-token` | GitLab Personal Access Token | `glpat-...` | | `slack-bot-token` | Slack Bot / User Token | `xoxb-...`, `xoxp-...` | | `stripe-live-secret` | Stripe Live Secret Key | `sk_live_...` | | `stripe-live-restricted` | Stripe Restricted Key | `rk_live_...` | | `paypal-access-token` | PayPal Access Token | `access_token$production$...` | | `square-access-token` | Square Access Token | `sq0atp-...` | | `private-key-*` | RSA, EC, DSA, OpenSSH, PGP Keys | `-----BEGIN ... PRIVATE KEY-----` | ### 🟠 高危 — API key 与数据库凭证 | ID | 描述 | 示例模式 | |:---|:------------|:----------------| | `sendgrid-api-key` | SendGrid | `SG....` | | `twilio-api-key` | Twilio | `SK` + 32 hex chars | | `telegram-bot-token` | Telegram Bot | `123456789:ABC-...` | | `firebase-api-key` | Firebase | `AIza...` | | `jwt-token` | 硬编码 JWT | `eyJhbGci...` | | `slack-webhook` | Slack Incoming Webhook | `hooks.slack.com/services/...` | | `discord-webhook` | Discord Webhook | `discord.com/api/webhooks/...` | | `supabase-service-role` | Supabase Service Role Key | 带有特定前缀的 JWT | | `database-url` | 数据库连接字符串 | `postgres://user:pass@host` | | `generic-password` | 硬编码密码赋值 | `password = "..."` | | `generic-api-key` | 硬编码 API key 赋值 | `api_key = "..."` | ### 🟡 中等 & 🔵 低危 | ID | 描述 | |:---|:------------| | `base64-secret` | Base64 编码的凭证值 | | `hex-secret` | 密钥上下文中的长 hex 字符串 | | `ip-with-port` | 硬编码的带端口内部 IP 地址 | | `todo-secret` | 涉及密钥的 TODO/FIXME 注释 | ## 🔧 高级用法 ### 将结果上传至 GitHub Security 标签页 ``` - uses: glferreira-devsecops/cascavel-secret-scanner@v1 id: scan with: fail-on-findings: 'false' - uses: github/codeql-action/upload-sarif@v3 if: always() with: sarif_file: ${{ steps.scan.outputs.sarif-path }} ``` ### 仅报告严重和高危级别 ``` - uses: glferreira-devsecops/cascavel-secret-scanner@v1 with: severity: 'high' fail-on-findings: 'true' ``` ### 使用自定义排除规则进行扫描 ``` - uses: glferreira-devsecops/cascavel-secret-scanner@v1 with: exclude-paths: '.git,node_modules,vendor,dist,coverage,*.test.js,*.spec.ts,__mocks__' max-file-size: '256' ``` ### 包含 Git 历史的深度扫描 ``` - uses: glferreira-devsecops/cascavel-secret-scanner@v1 with: scan-history: 'true' severity: 'critical' ``` ### 在后续步骤中使用输出 ``` - uses: glferreira-devsecops/cascavel-secret-scanner@v1 id: scan with: fail-on-findings: 'false' - name: Notify on critical if: steps.scan.outputs.critical-count > 0 run: | echo "🔴 ${{ steps.scan.outputs.critical-count }} critical secrets found!" echo "📄 Full report: ${{ steps.scan.outputs.report-path }}" ``` ### 使用基线抑制已知的检测发现 ``` - uses: glferreira-devsecops/cascavel-secret-scanner@v1 with: baseline-file: '.cascavel-baseline' ``` ## ⚙️ 输入 | 输入 | 描述 | 是否必填 | 默认值 | |:------|:------------|:--------:|:--------| | `path` | 扫描的根路径 | 否 | `.` | | `severity` | 最低严重程度:`low` / `medium` / `high` / `critical` | 否 | `medium` | | `fail-on-findings` | 发现密钥时阻断 pipeline | 否 | `true` | | `exclude-paths` | 以逗号分隔的 glob 排除模式 | 否 | `.git,node_modules,...` | | `sarif-output` | 生成用于 Security 标签页的 SARIF 报告 | 否 | `true` | | `max-file-size` | 跳过大于 N KB 的文件 | 否 | `512` | | `scan-history` | 扫描 Git 历史以查找已删除的密钥 | 否 | `false` | | `baseline-file` | 基线抑制文件路径 | 否 | _(无)_ | | `custom-patterns` | 自定义 patterns JSON 文件路径 | 否 | _(无)_ | ## 📤 输出 | 输出 | 描述 | 示例 | |:-------|:------------|:--------| | `findings-count` | 检测到的密钥总数 | `3` | | `critical-count` | 严重级别的检测结果 | `1` | | `high-count` | 高危级别的检测结果 | `2` | | `sarif-path` | SARIF 报告路径 | `.cascavel/results.sarif` | | `report-path` | JSON 报告路径 | `.cascavel/findings.json` | ## 📊 示例输出 ``` ╔══════════════════════════════════════════════════╗ ║ 🐍 CASCAVEL SECRET SCANNER v1.0.0 ║ ║ Enterprise Security · RET Tecnologia ║ ║ https://rettecnologia.org ║ ╚══════════════════════════════════════════════════╝ 📂 Target: . 🎯 Threshold: medium 🚫 Excludes: 14 patterns 📏 Max size: 512KB ──────────────────────────────────────────────────── 🔴 [CRITICAL] AWS Access Key ID (CWE-798) Found in 1 location(s): └─ src/config.py:42 aws_key = "***REDACTED***" 🟠 [HIGH] Slack Incoming Webhook (CWE-798) Found in 2 location(s): └─ deploy/notify.sh:8 ***REDACTED*** └─ .env.example:15 ***REDACTED*** ──────────────────────────────────────────────────── 📊 SCAN RESULTS ──────────────────────────────────────────────────── 🔴 Critical: 1 🟠 High: 2 🟡 Medium: 0 🔵 Low: 0 ──────────────────────────────────────────────────── 📋 Total: 3 finding(s) ❌ Pipeline blocked: 3 secret(s) detected 🐍 Cascavel Secret Scanner by RET Tecnologia ``` **GitHub Step Summary** 也会自动生成: | 严重程度 | 数量 | |:---------|------:| | 🔴 严重 | 1 | | 🟠 高危 | 2 | | 🟡 中等 | 0 | | 🔵 低危 | 0 | | **总计** | **3** | ## 📁 扫描的文件类型30+ 种语言和配置格式(点击展开)
**语言:** `.py` `.js` `.ts` `.jsx` `.tsx` `.go` `.rs` `.java` `.rb` `.php` `.cs` `.c` `.cpp` `.h` `.kt` `.swift` `.r` `.R` `.jl` `.ex` `.exs` `.sh` `.bash` `.zsh` `.fish` **配置:** `.yml` `.yaml` `.json` `.xml` `.toml` `.cfg` `.conf` `.ini` `.properties` `.env` `.env.*` `.tf` `.hcl` `Dockerfile` **其他:** `.md` `.txt` `.html` `.css` `.sql` `.gradle`由 Gabriel Ferreira 满怀 ❤️ 构建于 RET Tecnologia · 巴西 🇧🇷
标签:CI/CD, DevSecOps, GitHub Actions, StruQ, 上游代理, 代码审计, 安全工具, 密钥检测, 自动笔记