ul0gic/corrode

GitHub: ul0gic/corrode

基于 Rust 和无头 Chromium 的被动式 Web 安全扫描器,通过深度分析前端代码和浏览器运行时来发现暴露的凭据、敏感信息及已知框架漏洞。

Stars: 4 | Forks: 1

# Corrode **用于从 Web 应用程序中提取敏感信息、凭据和安全相关数据的被动侦察工具** 基于 Rust 和 chromiumoxide 构建,可实现快速的无头扫描。Corrode 仅执行被动分析——不进行任何主动利用或模糊测试。利用其输出结果来指导手动渗透测试和安全评估。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/e7166ff034210549.svg)](https://github.com/ul0gic/corrode/actions/workflows/ci.yml) [![crates.io](https://img.shields.io/crates/v/corrode-scanner.svg)](https://crates.io/crates/corrode-scanner) [![Downloads](https://img.shields.io/crates/d/corrode-scanner.svg)](https://crates.io/crates/corrode-scanner) [![Rust](https://img.shields.io/badge/rust-1.70%2B-orange.svg)](https://www.rust-lang.org/) [![License: AGPL v3](https://img.shields.io/badge/license-AGPL--3.0-blue.svg)](LICENSE) ## 项目结构 ``` src/ ├── api/ # API endpoint discovery (passive extraction from JS) ├── cli.rs # CLI definitions ├── config.rs # Config normalization and config file loading ├── detectors/ │ ├── collectors/ # Page data extraction │ │ ├── ast.rs # SWC-based JavaScript AST analysis │ │ ├── dom.rs # DOM analysis: forms, hidden inputs, cookies, storage │ │ └── javascript.rs # Script extraction, window objects, version extraction │ ├── secrets/ # Credential detection engine │ │ ├── jwt.rs # JWT decoding and role classification │ │ └── patterns/ # 45+ categorized regex patterns (auth, cloud, ai, │ │ # payment, communication, monitoring, collaboration, │ │ # vcs, database, infrastructure) │ ├── security/ # Security analysis │ │ └── mod.rs # Cookie, header, CORS, mixed content checks │ ├── technologies/ # Technology fingerprinting (4 signal sources) │ │ ├── headers.rs # HTTP response header signatures │ │ ├── meta.rs # HTML meta tag generators │ │ ├── runtime.rs # Window object detection │ │ └── scripts.rs # Script URLs + network request patterns │ └── vulnerabilities/ # Per-framework CVE detection │ ├── nextjs.rs # 5 Next.js CVEs │ └── react.rs # 4 React Server Components CVEs ├── network/ # Network monitor ├── reporting/ │ └── markdown/ # Section-based Markdown report: summary, findings, │ # security, network, technologies, appendix ├── scanner/ │ ├── chrome.rs # Chrome binary resolution │ └── workflow.rs # Browser orchestration and scan workflow ├── types.rs # Shared data structures └── main.rs # Entry point fixtures/ # Static fixture pages for local testing corrode-output/ # Default output directory (per scan) examples/ # Example configuration files ``` ## 架构 ``` graph TD A[URL / URL File] --> B[Headless Chrome/Chromium] B --> C[Network Monitor] B --> D[DOM/Storage Extractor] B --> E[Script + AST Scanner] E --> G[Secret Scanner] D --> H[Tech Fingerprinter] C --> I[Security Analysis] E --> J[CVE Detector] G --> Results[Reporting JSON + MD] C --> Results D --> Results H --> Results I --> Results J --> Results classDef purple fill:#e9d5ff,stroke:#7c3aed,stroke-width:2px,color:#000 class A,B,C,D,E,F,G,H,I,J,Results purple ``` ## 功能特性 ### 核心扫描能力 - **快速无头扫描** - 优化的 Chromium 工作流,实现低延迟扫描 - **深度分析** - 提取并扫描 HTML、JavaScript 打包文件、内联脚本和外部资源 - **网络监控** - 跟踪所有 HTTP 请求、API 调用和第三方域 - **模式匹配** - 跨 10 个服务类别检测 45 种以上类型的敏感信息和凭据 - **全面报告** - 为每个站点生成 JSON 结果和详细的 Markdown 报告 - **多 URL 批量扫描** - 使用 `--file targets.txt` 从文件中扫描一系列目标 - **配置文件支持** - 通过 `.corrode.toml` 进行持久化设置和自定义模式 ### 高级分析 - **API Endpoint 发现** - 从 JavaScript 中提取 API endpoint 用于手动测试 - **CVE 检测** - 通过版本指纹检测 React 和 Next.js 漏洞(9 个 CVE) - **技术栈检测** - 跨运行时、标头、meta 标签和网络 URL 识别 60 多种框架、服务器和服务 - **版本提取** - 提取 React 和 Next.js 版本以进行 CVE 关联 - **DOM 分析** - 分析表单、隐藏输入、iframe、meta 标签和数据属性 - **Cookie 安全分析** - 检查不安全的 Cookie 配置 - **Window 对象检查** - 从 17 个 window 全局变量中提取敏感数据(`__NEXT_DATA__`、`__APOLLO_STATE__`、`__remixContext` 等) - **环境变量检测** - 标记暴露的 `REACT_APP_*`、`NEXT_PUBLIC_*` 和 `VITE_*` 变量 - **Debug 模式检测** - 识别生产环境中的 React 开发构建、Vue devtools 和 HMR 信号 - **Source Map 检测** - 通过标头、注释和 CSS 识别暴露的 source map ## 安装 ### 通过 Cargo 安装 ``` cargo install corrode-scanner ``` 本地开发(从源码): ``` git clone https://github.com/ul0gic/corrode.git cd corrode cargo build --release ./target/release/corrode-scanner --url https://example.com ``` ### 系统要求 | 要求 | 详情 | | -------------------- | ------------------------------------------ | | Rust | 1.70+(通过 [rustup.rs](https://rustup.rs) 安装)| | Chrome/Chromium | 无头扫描所需(见下文) | | 操作系统 | Linux/macOS | #### 安装 Chrome/Chromium **Linux (Debian/Ubuntu):** ``` wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /usr/share/keyrings/google-chrome.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list sudo apt update && sudo apt install -y google-chrome-stable ``` **macOS:** ``` brew install --cask google-chrome ``` Chrome 会通过 PATH 和常见安装位置自动检测。如有需要,可使用 `--chrome-bin ` 或 `CHROME_BIN` 环境变量进行覆盖。 ## 使用方法 ### 命令行选项 | 标志 / 选项 | 描述 | 默认值 | 必选 | | ---------------------- | ---------------------------------------------------------------- | ---------------- | -------- | | `--url ` | 要扫描的目标 URL | – | --url 或 --file 二选一 | | `--file ` | 包含要扫描的 URL 的文件(每行一个,允许 `#` 注释) | – | --url 或 --file 二选一 | | `-o, --output ` | 输出目录(`//scan_result.json`、`REPORT.md`) | `corrode-output` | | | `--chrome-bin ` | Chrome/Chromium 二进制文件的路径(覆盖自动检测) | 自动检测 | | | `-t, --timeout ` | 页面加载超时时间(秒) | `30` | | | `-v, --verbose` | 详细进度和发现项 | 关闭 | | | `--format ` | 输出格式:`json`、`md` 或 `both` | `md` | | | `--config ` | 自定义 `.corrode.toml` 配置文件的路径 | 自动发现 | | | `--no-config` | 忽略所有配置文件,仅使用内置默认值 | 关闭 | | | `-h, --help` | 显示帮助 | – | | | `-V, --version` | 显示版本 | – | | ### 使用示例 单目标扫描: ``` corrode-scanner --url https://example.com ``` 从文件进行批量扫描: ``` corrode-scanner --file targets.txt ``` 自定义输出目录和超时时间: ``` corrode-scanner --url https://example.com -o recon-$(date +%Y%m%d) -t 60 -v ``` 仅输出 JSON: ``` corrode-scanner --url https://example.com --format json ``` 显式覆盖 Chrome 二进制文件: ``` corrode-scanner --url https://example.com --chrome-bin "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" ``` 使用特定的配置文件: ``` corrode-scanner --url https://example.com --config /path/to/corrode.toml ``` 完全跳过配置文件: ``` corrode-scanner --url https://example.com --no-config ``` ### 批量扫描 (`--file`) 创建一个目标文件,每行一个 URL。空行和以 `#` 开头的行将被忽略: ``` # 生产 targets https://app.example.com https://api.example.com # Staging https://staging.example.com ``` 扫描所有目标: ``` corrode-scanner --file targets.txt -o pentest-$(date +%Y%m%d) ``` Corrode 会按顺序扫描每个 URL,即使遇到失败也会继续执行,并在输出根目录下写入一个 `SUMMARY.md`,其中包含每个目标的发现计数。 ## 配置 Corrode 按以下顺序自动发现 `.corrode.toml`: 1. `--config ` 显式覆盖 2. 当前目录下的 `./corrode.toml` 3. 全局配置 `~/.config/corrode/config.toml` CLI 标志的优先级始终高于配置文件中的值。 有关所有受支持选项的完整记录示例,请参阅 `examples/corrode.toml`。 ### 最小示例: ``` [scan] timeout = 60 verbose = true format = "both" output_dir = "recon-output" [patterns] ignore_patterns = ["internal_ip"] [[patterns.custom_patterns]] name = "My App API Key" pattern = 'myapp_[A-Za-z0-9]{32}' severity = "critical" ``` ## 检测到的敏感信息和凭据 Corrode 检测 45 种以上类型的敏感信息和凭据: ### 认证与授权 - **JWT Tokens** - 包括 Supabase service_role 检测 - **Bearer Tokens** - Authorization 标头 token - **Basic Auth** - Base64 编码的凭据 - **OAuth Client Secrets** - Google OAuth 等 - **Private Keys** - RSA、EC 和 OpenSSH 私钥 ### 云服务商 - **AWS Access Keys** - AKIA 密钥 - **AWS Secret Keys** - Secret 访问密钥 - **AWS ARN** - Amazon 资源名称 - **Firebase API Keys** - AIza 密钥 - **Supabase URLs** - 项目 URL - **Supabase Anon Keys** - 匿名密钥(经典和全新的 sb_publishable_/sb_secret_ 格式) - **DigitalOcean Tokens** - doo/dop/dor_v1_ token - **Vercel Tokens** - vc[pkiar]_ token - **Azure Storage** - 包含账户名和密钥的连接字符串 - **Azure AD Client Secrets** - 以 Q~- 开头的 secret - **Azure SAS Tokens** - 共享访问签名 token - **GCP Service Accounts** - 服务账户电子邮件地址 - **Cloudflare Origin CA** - 以 v1.0- 开头的 Origin CA 密钥 - **Heroku API Keys** - UUID 格式的密钥 ### AI 服务商 - **Anthropic API Keys** - sk-ant-api03- 密钥 - **OpenAI API Keys** - sk- 密钥(与 Anthropic 区分开) ### 支付与金融 - **Stripe Publishable Keys** - pk_live/pk_test 密钥 - **Stripe Secret Keys** - sk_live 密钥 - **Stripe Restricted Keys** - rk_live 密钥 - **Plaid Secrets** - Client ID 和 secret 对 ### 通信与协作 - **Slack Tokens** - xox token - **Slack Webhooks** - Webhook URL - **SendGrid Keys** - SG 密钥 - **Mailgun Keys** - API 密钥 - **Mailchimp Keys** - API 密钥 - **Twilio Keys** - SK 密钥 - **Twilio Account SIDs** - AC 标识符 - **Postmark Tokens** - 服务器和账户 token - **Discord Tokens** - Bot 和 webhook token ### 监控与可观测性 - **Sentry DSN** - 项目 DSN URL - **Sentry Auth Tokens** - 以 sntrys_- 开头的 token - **Datadog API Keys** - 上下文锚定的密钥检测 - **Datadog App Keys** - 上下文锚定的应用密钥检测 - **PagerDuty API Keys** - 上下文锚定的 token 检测 ### 项目管理与协作 - **Linear API Keys** - 以 lin_ 开头的 token - **Notion API Keys** - 以 ntn_ 开头的 token - **Algolia Keys** - 上下文锚定的 API 密钥检测 - **Mapbox Tokens** - pk./sk./tk. JWT 编码的 token ### 版本控制与开发 - **GitHub Tokens** - 个人访问令牌(经典和细粒度) - **GitLab Tokens** - 个人访问令牌 ### 数据库连接字符串 - **PostgreSQL URLs** - 包含凭据的连接字符串 - **MongoDB URLs** - 包含凭据的连接字符串 - **MySQL URLs** - 包含凭据的连接字符串 - **Redis URLs** - 包含凭据的连接字符串 ### 基础设施与环境 - **Internal IPs** - 私有网络 IP 暴露 (10.x, 172.16-31.x, 192.168.x) - **JWT in URLs** - 在查询参数中传递的 token - **Netlify Tokens** - 以 nfp_ 开头的 token - **Exposed Env Vars** - JS 中的 REACT_APP_*、NEXT_PUBLIC_*、VITE_* 引用 ## CVE 检测 Corrode 通过对 JavaScript 打包文件中的版本字符串和 RSC 模块标记进行指纹识别,来检测 React 和 Next.js 漏洞。当确认某个版本存在漏洞时,将按经过研究的严重程度发布发现。当检测到 Next.js 但版本未知时,将发布信息性公告。 | CVE | 组件 | 严重程度 | 受影响版本 | 类型 | |-----|-----------|----------|-------------------|------| | CVE-2025-55182 | React Server Components | 严重 | react-server-dom-webpack < 19.1.0 | RCE | | CVE-2025-55183 | React Server Components | 中等 | 19.0.0 – 19.2.2 | 源代码泄露 | | CVE-2025-55184 / CVE-2025-67779 | React Server Components | 高危 | 19.0.0 – 19.2.2 | DoS | | CVE-2026-23864 | React Server Components | 高危 | 19.0.0 – 19.2.3 | DoS | | CVE-2025-29927 | Next.js Middleware | 严重 | < 15.2.3 | Auth Bypass | | CVE-2024-34351 | Next.js | 高危 | < 14.1.1 | SSRF | | CVE-2024-46982 | Next.js | 高危 | < 14.2.10 | 缓存投毒 | | CVE-2024-51479 | Next.js | 高危 | 14.2.0 – 14.2.15 | Auth Bypass | | CVE-2024-56332 | Next.js | 中等 | < 15.1.7 | DoS | ## 安全问题检测 - **不安全的 Cookie** - 缺少 Secure、HttpOnly 或 SameSite 标记 - **CORS 配置错误** - 在第一方 endpoint 上检测通配符 Access-Control-Allow-Origin(过滤掉静态资源、框架内部和 CDN 资源) - **缺少安全标头** - CSP、HSTS、X-Frame-Options、X-Content-Type-Options - **混合内容** - 在 HTTPS 页面上加载 HTTP 资源 - **Debug 模式检测** - 生产环境中的 React 开发构建、Vue devtools、Angular debug 和 HMR 信号- **Source Map 暴露** - 通过 `sourceMappingURL` 注释、`SourceMap` 标头和 CSS source map 标记暴露的 source map ### 技术栈检测 Corrode 跨 4 个信号源(运行时对象、HTTP 标头、meta 标签、脚本/网络 URL)识别 60 多种技术: **前端框架**:React、Vue.js、Angular、Svelte、Solid.js、Next.js (Pages/App Router)、Nuxt.js、Remix、Gatsby、HTMX、Alpine.js、Livewire **后端/服务器**:Express、Koa、Fastify、Axum、Actix、Warp、Hyper、Werkzeug、Tornado、Puma、Phoenix、Gin、Fiber、Echo、NestJS、AdonisJS、Sails.js **后端即服务**:Supabase、Firebase、Appwrite、AWS Cognito **身份验证**:Auth0、Clerk、Okta、Google Sign-In、Apple Sign-In、Facebook Login、Google OAuth **支付**:Stripe、PayPal、Square、Braintree **分析**:Google Analytics、GTM、Mixpanel、Segment、Amplitude、Heap、Hotjar、HubSpot **CMS**:WordPress、Drupal、Webflow、TYPO3、Craft CMS、Strapi **API 文档**:Swagger UI、ReDoc、RapiDoc **状态管理**:Redux、Zustand、React Query、TanStack Router、Apollo Client、Relay **云/平台**:Vercel、Cloudflare **监控**:Sentry、Intercom ## 免责声明 **重要提示:仅限授权的安全测试** 本工具专为合法的安全研究、渗透测试和漏洞评估而设计。使用 Corrode 即表示您同意以下内容: - 仅扫描您拥有或获得明确书面授权测试的网站和应用程序 - 将本工具用于防御性安全目的、安全研究和授权的渗透测试 - 遵守您所在司法管辖区适用的所有法律法规 - 对于发现的任何漏洞,尊重负责任的披露做法 **我们不对以下情况负责:** - 任何未经授权的扫描或未经许可测试网站的行为 - 因滥用本工具而造成的任何损害、法律后果或违规行为 - 基于扫描结果采取的任何行动 - 扫描结果中的误报或遗漏的漏洞 **法律声明**:未经授权访问计算机系统在美国的《计算机欺诈和滥用法》(CFAA)以及其他国家的类似立法下是违法行为。在测试前务必获得适当的授权。 Corrode 由 **ul0gic** 按“原样”提供,不提供任何保证。您需对如何使用该工具承担全部责任。 ## 许可证 Corrode 基于 **GNU Affero General Public License v3.0 (AGPL-3.0)** 授权。有关完整条款,请参阅 `LICENSE`。要点如下: - 任何修改或衍生作品必须保持 AGPL 许可,并在分发或作为托管服务提供时予以发布。 - 在下游分支和托管部署中保留对 **ul0gic** 和 Corrode 项目的署名。 - 免费用于安全研究、内部评估和社区贡献——商业用户只需遵循相同的 AGPL 要求即可。 - 本软件按“原样”提供,不提供任何保证;仅在您拥有授权的情况下使用。 ## 贡献 在提交 PR 之前,请阅读 `CONTRIBUTING.md`。关键点: - 所有补丁均在 AGPL-3.0 下接受,并且您确认您有权贡献该代码。 - 公开致谢、演讲和演示必须注明 Corrode 和 ul0gic 的贡献。 - 重新分发的构建版本必须保持许可证标头、本免责声明和 README 署名完整无缺。 对贡献有疑问?请提交 issue 或在 GitHub 上联系 @ul0gic。 ## 联系方式 如有问题、议题或安全疑虑,请在 GitHub 上提交 issue。
标签:chromiumoxide, GraphQL安全矩阵, JWT解码, Rust, StruQ, Web安全, 凭证提取, 反取证, 可视化界面, 安全工具库, 安全扫描器, 安全评估, 实时处理, 开源安全工具, 数据泄露, 无头浏览器, 网络安全, 网络流量审计, 蓝队分析, 被动侦察, 逆向工程平台, 通知系统, 隐私保护