
Atlassian Confluence Server 向け CVE-2023-22518 エクスプロイト解析:セットアップ、JAR差分解析、根本原因、管理者アクセスを再取得するための未承認のリストアを網羅。
Exploit-CVE-2023-22518 CVE-2023-22518 in Confluence
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 を選択します。

手順に従います :
MySQL ドライバーをダウンロードする
.jar ファイルを /home/lily/atlassian/confluence/confluence/WEB-INF/lib に配置する
Confluence を再起動し、セットアッププロセスを続行する
データベースを設定し、ユーザーとパスワードを作成します。
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 します **

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 をアップロードします

送信して応答を受け取ります

これで、account admin :admin でログインできます。

そして、次のような結果が得られます。
