
Atlassian Confluence における CVE-2023-22518 のエクスプロイト。脆弱性の詳細なウォークスルーを提供し、環境設定、差分解析による根本原因分析、そして管理者アクセスを得るための悪用手順を含みます。
Confluence における CVE-2023-22518
CVE-2023-22518 : この脆弱性は、「Confluence のデータベースとサーバーにおける不適切な認可の脆弱性」として説明されています。このバグは、Atlassian 製品のオンプレミスバージョンに影響します。
環境のセットアップ 脆弱性のあるバージョン 8.0.4 を使用 ダウンロードURL : https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.0.4-x64.exe

Trial Installation を選択し、リンクをクリックして無料トライアルキーを取得します。その後、クラスター設定で non-cluster を選択します。

次にデータベース設定に進み -> MySQL を選択

手順に従ってください :
データベースを設定し、ユーザーとパスワードテーブルを作成
CREATE DATABASE securedb CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'admin123'@'localhost' IDENTIFIED BY 'supersecure';
GRANT ALL PRIVILEGES ON securedb.* TO 'admin123'@'localhost';
GRANT SUPER ON *.* TO 'your_username'@'your_host';
FLUSH PRIVILEGES;
その後、/etc/mysql/my.cnf を編集します。以下の行を追加します :
transaction-isolation = READ-COMMITTED
log_bin_trust_function_creators = 1

その後、MySQL と Confluence を再起動します。そして、localhost:8090 のセットアップページにアクセスし、作成したデータベースの情報を入力します。

接続成功を確認し、Next をクリックします。その後、Sign up します。

デバッグ
*差分 2つのバージョンの jar ファイルを IntelliJ で diff します。具体的には、バージョン 8.0.4 と 7.19.16 を diff します。 説明に従って、2つのバージョンの confluence.jar ファイルを diff します。

パッチ適用済みと未適用の違いは、@WebSudoRequired と @SystemAdminOnly です。 WebSudoRequired は、管理者セッションのセキュリティを強化する機能です。管理者へのアクセスを試みると、システムにログインしている場合でも、パスワードの再入力を要求します。管理アクセスを確実にするための追加の認証ステップです。
SystemAdminOnly : この機能は、管理機能を管理者アカウントのみに制限します。これにより、承認されたアカウントのみが重要な操作やシステムに影響を与える操作を実行できるようになります。
RestoreAction.class の validate() にブレークポイントを設定

アップロードされたファイルを保存する関数は getRestoreFileFromUpload です

getExportDescriptor は、zip ファイルを解凍して内容を読み取るために使用されます


しかし、デバッグ後も脆弱性の根本原因は見つかりませんでした。
CVE で説明されている原因は、認可の脆弱性です。これにより、開発者が権限を割り当てる際の Java 言語の脆弱性に関する調査に注意を向けることになります。
注意を struts.xml ファイルに向けます。このファイルには、アクションと名前空間に基づくルーティング、およびインターセプターに関する情報が含まれています。




名前空間 /json は名前空間 /admin の機能を強化していることがわかります。そのため、/admin 名前空間に対して作成されたルートは、/json 名前空間を介してもアクセス可能です。
名前空間 /json のコンテキストでは、リクエストルーティングプロセスは一連のインターセプターを通過します。これらのインターセプターの1つである WebSudoInterceptor は、リクエスト URI に基づいてチェックを実行します。
具体的には、WebSudoInterceptor は以下のチェックを実行します:
リクエストパスが /authenticate.action の場合はスキップされます。 リクエストパスが /admin の場合、WebSudoNotRequired 属性が空かどうかをチェックします。
リクエストが '/json' に送信されると、'/json/action' へのリクエストは '/setup/action' および 'admin/action' に転送されます。この CVE では、脆弱なパスは '/json/setup-restore.action?synchronous=true' です。
Burp Suite でリクエストをキャプチャし、GET /json/setup-restore.action。ただし、"Method Not Allowed" 応答を受信しました。 POST /json/setup-restore.action?synchronous=true を試行し、200 応答を受信しました。


ファイル xmlexport-200123123001.zip をアップロード

し、応答を受信

これで、admin :admin アカウントでログインできます

そして、以下の結果が得られます
