検索
ホームページ運用・保守安全性WordPressプラグインWooCommerceにおける任意のファイル削除の脆弱性を解決する方法

技術的な詳細

WordPress の権限処理メカニズムは、主にロールごとに異なる機能を提供することで実装されています。ストア管理者のロールが定義されると、このロールに edit_users 関数が割り当てられ、ストア管理者ができるようになります。ストアの顧客アカウントを直接管理します。権限の割り当てプロセス全体は、プラグインのインストール プロセス中に行われます。 woocommerce/includes/class-wc-install.php:

//Shop manager role.add_role(       'shop_manager',      // Internal name of the new role       'Shop manager',      // The label for displaying       array(               // Capabilities                ⋮              'read_private_posts'     => true,              'edit_users'             => true,              'edit_posts'             => true,                ⋮       ));

ロール権限情報は WordPress コア設定としてデータベースに保存されます。つまり、ユーザー ロールはプラグインから独立しています。プラグインは有効になっていないため、関連するロールの権限には影響しません。

認証されたユーザーが他のユーザー情報を変更しようとすると、 current_user_can() 関数が呼び出され、特権ユーザーのみがこの操作を実行できるようにします。 Current_user_can() 関数呼び出しの例:

$target_user_id= $_GET['target_user_id'];if(current_user_can('edit_user',$target_user_id)) {    edit_user($target_user_id);}

呼び出しの検証ロジックは次のとおりです: このユーザーは、ID $target_user_id を使用して特定のユーザーを変更したいと考えています。実行する権限を持っていますか?

デフォルト設定では、edit_users 関数により、権限を持つユーザー (ストア管理者など) が他のユーザー (管理者ユーザーであっても) を編集し、パスワード更新などの操作を実行できます。セキュリティ上の理由から、WooCommerce ではストア管理者がユーザーを編集できるかどうかを指定する必要があるため、プラグインはメタ権限を追加する必要があります。メタ関数は current_user_can() によって呼び出すことができます。デフォルトの動作で関数によって返される値は true ですが、メタ権限関数によって返される値によって、現在のユーザーがそのような操作を実行できるかどうかが決まります。以下は、WooCommerce メタ権限フィルターの抽象関数コードです:

function disallow_editing_of_admins( $capability, $target_user_id ) {       // If the user is an admin return false anddisallow the action    if($capability == "edit_user"&& user_is_admin($target_user_id)) {        return false;    } else {        return true;    }}add_filter('map_meta_cap', 'disallow_editing_of_admins');

たとえば、current_user_can('edit_user', 1) が呼び出されるとき、フィルターは ID が 1 ($target_user_id) であると判断します。ユーザーは管理者であり、その結果に基づいてユーザーに操作を許可するかどうかを決定します。

ストア管理者はプラグインを無効にする

デフォルトでは、管理者のみがプラグインを無効にできます。ただし、この脆弱性により、ストア管理者はサーバー上の書き込み可能なファイルを削除できるため、WooCommerce のメイン ファイル woocommerce.php を削除することで、WordPress がプラグインを読み込まないようにすることができます。

このファイル削除の脆弱性は WooCommerce のログ機能に存在し、ログは .log ファイルの形式で wp-content ディレクトリに保存されます。ストア管理者がログ ファイルを削除したい場合は、ファイル名を GET パラメータとして送信する必要があります。以下に示すコード スニペットは脆弱な部分です:

woocommerce/includes/admin/class-wc-admin-status.php

class WC_Admin_Status{    public static function remove_log()    {    ⋮        $log_handler = newWC_Log_Handler_File();       $log_handler->remove(wp_unslash($_REQUEST['handle']));}

woocommerce/includes/log-handlers/class-wc - log-handler-file.php

class WC_Log_Handler_File extends WC_Log_Handler{    public function remove($handle)    {    ⋮        $file = trailingslashit(WC_LOG_DIR) .$handle;    ⋮unlink($file);

ここでの問題は、ファイル名 ($handle) がログ ディレクトリ (wp-content/wc-logs/) に追加され、その後 unlink() に渡されることです。関数。 「$handle../../plugins/woocommerce-3.4.5/woocommerce.php」を設定する場合、ファイル wp-content/wc-logs/../../plugins/woocommerce-3.4.5/woocommerce.php削除され、WooCommerce が無効になります。

以上がWordPressプラグインWooCommerceにおける任意のファイル削除の脆弱性を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター