
| CVE ID | CVSSスコア | 発見日 | 影響を受けるプラグイン | 脆弱性の種類 |
|---|---|---|---|---|
| CVE-2023-3460 | 07/04/2023 | Ultimate Member | 未承認の管理者アクセス |
この研究は、WordPressのプラグイン「Ultimate Member」に影響を与える重大な脆弱性であるCVE¹-2023-3460に焦点を当てています。この脆弱性により、権限のない権限昇格が可能になります。このプラグインは広く普及しており、WordPressサイトでのプロフィール管理に使用されています。この脆弱性は、攻撃者が管理者権限を取得し、サイトを完全に制御できるようになるため、重大なリスクをもたらします。そのため、この欠陥はNIST²によってCVSSスケールで重大かつ9.1と評価されました。
CVE-2023-3460は、プラグインによるロールと権限の管理における欠陥を悪用します。WordPressでは、WP_Capabilities³関数がユーザーのロールと権限を管理するために使用されます。この関数により、管理者は各ユーザーロールに特定の権限を定義できます。ただし、この関数の誤用は権限昇格の脆弱性につながる可能性があります。
Ultimate Memberの場合、この脆弱性により、攻撃者はWPの権限チェックを回避し、サイトへの管理者レベルのアクセスを取得できます。このプラグインは、ユーザーが操作すべきではない事前定義されたユーザーメタデータキーのリストを使用して動作します。しかし、このブロックリストに基づくセキュリティアプローチは、回避の可能性を残すため、しばしば不十分です。
WordPressは、wp_capabilitiesと呼ばれる構造を通じてユーザーのロールと権限を管理します。この構造は、ユーザーに付与されたさまざまなロールと権限のシリアル化された表現です。たとえば、管理者は編集者や投稿者とは異なる一連の権限を持ちます。これらの権限は、wp_usermetaテーブル内のシリアル化された配列としてWordPressデータベースに保存されます。
CVE-2023-3460の欠陥は、Ultimate Memberによるロールと権限の管理の実装に起因します。このプラグインは、ユーザーが操作すべきではない事前定義されたユーザーメタデータキーのリストを使用して動作します。このリストは、アカウント作成時にユーザーがこれらのキーを保存しようとしているかどうかを確認するために使用されます。このアプローチは、既知の有害な入力をブロックする(ブロックリスト)ことが直感的に見えるかもしれませんが、実際には予想以上に複雑であり、セキュリティの回避の余地を残すことが多い、一般的なセキュリティのアンチパターンです。
ここでは、Ultimate Memberは、ユーザー登録時に送信されたメタデータの不十分な検証を使用しています。このプラグインは、is_metakey_bannedと呼ばれる関数を使用して、ユーザーが送信したメタデータが許可されているかどうかを確認します。この関数は、送信されたメタデータが禁止されたメタデータのリストに存在するかどうかを確認します。存在する場合、関数はtrueを返し、ユーザー登録はブロックされます。それ以外の場合、関数はfalseを返し、ユーザー登録が許可されます。
ただし、WordPressは一部のアクセント付き文字をデフォルト文字として受け入れます。ユーザーがアクセント付き文字を含むメタデータを送信した場合、is_metakey_banned関数はそれらを検出せず、ユーザー登録が許可されます。
Ultimate Memberプラグインは、小さな個人ブログから大規模なeコマースサイトまで、さまざまな環境で広く使用されています。エンドユーザーやサイト管理者の情報セキュリティスキルについて特定の前提を置くことはできません。
WordPressサイトをホストするサーバーは、通常、安全なデータセンターに配置されています。個人サイトの場合、物理的セキュリティはユーザーの個々の環境に依存します。
Ultimate Memberプラグインが公式の指示に従って正しくインストールおよび設定されていることを前提としています。WordPressサイトは、基本的なセキュリティ対策が講じられた状態で最新に維持されていることを前提としています。
7.5 セキュリティ機能
管理者として、この脆弱性に関連するリスクを軽減するために取ることができる具体的な対策を以下に示します。
ユーザー入力の検証:特にwp_capabilitiesなどのメタデータを変更するものについて、すべてのユーザー入力を検証するためのサーバー側の検証を実装します。ブロックリストではなく、正規表現または検証リスト(ホワイトリスト)を使用して入力を制御します。
CAPTCHAとレート制限:自動化された攻撃を防ぐために、登録フォームにCAPTCHAとレート制限を統合します。 クライアント側の検証:クライアント側の検証だけでは不十分ですが、自動化された攻撃を防ぎ、ユーザーエクスペリエンスを向上させるのに役立ちます。
ログの監視:ユーザーロールの不審な変更やメタデータ注入の試みを検出するためのログ監視システムを導入します。これはログ分析ツールを使用して行うことができます。
Webアプリケーションファイアウォール(WAF):既知および未知の攻撃(悪意のあるコード注入攻撃を含む)をブロックするためにWAF⁴を設定します。 侵入検知/防止システム(IDS/IPS)⁵:脆弱性の悪用の試みを検出するためにIDS/IPSを導入します。
ユーザーロールの見直し:異常な権限昇格を検出するために、ユーザーに割り当てられたロールを定期的に確認します。 権限の制限:新しいユーザーにデフォルトで付与される権限を制限し、最小権限の原則に従って、高いロールの割り当てには管理上の検証を要求します。この原則の詳細はこちらを参照してください。
アップデートの迅速な適用:プラグインとWordPress自体のセキュリティアップデートを定期的に行います。
開発者に前述のセキュリティのベストプラクティスをトレーニングし、不適切な実装のリスクと影響について認識させます。
脆弱性の悪用を開始するのに役立つMakefileが用意されています。次のように使用できます:
make up 必要なすべてのインストールを伴ってWordPressを起動します。待機時間の後、WordPressサーバーが起動し、設定され、Ultimate Memberプラグインのバージョン2.6.5がインストールされます。
その後、ログインページでadmin:passwordの認証情報を使用してWordPressに接続できます。ユーザータブに移動すると、adminユーザーのみが存在することがわかります。

注:docker-composeがありdocker composeがない場合は、Makefileをそれに応じて変更できます(変数DOCKER_COMPOSE= docker-compose)。
次に、脆弱性の悪用を開始できます:
make exploit
その後、エクスプロイトによって提供された認証情報を使用してログインページでWordPressに接続し、ユーザータブでAdministratorロールを持つ新しいユーザーが作成されたことを確認できます。

make down WordPressサーバーを停止し、データを削除します。
make exploit はexploit.pyスクリプトを実行します。このスクリプトは複数のステップで動作します:
エクスプロイトの技術的詳細1. 脆弱性の確認: 悪用を進める前に、スクリプトはターゲットサイトにインストールされているUltimate Memberプラグインのバージョンが脆弱であるかどうか、つまりバージョン2.6.7未満であるかどうかを確認します。
2. セキュリティノンスの取得: スクリプトは、ターゲットサイトの登録ページからセキュリティノンス³を取得します。このノンスは、登録リクエストがWordPressによって受け入れられるために必要です。ノンスは、登録ページのHTMLコードを解析して取得されます。
3. 脆弱性の悪用: 次に、スクリプトは操作されたパラメータ(wp_càpabilities[administrator]=1)を含むPOSTリクエストを登録ページに送信します。このパラメータは、アクセント付き文字(à)を使用してプラグインのセキュリティチェックを回避し、データを誤ってシリアル化することで、作成された新しいユーザーに管理者ロールを割り当てます。
4. エクスプロイトの確認: リクエストの送信後、スクリプトはサーバーの応答を解析して操作が成功したかどうかを確認します。
| 脅威 | B1(ユーザーデータの機密性) | B2(Webサイトの整合性) | B3(Ultimate Memberプラグインの整合性) |
|---|
| M1 不正アクセス | X | X | X |
| M2 悪意のあるコードの注入 | X | X | |
| M3 データ漏洩 | X | ||
| M4 評判の低下 | X |
| 名前 | リンク |
|---|
| NIST CVE-2023-3460 | https://nvd.nist.gov/vuln/detail/CVE-2023-3460 |
| Ultimate Member Github | https://github.com/ultimatemember/ultimatemember |
| 悪用に使用されたパッケージのバージョン 2.6.5 | https://wordpress.org/plugins/ultimate-member/advanced/ |
| エクスプロイトのパッチ | https://github.com/ultimatemember/ultimatemember/commit/fae47c6065ce07e9a8b44501002fa5b4f16d2456 |
| エクスプロイトのレビュー | https://thesecmaster.com/how-to-fix-cve-2023-3460-a-privilege-escalation-vulnerability-in-ultimate-member-wordpress-plugin/ |
| OWASP Top 10 アプリケーションセキュリティリスク | https://owasp.org/www-project-top-ten/ |