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安全仪表板, 二进制发布, 假阳性减少, 多格式报告, 安全扫描器, 安全测试, 安全自动化工具, 安全评估工具, 工具开发, 并行扫描, 开源工具, 批量漏洞扫描, 攻击性安全, 无后门, 漏洞管理系统, 版本指纹识别, 系统加固, 网络安全, 自动化安全扫描, 认证支持, 请求拦截, 逆向工具, 配置安全分析, 隐私保护