Amal-David/keyleak-detector

GitHub: Amal-David/keyleak-detector

面向现代 Web 应用的运行时密钥泄漏检测工具,通过主动验证而非静态匹配来发现并证明 API 密钥泄漏与 BaaS 配置漏洞。

Stars: 264 | Forks: 30

# KeyLeak 检测器 [![PyPI](https://img.shields.io/pypi/v/keyleak-detector?color=34d399&logo=python&logoColor=white)](https://pypi.org/project/keyleak-detector/) [![GitHub](https://img.shields.io/github/stars/Amal-David/keyleak-detector?style=flat&logo=github)](https://github.com/Amal-David/keyleak-detector) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![GitHub Action](https://img.shields.io/badge/GitHub_Action-available-2088FF?logo=githubactions&logoColor=white)](docs/github-action.md) [![Chrome Extension](https://img.shields.io/badge/Chrome-Extension-4285F4?logo=googlechrome&logoColor=white)](extension/) [![Python](https://img.shields.io/badge/Python-3.12%2B-3776AB?logo=python&logoColor=white)](https://www.python.org/) 面向现代 Web 应用的运行时泄漏检测器。查找暴露的 API 密钥,**验证 BaaS 配置不当**(Supabase RLS,Firebase Security Rules),并捕获 JavaScript bundle 中的机密信息 —— 同时提供用于实时检测的 Chrome 扩展。 ## 与众不同之处 静态扫描器用于查找源代码中的硬编码机密。KeyLeak 专门查找那些只在运行时才会出现的机密 —— 并**证明它们是可以被利用的**。 - **BaaS 漏洞扫描器**:检测压缩 JS bundle 中的 Supabase/Firebase/Appwrite 配置,提取表名,并主动探测是否强制执行了行级安全(Row-Level Security)。如果 RLS 正常工作,Supabase 的 anon key 是无害的。KeyLeak 会测试 RLS 是否确实生效。 - **Chrome 扩展**:在你浏览时实时检测泄漏的密钥。TEST 按钮可验证找到的密钥是否仍然有效(支持 14 家提供商)。JWT 解码器可以揭示可疑的 claims(service_role、admin 标志、过宽的 scope)。 - **全站扫描**:枚举子域名(crt.sh 证书透明度 + DNS,深度扫描会自动安装 **subfinder** —— 版本锁定、可选择关闭 —— 以实现更丰富的发现;如果环境中存在,也会使用 **amass**),抓取该域名的每一个页面并全部进行扫描,报告每个泄漏出现的具体子域名/页面,以及按来源划分的发现明细。只需一条命令(或在 Web UI 中点击一次)即可完成完整的域名审计。仅限授权目标。 - **200+ 第一方域名抑制**:在浏览 Google、AWS、Azure、GitHub、Stripe 等网站时不会出现误报。 ## 安装 ### PyPI(推荐) ``` pip install keyleak-detector keyleak browser-scan https://your-app.vercel.app --html > report.html ``` 或者使用 **uv**(速度更快): ``` uv pip install keyleak-detector # 或者无需安装直接运行: uvx keyleak-detector browser-scan https://your-app.vercel.app --html > report.html ``` ### GitHub Action (CI/CD) 添加到任何仓库以自动扫描预览部署: ``` # .github/workflows/keyleak.yml name: KeyLeak Security Scan on: [deployment_status] jobs: keyleak: if: github.event.deployment_status.state == 'success' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: Amal-David/keyleak-detector@v0.5.0 id: scan with: mode: browser url: ${{ github.event.deployment_status.target_url }} baas-validate: true fail-on: high ``` 适用于 **Vercel**、**Netlify**、**Render**、**Railway** —— 任何生成预览 URL 的地方。有关所有选项、SARIF 上传和仅本地扫描的信息,请参阅 [完整的 GitHub Action 文档](docs/github-action.md)。 ### Chrome 扩展 ``` 1. Open chrome://extensions 2. Enable "Developer mode" 3. Click "Load unpacked" → select the extension/ folder ``` 浏览任何网站。扩展图标会显示发现结果的徽章计数。点击可查看详细信息、实时 TEST 密钥以及查看修复建议。 ### 从源码安装 ``` git clone https://github.com/Amal-David/keyleak-detector.git cd keyleak-detector # 使用 poetry poetry install && poetry run playwright install chromium # 或者使用 uv uv sync && uv run playwright install chromium ``` ## 用法 ``` # 扫描单个页面 keyleak browser-scan https://your-app.vercel.app --html > report.html # 使用 BaaS validation 进行扫描(测试 Supabase RLS、Firebase rules) keyleak browser-scan https://your-app.vercel.app --baas-validate --html > report.html # 全站扫描 — subdomain enumeration(如果已安装则使用 subfinder/amass + crt.sh + DNS)+ 多页面爬取 keyleak site-scan example.com --depth 3 --max-pages 100 --max-subdomains 50 --baas-validate --html > report.html # 深度扫描会在缺少 subfinder 时自动安装它(通过 brew → 指定版本的 `go install`),然后使用它; # 传入 --no-auto-install(或设置 KEYLEAK_NO_AUTO_INSTALL=1)以仅保持在 crt.sh + DNS 模式。 # 如果存在 amass,也会被自动使用。`keyleak doctor` 会报告哪些 enumerators 处于活动状态。 # 扫描本地文件以查找 secrets keyleak local . --fail-on high # 输出格式:--json、--sarif、--markdown、--html ``` ### 通过代理进行私密扫描 使用全局 `--proxy` 标志将扫描的出站流量通过代理路由 (默认关闭)。它覆盖扫描的每一个出站路径 —— crt.sh 子域名查询、Playwright 抓取以及 BaaS 验证探测: ``` # Cloudflare WARP(推荐):一个免费的本地 SOCKS5 代理。 # warp-cli set-mode proxy && warp-cli connect keyleak --proxy warp site-scan example.com # Tor (socks5://127.0.0.1:9050) keyleak --proxy tor site-scan example.com # 任何显式的 proxy URL — http://、https:// 或 socks5:// keyleak --proxy socks5://127.0.0.1:1080 browser-scan https://your-app.vercel.app ``` 注意事项: - `--proxy` 是一个**全局**标志,因此它必须放在子命令**之前** (就像 `--offline` 一样)。 - `socks5://` 代理需要 PySocks (`pip install requests[socks]`);`warp` 和 `tor` 别名使用 SOCKS5。 - **隐私警告:**代理运营者可以查看(并记录)你通过其路由的流量 —— 包括扫描发现的机密信息。建议优先使用可信的本地代理, 例如 Cloudflare WARP 或 Tor,而不是随机的免费公共代理,因为后者构成了 活跃的中间人攻击(Man-in-the-Middle)风险。 - WARP/Tor 是环回代理,因此 `--proxy warp` 可以与 `--offline` 共存。 在 `--offline` 下会拒绝非环回代理。本地的 KeyLeak Web 网桥 永远不会被代理。 ### HTML 报告 `--html` 标志会生成一个自带深色主题的独立漏洞报告: ![KeyLeak BaaS Report](https://static.pigsec.cn/wp-content/uploads/repos/cas/08/08c374a4613e1e9f4a429efb8cc6d6b3bd2c61a565447861246f5ab01cfac402.png) ## 检测内容 | 类别 | 内容 | 方式 | |---|---|---| | **BaaS 配置不当** | 开放的 Supabase 表、缺少 RLS、公开的存储桶、可调用的 RPC | 主动验证 —— 仅使用 anon key 探测 REST API | | **BaaS 提供商** | Supabase, Firebase, Appwrite, PocketBase | 从压缩的 JS bundle 中提取配置 | | **API 密钥** | OpenAI, Anthropic, Gemini, Stripe, GitHub, AWS 等 20 多种 | 正则表达式检测 + 实时 TEST 验证 | | **JWT 分析** | service_role 暴露、admin 标志、过宽的 scope、过长过期时间 | 解码 + claims 分析(无需验证) | | **客户端身份验证** | 浏览器 JS 中的 `isAdmin === true` 检查 | bundle 中的模式检测 | | **写入权限** | 无需身份验证即可接受 INSERT/UPDATE 的表 | `Prefer: tx=rollback` 探测(绝不创建数据) | | **身份验证配置** | 缺少电子邮件确认、暴露的身份验证设置 | Supabase 身份验证 endpoint 探测 | | **供应链** | 恶意 npm 生命周期钩子(下载并执行、base64/PowerShell/Bun stagers),Git-ref/tarball 依赖 —— 包括 `node_modules` 内部 | 结构化清单扫描(Shai-Hulud / Miasma 类) | | **攻击链** | 将各个发现结果关联成真实的攻击路径(例如 anon key + 无 RLS 的表 = 未经身份验证的数据提取) | 基于合并发现结果的关联引擎 | | **CI/CD 加固** | 未锁定的 GitHub Actions / 可复用工作流 / `docker://` 标签,`permissions: write-all`,在 `run:` 中回显的机密 | 工作流文件检测器 | | **本地文件** | `.env`、MCP 配置、CI 工作流、Docker 文件、source map | `keyleak local` 扫描器 | ## Chrome 扩展功能 - **实时 BaaS 检测**:拦截 Supabase/Firebase API 请求并实时探测 RLS - **TEST 按钮**:针对 14 家提供商验证密钥(Gemini, OpenAI, Anthropic, GitHub, Stripe, Groq 等) - **JWT 解码器**:在任何 JWT 上点击 TEST 即可查看带有严重性标志的解码 claims - **发现分组**:多个脚本中的相同密钥 = 一张带有可点击源 URL 的卡片 - **AIza 分类**:区分 Google Maps 密钥(预期内)和 Gemini AI 密钥(已泄漏) - **87 个供应商 CDN 抑制**:不会对 Google Analytics, PostHog, Segment 等产生误报 - **200+ 第一方域名**:Google, Microsoft, AWS, Apple, Meta, Anthropic, Stripe —— 它们自己网站上的自有密钥永远不会被标记 ## v0.6.0 —— 新功能 这是一个专注于安全性和实用性的版本。完整说明请参见 [CHANGELOG.md](CHANGELOG.md)。 - **攻击链关联** —— KeyLeak 现在可以像攻击者一样将发现结果串联起来: 一个已发布的 anon key **+** 一个无需 RLS 即可读取的表将被报告为一条 未经身份验证的数据提取路径,并体现在 JSON/Markdown/HTML 报告中。 - **扫描 bundle** —— `keyleak bundles` 和 `--bundle ` 运行命名的检查组 (secrets、baas、authz、recon、deep 等),而不是非此即彼的“全部扫描”。 - **依赖项生命周期钩子扫描器** —— 可捕获 `node_modules` **内部**的恶意 `preinstall`/ `postinstall`/`prepare` 脚本和 git-ref 依赖项(正则表达式包会跳过的 Shai-Hulud / Miasma / Bitwarden-CLI 供应链类别)。 - **GitHub Actions 加固检测器** —— 未锁定的 actions、`write-all`、机密回显。 - **安全加固** —— 修复了主动 BaaS 探测器中的 SSRF 漏洞(页面控制的 URL 可能会到达内部/云元数据主机);重实验证的出口 防护;PII 脱敏现已覆盖**每一个**扫描表面;感知置信度的发布判定。 - **CI** —— 由 `pull_request` 触发、SHA 锁定的工作流,运行测试套件 + 启动门禁。 - **Chrome 扩展 v1.2.0** —— PII 脱敏、JS 库 CVE 检测以及 受 SSRF 防护的远程获取(参见 [CHANGELOG.md](CHANGELOG.md#chrome-extension))。 ## v0.5.0 —— 新功能 - 带有主动验证的 **BaaS 漏洞扫描器**(Supabase, Firebase, Appwrite, PocketBase) - 带有实时检测、TEST 按钮和 JWT 分析的 **Chrome 扩展** - **全站扫描**(`keyleak site-scan` + Web UI 按钮),利用 crt.sh + DNS 子域名枚举、多级抓取以及每个发现结果的页面来源记录 - **HTML 报告**输出(`--html`) - **20 个新的 `baas` 包检测器** - **全面的误报抑制**(200+ 第一方域名、87 个供应商 CDN、云存储 URL、基础设施标头) ## 误报 Chrome 扩展会抑制来自 200+ 第一方域名(Google、AWS、Azure、GitHub、Stripe 等)、87 个供应商 CDN 脚本、云存储签名 URL 和基础设施标头的发现结果。尽管如此,在我们尚未见过的网站上,你可能仍会遇到误报。 **如果你发现误报,请报告。** 请提交一个 issue 并附带: - 发现类型(例如,“GEMINI API KEY”、“SQL INJECTION”) - 来源(例如,“External Script: cdn.example.com/lib.js”) - 为什么是误报(例如,“这是其 CDN 脚本中供应商自有的密钥”) 我们会积极审查报告的误报并添加抑制规则。你使用该扩展浏览的网站越多,抑制效果就越好。 ## The Delta Four 结果 每一次严肃的扫描都应得出四项结论: - `Verdict`:`SAFE TO SHIP`、`REVIEW` 或 `BLOCK SHIP`。 - `Proof`:脱敏的证据、来源、检测器和置信度。 - `Fix`:确切的修复和轮换指南。 - `Re-test`:修复后要运行的命令或配置。 CLI 结果示例: ``` keyleak scan https://preview.example.com BLOCK SHIP: 1 critical, 0 high, 2 medium, 3 low Critical or high-confidence exposures need fixing before release. Re-test: keyleak scan https://preview.example.com ``` ## 检查范围 | 领域 | 状态 | 备注 | |---|---:|---| | 运行时 JS/API 响应机密 | 强 | 浏览器 + 代理捕获可扫描脚本、标头、URL 和响应。 | | AI/LLM 提供商密钥 | 强 | OpenAI, Anthropic, Gemini, OpenRouter, Groq, Hugging Face 等。 | | 云端/SaaS/PAT/Webhook | 强 | AWS, GitHub, Stripe, Slack, SendGrid, PyPI, 数据库 URL, 私钥。 | | 仅授权泄露 | 部分 | 存在已验证的 bearer/cookie 扫描支持;在提供明确的第二用户凭据时可进行双用户对比。 | | SQLi/XSS/身份验证绕过线索 | 可选 | `appsec` 包将这些标记为线索,直到存在漏洞利用验证。 | | IDOR/BOLA 提示 | 已改进 | 标记直接对象引用,并可在两个明确的用户上下文中进行验证。 | | 攻击面 | 部分 | 安全标头、TLS、暴露的文件、管理路径、子域名枚举。 | | 本地配置泄露 | 新增 | `keyleak local` 扫描 `.env`、MCP、CI、Docker、source map 和日志。 | | 正确性/内部整理 | 可选 | `correctness` 和 `housekeeping` 包捕获 N+1、回归测试、off-by-one/日期/配置线索、缺失测试、死代码和过期文档。 | | Source map/调试 bundle | 新增 | 本地扫描器检测 source map 内容和提供商密钥。 | | GraphQL/LLM/代理提示 | 早期 | 本地检测器捕获 GraphQL 内省和提示词注入(prompt-injection)式文本。 | KeyLeak 不是完整的 DAST,不是漏洞利用自动化工具,也不能替代 GitLeaks、TruffleHog、GitHub secret scanning 或 GitGuardian。它是作为它们补充的运行时/浏览器/本地配置层。 立即开始使用 请选择与你工作流匹配的操作界面。 ### 1. 使用 Docker 运行 Web UI 这是在本地无需安装 Python 依赖项即可试用浏览器扫描器的最快方法。 ``` git clone https://github.com/Amal-David/keyleak-detector.git cd keyleak-detector docker compose up -d ``` 打开 `http://localhost:5002`。 使用页面输入框进行基本的运行时扫描。仅在提供一次性测试凭据时才使用已验证扫描弹窗。 ### 2. 在本地运行 Web UI 当你要开发 Flask 应用、扫描器、模板、CSS 或 JavaScript 时,请使用此路径。 ``` poetry install poetry run playwright install chromium poetry run python app.py ``` 打开 `http://localhost:5002`。 如果你不使用 Poetry,请创建一个虚拟环境并在本地安装该包: ``` python3.12 -m venv .venv source .venv/bin/activate pip install -r requirements.txt pip install -e . python -m playwright install chromium python app.py ``` ### 3. 扫描本地文件和配置 在推送或发布前使用 `keyleak local`。它在不启动 Web 应用的情况下扫描本地文件。 ``` poetry install poetry run keyleak local fixtures/vulnerable-demo poetry run keyleak local . --json poetry run keyleak local . --sarif --fail-on high ``` 默认情况下,本地模式包含 `env,mcp,ci,docker,sourcemaps,logs`。 将扫描限制为特定的文件类别: ``` poetry run keyleak local . --include env,mcp,sourcemaps ``` 检测器包控制要查找的故障模式类型。CLI/Web 默认使用 `leak`;扩展默认使用 `leak,appsec,access-control`。 ``` poetry run keyleak local . --packs leak,appsec,access-control --json poetry run keyleak local . --launch-profile full --markdown poetry run keyleak local . --launch-profile ci --fail-on high ``` 退出代码专为自动化设计:`0` 表示通过了选定的阈值,`1` 表示命令失败,`2` 表示发现结果满足了 `--fail-on`。 ### 4. 从 CLI 扫描运行中的 Web 应用 当你有预览 URL、预发布 URL 或本地应用 URL 时,请使用 `keyleak scan`。 CLI 会与本地 KeyLeak Web 扫描器 API 通信,因此请先启动 Web 应用: ``` poetry run python app.py poetry run keyleak scan https://preview.example.com --json poetry run keyleak scan https://preview.example.com --bearer "$TOKEN" --fail-on medium ``` 你也可以将 CLI 指向 Docker Web 扫描器: ``` docker compose up -d poetry run keyleak scan http://host.docker.internal:3000 --server http://127.0.0.1:5002 ``` ### 5. 运行已验证扫描 仅对你拥有或拥有测试权限的系统使用已验证模式。 ``` poetry run keyleak scan https://preview.example.com \ --profile authenticated \ --bearer "$THROWAWAY_TOKEN" ``` 使用 cookie 代替 bearer token: ``` poetry run keyleak scan https://preview.example.com \ --profile authenticated \ --cookie "session=throwaway-session" ``` 当应用同时需要两者时请同时使用: ``` poetry run keyleak scan https://preview.example.com \ --profile authenticated \ --bearer "$THROWAWAY_TOKEN" \ --cookie "session=throwaway-session" ``` 为了进行访问控制检查,请明确提供第二个一次性用户。KeyLeak 会将类似对象的 URL 分别作为用户 A 和用户 B 进行比较,并将相同访问权限的证据标记为已验证: ``` poetry run keyleak scan https://preview.example.com/users/123456 \ --profile authenticated \ --launch-profile bug-bounty \ --packs access-control \ --bearer "$USER_A_TOKEN" \ --bearer-b "$USER_B_TOKEN" ``` ### 6. 为 CI 或审查生成报告 使用 JSON 作为基线,使用 SARIF 用于代码扫描系统,使用 Markdown 用于人工审查。 ``` poetry run keyleak local . --json > keyleak-report.json poetry run keyleak local . --sarif > keyleak.sarif poetry run keyleak local . --markdown > keyleak-report.md ``` 遇到高危或严重发现时失败: ``` poetry run keyleak local . --fail-on high poetry run keyleak scan https://preview.example.com --fail-on critical ``` 使用先前的 JSON 报告或允许列表来抑制已知发现: ``` poetry run keyleak local . --baseline keyleak-report.json poetry run keyleak local . --allowlist keyleak-allowlist.txt ``` 默认的启动配置是 `launch-gate`,它会在遇到高危和严重发现时阻断执行,同时保持较低严重性的加固建议可见以供审查: ``` poetry run keyleak local . --launch-profile launch-gate --fail-on high --json > keyleak-report.json ``` 该仓库包含一个位于 `.github/workflows/keyleak-launch-gate.yml` 的 GitHub Actions 启动门禁,它会运行本地扫描器并上传 JSON 报告 artifact。 ### 7. 与 Claude Code / Codex 配合使用 该仓库附带了一个位于 `.claude/skills/keyleak-verify/SKILL.md` 的智能体技能。在此仓库内的任何 Claude Code 会话中,类似以下的提示词: ``` Is this build safe to ship? Run a launch-gate check on the preview URL https://preview.example.com. Scan the current branch for leaked secrets before I deploy. ``` 会触发该技能。然后,智能体会在 `keyleak local` 和 `keyleak scan` 之间进行选择,挑选正确的 `--launch-profile` 和 `--fail-on` 阈值,解释判定结果 JSON,并回报 `BLOCK SHIP` / `REVIEW` / `SAFE TO SHIP` 以及首要阻断发现和重新测试命令。该技能遵守本地优先的信任模型:它仅扫描你拥有的系统,绝不自动抑制发现,也绝不回显原始的机密值。 ## 安全演示 该仓库包含一个有意留下漏洞的本地测试用例: ``` poetry run keyleak local fixtures/vulnerable-demo --markdown ``` 这为贡献者和 Hacker News 读者提供了一种安全的方式来查看 `BLOCK SHIP` 结果,而无需扫描随机系统。 ## Web 扫描器 基本扫描: 1. 通过 mitmproxy 在无头 Chromium 中加载目标。 2. 捕获 URL、标头、响应、内联脚本和 DOM 配置数据。 3. 应用自定义和衍生自 GitLeaks 的机密模式。 4. 对暴露的文件、安全标头、管理路径、TLS 和子域名运行攻击面检查。 5. 返回判定结果、摘要、发现、证据、修复指南和重新测试命令。 已验证扫描: 1. 向浏览器上下文添加一次性 bearer token 和/或 cookie。 2. 扫描已验证的页面和流量。 3. 对直接对象引用应用尽力而为的访问控制启发式方法。 请仅使用一次性凭据。 ## Chrome 扩展 `extension/` 文件夹包含一个实验性的本地 Chrome 扩展,它会在你浏览时被动监控页面。 它会扫描: - 请求和响应标头 - URL 和查询参数 - fetch/XHR 响应体 - 内联脚本 - 数据属性和页面配置 ### 在 Chrome 中加载 该扩展尚未发布到 Chrome 网上应用店。请从该仓库加载: 1. 克隆或拉取最新的 `main` 分支。 2. 在 Chrome 中打开 `chrome://extensions`。 3. 启用 `Developer mode`。 4. 点击 `Load unpacked`。 5. 选择 `extension/` 文件夹,而不是仓库根目录。 6. 从 Chrome 工具栏扩展菜单中固定 `KeyLeak Detector`。 7. 浏览你拥有或拥有测试权限的应用。 8. 点击 KeyLeak 工具栏图标以查看当前标签页的发现结果。 需要选择的确切文件夹是: ``` keyleak-detector/extension ``` ### 使用弹窗 弹窗显示: - 当前标签页上发现结果的徽章计数 - 启动判定:`SAFE TO SHIP`、`REVIEW` 或 `BLOCK SHIP` - `CRIT`、`HIGH`、`MED` 和 `LOW` 的严重性过滤器 - 标头、fetch/XHR 正文、外部脚本、source map、存储、WebSocket/SSE 消息、数据属性和 meta 标签的扫描活动统计 - 脱敏的证据、检测器 ID、置信度、验证状态和修复指南 - 用于脱敏 JSON 和 Markdown 的报告复制操作 - 通过稳定的发现 ID 对已知的启动门禁噪声进行逐项抑制 - 一个 `RUN FULL SCAN` 操作,该操作会调用位于 `http://127.0.0.1:5002` 的本地 KeyLeak Web 扫描器,且不会转发浏览器 cookie 或 bearer token - 一个 `CLEAR` 按钮用于重置当前标签页的发现结果 ### 使用 DevTools 面板 在页面上打开 Chrome DevTools,然后选择 `Secrets` 面板。它会显示更宽泛的启动门禁表格,并在面板打开时启用 DevTools 网络正文捕获,从而提高了对解析器加载的 bundle 和 source map 的覆盖率。 ### Learn 和 Reference 选项卡 弹窗和 DevTools 面板都包含 `Findings` 选项卡和 `Reference` 选项卡: - 在任何发现结果上点击 `LEARN` 会内联展开一个面板,解释检测器是什么、为什么重要、典型的攻击场景、修复方法以及外部参考资料(OWASP、CWE、供应商文档)。 - 切换到 `Reference` 可按包(`leak`、`appsec`、`access-control`、`correctness`、`housekeeping`)分组浏览每个检测器。搜索框可按检测器 ID、描述、修复方法或类别进行过滤。即使没有任何发现,也可将其作为词汇表使用。 检测器教育内容源自 `keyleak/detectors.py`(`description`、`remediation`、`references`、可选的 `attack_scenario`),并由 `scripts/generate_extension_patterns.py` 重新生成到 `extension/lib/detector-info.js` 中。要添加或改进说明,请编辑检测器并重新运行该脚本。 ### 扩展权限 该扩展请求 `webRequest`、`storage`、`activeTab`、`tabs` 和 `` 权限,因为它需要在本地观察请求、标头、页面内容和 fetch/XHR 响应。 将其用于开发、预发布、漏洞赏金范围或自有系统。在浏览不相关的敏感网站时将其禁用。在敏感浏览会话中使用之前,请参见 [docs/SECURITY_MODEL.md](docs/SECURITY_MODEL.md)。 ## 报告 CLI 输出格式: ``` poetry run keyleak local . --json poetry run keyleak local . --markdown poetry run keyleak local . --sarif poetry run keyleak scan https://preview.example.com --baseline keyleak-baseline.json --fail-on high ``` 每个标准化发现包括: - `id` - `type` - `severity` - `confidence` - `detector_id` - `category` - `source` - `evidence` - `redacted_value` - `risk_reason` - `remediation` - `references` - `validation_status` 报告还包括 `packs` 和 `pack_summary`,以便 Web、CLI、CI 和扩展导出可以按热力图类别对发现进行分组。 基线和允许列表被刻意设计得很简单。基线可以是先前的 KeyLeak JSON 报告;这些发现的 ID/签名会被抑制,以便 CI 仅在出现新发现时失败。允许列表可以是 JSON(`ids`、`detector_ids`、`types`、`source_contains`),也可以是一个行文件,使用诸如 `id:finding_...`、`detector:local:openai_api_key`、`type:source_map_reference` 或 `source:fixtures/vulnerable-demo` 等条目。 ## 安全模型 - 本地优先:扫描在你自己的机器或自托管的 Docker 容器中运行。 - 不需要上传托管的凭据。 - 默认情况下,在标准化报告中对值进行脱敏。 - 已验证的扫描应使用一次性测试凭据。 - 仅扫描你拥有或拥有明确测试权限的系统。 详情和限制请阅读 [docs/SECURITY_MODEL.md](docs/SECURITY_MODEL.md)。 ## 贡献 非常欢迎有价值的 PR。最佳贡献方向是: - 添加带有测试用例的提供商模式 - 添加安全且带有漏洞的测试用例 - 改进误报处理 - 添加修复手册 - 改进 Chrome 扩展的 UX 或测试 - 添加报告导出器 - 改进 CLI 配置和 CI 行为 - 添加 MCP/agent/LLM 泄漏检测器 - 为正确性和日常维护线索添加检测器包测试用例和低噪声验证器 从 [CONTRIBUTING.md](CONTRIBUTING.md) 和 [docs/DETECTOR_AUTHORING.md](docs/DETECTOR_AUTHORING.md) 开始。有关运行扫描(设置、选择命令和筛选输出)的端到端操作手册,请参见 [docs/AGENT_SCAN_HOWTO.md](docs/AGENT_SCAN_HOWTO.md)。 ## 路线图 - 用于 Web UI、CLI 和扩展的共享扫描器核心。 - 更多检测器测试用例和报告测试。 - 除了线索检测之外,更多经过验证的 appsec 检查。 - GraphQL、OAuth/OIDC、CORS、source map 和代理 Web 安全检测器。 ## 负责任的使用 仅扫描你拥有或拥有书面测试权限的系统。未经授权的扫描可能是非法的。请安全处理发现结果,立即轮换暴露的凭据,并通过负责任的披露途径报告漏洞。 ## 致谢 - [GitLeaks](https://github.com/gitleaks/gitleaks) 提供了 KeyLeak 导入的行业标准机密扫描规则。 - [Keyleaksecret](https://github.com/0xSojalSec/Keyleaksecret) 提供了额外的模式灵感。 ## 许可证 MIT。详见 [LICENSE](LICENSE)。
标签:LNA, Python, StruQ, Web安全, 文档结构分析, 无后门, 特征检测, 蓝队分析, 逆向工具