Zierax/Grafana-Final-Scanner

GitHub: Zierax/Grafana-Final-Scanner

一款用于全面检测 Grafana 部署漏洞的专用安全扫描工具,集成了 CVE 检查、版本识别和漏洞管理功能。

Stars: 160 | Forks: 39

# GRAFANA FINAL SCANNER 第三版 ## 执行摘要 **Grafana Final Scanner** 是一款专业的安全评估工具,专为全面检测 Grafana 部署中的漏洞而设计。它具有多源版本指纹识别、版本感知的 CVE 检查、配置分析、Grafana 实例自动检测、漏洞管理以及内置 Web 仪表板等功能。 ## 核心功能 ### 核心能力 - **15+ 项 CVE 漏洞检查** - 全面覆盖 2018-2025 年,并支持基于版本的过滤 - **自动搜索** - 自动从包含混合 URL 的文件中检测并扫描 Grafana 实例 - **智能版本检测** - 多端点指纹识别,包含 7+ 种回退策略 - **漏洞管理** - 持久化 JSON 数据库,用于跟踪目标、漏洞和扫描历史 - **目标管理** - 跟踪每个目标的扫描次数、漏洞数量、风险评分 - **内置 Web 仪表板** - 通过 Flask Web UI 查看结果、管理漏洞和跟踪目标 - **误报减少** - 严格的 Content 验证和多指标确认 - **并行扫描** - 可配置线程数,实现高速批量评估 - **认证支持** - 支持 Bearer token 和 Basic auth 用于内部目标 - **多格式报告** - 支持 JSON、HTML 和 CSV 输出,并带有严重性可视化 - **配置分析** - 检查安全头、CORS、匿名访问、插件等 ### v3.0 新增功能 - **自动搜索 (`--auto-search`)** - 通过多方法指纹识别(API、HTML、头部)从混合 URL 列表中检测 Grafana 实例 - **漏洞管理 (`--db`)** - 持久化 JSON 数据库,支持去重、状态跟踪和风险评分 - **Web 仪表板 (`--serve`)** - 内置 Flask Web 服务器,提供仪表板、目标管理和漏洞管理 - **15+ 项 CVE 检查** - 扩展覆盖范围,包括 CVE-2025-4123、CVE-2024-9264、CVE-2024-8118 - **增强的 Grafana 检测** - 5 种检测方法,并带有置信度评分 - **风险评分** - 基于漏洞严重性和数量自动计算 (0-100) - **扫描历史** - 自动跟踪所有扫描执行记录,包含持续时间和发现结果 ## 安装 ### 快速开始 ``` pip install -r requirements.txt git clone https://github.com/Zierax/Grafana-Final-Scanner.git chmod +x scanner.py python scanner.py -u https://grafana.example.com ``` ### 用于 Web 仪表板 ``` pip install flask python scanner.py --serve --db vulndb.json ``` ## 使用方法 ### 基本命令 ``` # 单目标扫描 python scanner.py -u https://grafana.example.com # 批量扫描并生成HTML报告 python scanner.py -f targets.txt -o report # 从混合URL列表自动检测Grafana python scanner.py --auto-search urls.txt -o discovery_report # 详细认证扫描 python scanner.py -u https://grafana.target.com -v --auth-token "glsa_xxx" # 带数据库的漏洞管理 python scanner.py -f targets.txt --db vulndb.json # 启动Web仪表板 python scanner.py --serve --db vulndb.json # 自定义端口上的Web仪表板 python scanner.py --serve 9090 --host 0.0.0.0 --db vulndb.json # 带并行扫描的基本认证 python scanner.py -u https://internal.grafana.local --auth-user admin --auth-pass password # 自签名SSL(内部目标) python scanner.py -u https://grafana.internal.local --no-ssl-verify # 高速批量扫描 python scanner.py -f targets.txt --threads 20 -o scan_results ``` ### 命令行选项 ``` -u, --url Single target URL -f, --file File with target URLs (one per line) -o, --output Save reports (JSON, HTML, CSV auto-generated) -t, --timeout HTTP timeout in seconds (default: 10) --no-ssl-verify Disable SSL certificate verification -v, --verbose Enable detailed logging (shows all checks) --auth-token Bearer token for authenticated scanning --auth-user Username for basic authentication --auth-pass Password for basic authentication --threads Max threads for parallel scanning (default: 5) --db FILE Enable vulnerability management with JSON database --serve [PORT] Start web dashboard (requires Flask, uses --db) --auto-search FILE Auto-detect Grafana instances from file containing mixed URLs --host Host to bind web server to (default: 127.0.0.1) --no-banner Suppress banner display ``` ### 新功能详解 #### 自动搜索 (`--auto-search`) 从包含大量混合 URL 的文件中快速识别 Grafana 实例: ``` python scanner.py --auto-search urls.txt -o discovery_report ``` 自动搜索功能: 1. 从指定文件读取所有 URL 2. 使用多种检测方法(API 健康检查、HTML 分析、端点探测、头部分析)探测每个 URL 3. 为每个潜在的 Grafana 实例分配置信度评分 4. 仅扫描已确认的 Grafana 实例(置信度 >= 30%) 5. 报告结果,并附带置信度评分和检测到的版本 #### 漏洞管理 (`--db`) 在多个扫描会话中持续跟踪目标和漏洞: ``` # 首次扫描-创建数据库 python scanner.py -u https://grafana.example.com --db vulndb.json # 第二次扫描-添加到现有数据库 python scanner.py -u https://grafana2.example.com --db vulndb.json # 查看数据库统计信息 python scanner.py --serve --db vulndb.json ``` 数据库跟踪内容: - 目标 URL 及其版本历史 - 按严重级别分类的漏洞数量 - 风险评分 (0-100) - 扫描历史记录,包含时间戳和持续时间 - 漏洞状态(开放、已修复、误报、已接受) #### Web 仪表板 (`--serve`) 内置 Flask Web 服务器,用于查看和管理扫描结果: ``` # 在默认端口8080上启动仪表板 python scanner.py --serve --db vulndb.json # 在自定义端口和主机上启动 python scanner.py --serve 9090 --host 0.0.0.0 --db vulndb.json ``` 功能特性: - 包含统计概览的仪表板 - 目标管理与风险评分 - 带严重性徽章的漏洞列表 - 一键更新漏洞状态(已修复、误报) - 响应式设计,支持暗色主题 ## 漏洞数据库 ### 严重级别 | CVE | CVSS | 描述 | 受影响版本 | |-----|------|------|------------| | CVE-2025-4123 | 8.2 | 路径遍历 & 开放重定向 XSS | < 12.0.0+security-01 | | CVE-2024-9264 | 9.0+ | DuckDB SQL 注入 (RCE) | 11.0.0-11.2.1 | | CVE-2024-8118 | 9.0+ | OAuth 认证绕过 | 11.0.x-11.2.1 | | CVE-2021-43798 | 7.5 | 目录遍历(文件读取) | 8.0.0-8.3.0 | ### 高级别 | CVE | CVSS | 描述 | 受影响版本 | |-----|------|------|------------| | CVE-2023-50164 | 8.0 | 插件路径遍历 | < 9.2.10, 9.3.x < 9.3.6 | | CVE-2023-1410 | 8.8 | 通过数据源代理进行 SSRF | 8.0.0-9.2.17, 9.3.x < 9.3.5 | | CVE-2023-2183 | 8.1 | 认证绕过 | 8.x, 9.x (补丁前版本) | | CVE-2018-15727 | 8.1 | 认证绕过(Cookie 伪造) | 2.x-5.2.2 | | CVE-2021-27358 | 7.5 | 通过快照 API 实现 DoS | 6.7.3-7.4.1 | ### 中/低级别 | CVE | CVSS | 描述 | 受影响版本 | |-----|------|------|------------| | CVE-2024-1313 | 5.5 | 信息泄露 | 多个版本 | | CVE-2021-39226 | 6.5 | 快照枚举 | 8.0.0-8.3.0 | | CVE-2020-11110 | - | 存储型 XSS | < 6.7.0 | | CVE-2021-41174 | - | AngularJS XSS | 8.0.0-8.3.0 | | CVE-2022-32275/32276 | - | v8.4.3 特定问题 | 仅 8.4.3 | ### 配置检查 - **匿名访问** - 是否启用了无需认证的查看? - **指标暴露** - Prometheus 端点是否公开可访问? - **插件分析** - 是否检测到未签名的插件? - **安全头** - CSP、HSTS、XFO、XSS-Protection 审计 - **CORS 配置** - 是否检测到通配符/反射性 CORS? - **自助注册** - 是否启用了未经授权的用户注册? - **API 配置** - API 响应中是否包含敏感数据? - **服务器信息泄露** - 是否通过健康检查端点泄露构建信息? ## 示例输出 ``` ╔═══════════════════════════════════════════════════════════════╗ ║ ███████╗██████╗████████╗███████╗██╗██╗██╗ ╔══╗║ ║ ██╔════╝██╔══████╔════╝██╔════╝██║██╔██╗██║ ║ ║║ ║ █████╗ ██████╔███████╗█████╗ ██║████╗ ██║ ╠╝ ╚╣║ ║ ██╔══╝ ██╔══██╔══██║██╔══╝ ██║██║╚██╗██║ ║ ╔╝║ ║ ██║ ██║ ███████║███████╗██║██║ ╚████║ ║ ╚╗║ ║ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚═╝╚═╝ ╚═══╝ ╩═══╝║ ║ ║ ║ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓║ ║ GRAFANA FINAL SCANNER Professional Security Audit Suite ║ ║ v3.0.0 | 15 CVE Checks | Multi-Format Reports | Web Dashboard║ ║ Developed by: Ziad ║ ╚═══════════════════════════════════════════════════════════════╝ ╔══════════════════════════════════════════════════════════════════════╗ ║ TARGET ASSESSMENT ║ ║ https://grafana.example.com ║ ╚══════════════════════════════════════════════════════════════════════╝ ℹ [INFO] Phase 1: Connectivity Verification ✓ [OK] Target reachable (HTTP 200) ℹ [INFO] Phase 2: Version Fingerprinting ✓ [OK] Version detected: Grafana v8.2.5 ℹ [INFO] Phase 3: Vulnerability Scanning 🔴 [CRITICAL] CVE-2021-43798 Directory Traversal └─ Directory traversal CONFIRMED - File read via 'alertlist' plugin (3/8 indicators, 1245 bytes) └─ Test URL: https://grafana.example.com/public/plugins/alertlist/../../../../../../../../etc/passwd 🟡 [MEDIUM] CVE-2024-1313 Information Disclosure └─ OAuth client ID exposed in frontend settings └─ Test URL: https://grafana.example.com/api/frontend/settings ℹ [INFO] Phase 4: Security Configuration Analysis 🟡 [MEDIUM] Anonymous access ENABLED - unauthenticated viewing possible ⚡ [WARN] CORS misconfiguration: Origin header reflected 🔵 [LOW] Missing security headers (2): Content-Security-Policy, Strict-Transport-Security ``` ## 技术方法 ### 扫描流程 1. **连接性验证** - TCP/HTTP 握手和 SSL 验证 2. **版本指纹识别** - 从 7+ 个端点进行多源检测 3. **漏洞评估** - 版本感知的 CVE 测试与严格验证 4. **配置分析** - 安全态势评估(头部、CORS、认证) 5. **结果编译** - 聚合、去重和数据库持久化 6. **报告生成** - 多格式输出(JSON、HTML、CSV) ### Grafana 检测 (自动搜索) 自动搜索功能采用多阶段检测管道: 1. **API 健康检查**(置信度最高)- 检查 `/api/health` 是否返回 Grafana 特定的 JSON 2. **HTML 分析** - 在登录页面内容中查找 Grafana 指标 3. **前端设置** - 检查 `/api/frontend/settings` 中的 buildInfo 4. **端点探测** - 测试多个 Grafana 特定的 API 端点 5. **头部分析** - 检查响应头中的 Grafana 签名 分类一个 URL 为 Grafana 的最低置信度阈值为 30%。 ### 误报减少 - **基于版本的过滤**:跳过不适用的 CVE 检查(约减少 40%) - **内容验证**:要求特定指标,而非仅 HTTP 状态(约减少 60%) - **多向量测试**:测试多个变体以确认 - **响应验证**:内容长度、JSON 结构和指标匹配 - **速率限制检测**:防止因速率限制响应导致的漏报 ### 漏洞管理数据库 JSON 数据库 (`--db`) 提供: - **目标跟踪**:URL、版本、首次发现时间、最后扫描时间、扫描次数 - **漏洞记录**:CVE ID、严重级别、状态、修复建议 - **风险评分**:加权计算(严重=25,高危=15,中危=8,低危=3),上限为 100 - **去重**:相同 CVE + 相同目标 = 更新,而非重复记录 - **扫描历史**:时间戳、持续时间、每次扫描的发现结果(保留最近 1000 条记录) ### 多格式报告 ``` # 同时生成所有格式 python scanner.py -u https://grafana.example.com -o scan_results # 创建: # scan_results.json - 机器可读的JSON # scan_results.html - 带严重性标签的专业HTML报告 # scan_results.csv - 电子表格兼容的CSV ``` ## Docker 使用方法 ``` # 构建 docker build -t grafana-scanner . # 运行单次扫描 docker run --rm grafana-scanner -u https://grafana.example.com # 带数据库运行(持久化) docker run --rm -v $(pwd)/vulndb.json:/app/vulndb.json grafana-scanner -u https://grafana.example.com --db vulndb.json # 运行Web仪表板 docker run --rm -p 8080:8080 -v $(pwd)/vulndb.json:/app/vulndb.json grafana-scanner --serve 8080 --host 0.0.0.0 --db vulndb.json ``` ## 许可证 详情请参阅 [LICENSE](LICENSE) 文件。
标签:Claude, CodeQL, CVE安全扫描, CVE检测, Flask, Grafana安全, Grafana漏洞扫描器, GraphQL安全矩阵, Homebrew安装, Python, Web安全仪表板, 二进制发布, 假阳性减少, 多格式报告, 安全扫描器, 安全测试, 安全自动化工具, 安全评估工具, 工具开发, 并行扫描, 开源工具, 批量漏洞扫描, 攻击性安全, 无后门, 漏洞管理系统, 版本指纹识别, 系统加固, 网络安全, 自动化安全扫描, 认证支持, 请求拦截, 逆向工具, 配置安全分析, 隐私保护