>  기사  >  운영 및 유지보수  >  WordPress 플러그인 WooCommerce의 임의 파일 삭제 취약점을 해결하는 방법

WordPress 플러그인 WooCommerce의 임의 파일 삭제 취약점을 해결하는 방법

WBOY
WBOY앞으로
2023-05-13 18:16:061598검색

기술적 세부사항

워드프레스의 권한 처리 메커니즘은 주로 역할별로 다른 기능을 제공하여 구현됩니다. 스토어 관리자 역할이 정의되면 이 역할에 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);}

호출의 확인 논리는 다음과 같습니다. 이 사용자는 $target_user_id 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제