Lỗ hổng trong Plugin wpCentral dẫn đến lạm quyền

Cập nhật cách đây 4 năm

Vào ngày 13 tháng 2, nhóm Threat Intelligence của Wordfence đã phát hiện ra lỗ hổng trong wpCentral, một plugin WordPress được cài đặt trên hơn 60.000 trang web. Lỗ hổng cho phép bất kỳ ai nâng cấp phân quyền của họ lên thành tài khoản người quản trị (administrator), bao gồm cả người dùng ở cấp độ người đăng ký (subscriber).

Mô tả: Kiểm soát truy cập không đúng cách dẫn đến lạm dụng quyền
Plugin ảnh hưởng: wpCentral
Phiên bản ảnh hưởng: <= 1.5.0
CVE ID: CVE-2020-9043
CVSS Score: 8.8 (High)
CVSS Vector: CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Bản vá lỗi: 1.5.1

Lỗ hổng cũng cho phép kiểm soát trang web từ xa thông qua bảng điều khiển quản trị wpCentral. Đây sẽ được coi là một lỗ hổng kiểm soát truy cập không phù hợp dẫn đến sự leo thang đặc quyền. Wordfence đã tiết lộ riêng chi tiết đầy đủ cho nhà phát triển plugin vào ngày 13 tháng 2 và họ đã phản ứng kịp thời bằng cách phát hành một bản vá vào ngày hôm sau cùng với một vài cải tiến bảo mật bổ sung.

Đây là một vấn đề bảo mật nghiêm trọng cao có thể gây ảnh hưởng nghiêm trọng đến trang web của bạn. Wordfence đưa ra khuyến cáo là nên cập nhật lên phiên bản mới nhất, 1.5.2, ngay lập tức.

Khách hàng của Wordfence Premium đã nhận được quy tắc tường lửa mới vào ngày 14 tháng 2 để bảo vệ chống lại các khai thác nhắm vào lỗ hổng này. Người dùng Wordfence miễn phí sẽ nhận được quy tắc sau ba mươi ngày, vào ngày 15 tháng 3.


WpCentral là gì?

wpCentral là một plugin WordPress được thiết kế để sử dụng song song với bảng điều khiển quản lý wpCentral để cung cấp kết nối giữa các trang web WordPress và giao diện quản lý. Phần mềm của họ được thiết kế để giúp quản lý trang web dễ dàng, với các chức năng bao gồm đăng nhập tự động chỉ bằng một cú nhấp chuột từ bảng điều khiển wpCentral, khả năng tạo bản sao lưu, chỉnh sửa bài đăng (trong phiên bản cao cấp), v.v.

Để cung cấp kết nối này giữa trang web và bảng điều khiển quản lý, plugin tạo khóa ủy quyền ngẫu nhiên 128 ký tự, được lưu trữ dưới dạng wpcentral_auth_key, còn được gọi là “khóa kết nối”. Khóa này được sử dụng để thêm một trang web vào bảng điều khiển wpCentral, ngoài việc được sử dụng làm auth_key khi gửi yêu cầu từ bảng điều khiển wpCentral. Đây là một phần quan trọng của quy trình xác thực và ủy quyền và vì khả năng của nó, nó yêu cầu các biện pháp bảo vệ nghiêm ngặt để ngăn chặn việc sử dụng trái phép.


Khóa kết nối luôn được hiển thị trong phần chân trang của quản trị viên

Wordfence đã phát hiện ra rằng có các điều khiển truy cập yếu để bảo vệ khóa kết nối vì nó được hiển thị trong admin_footer trong hộp thoại phương thức.

add_action('admin_footer', 'wpc_modal_dialog');

admin_footer kiểm tra xem một trang đang được truy cập có phải là một phần của giao diện quản trị hay không và sẽ hiển thị bất cứ điều gì được yêu cầu trong khu vực đó. Tuy nhiên, nó không xác minh rằng người dùng có khả năng của quản trị viên – một quan niệm sai lầm phổ biến với hàng loạt các chức năng có chứa nhãn “admin”. Điều này có nghĩa là bất kỳ người dùng nào đã đăng nhập, bất kể khả năng, sẽ có quyền truy cập để xem bất kỳ nội dung nào trong hộp thoại phương thức được hiển thị như một phần của admin_footer.

Hộp thoại phương thức được hiển thị như một phần của admin_footer đã hiển thị khóa kết nối cùng với các bước có thể được sử dụng để kết nối một trang web với wpCentral.

function wpc_modal_dialog(){
     
    $mdialog = '
    <div id="wpc_connection_key_dialog" style="display: none;">
        <p>Follow the steps here to connect your website to wpcentral dashboard:</p>
        <ol>
            <li>Copy the connection key below</li>
            <li>Log into your <a href="https://panel.wpcentral.co/" target="_blank">wpcentral</a> account</li>
            <li>Click on Add website to add your website to wpcentral.</li>
            <li>Enter this website\'s URL and paste the Connection key given below.</li>
            <li>You can also follow our guide for the same <a href="https://wpcentral.co/docs/getting-started/adding-website-in-wpcentral/" target="_blank">here</a>.</li>
        </ol>
         
        <p style="font-weight:bold;">Note: Contact wpCentral Team at support@wpcentral.co for any issues</p>
 
        <div style="text-align:center; font-weight:bold;"><p style="margin-bottom: 4px;margin-top: 20px;">wpCentral Connection Key</p></div>
        <div style="padding: 10px;background-color: #fafafa;border: 1px solid black;border-radius: 10px;font-weight: bold;font-size: 14px;text-align: center;">'.wpc_get_connection_key().'</div>
    </div>';

Điều này có nghĩa là kẻ tấn công có quyền hạn tối thiểu, cấp thuê bao sẽ có khả năng thêm một trang web dễ bị tấn công vào bảng điều khiển wpCentral của họ và kiểm soát từ xa trên trang web. Họ có thể làm những việc như tạo bản sao lưu và sau đó lấy cắp thông tin từ tệp wp-config.php để có quyền truy cập vào cơ sở dữ liệu hoặc có quyền truy cập vào thông tin nhạy cảm.


Khả năng tự động đăng nhập Không được bảo vệ

Điều tồi tệ nhất mà kẻ tấn công có thể làm nếu chúng có thể truy cập vào auth_key là tự động đăng nhập, một tính năng phổ biến trong các bảng điều khiển quản lý WordPress.

add_action('wp_ajax_nopriv_my_wpc_signon', 'my_wpc_signon');

Chức năng này được dự định sẽ được sử dụng như một phần của bảng điều khiển wpCentral nơi người dùng chỉ cần nhấp vào nút để xác thực, tuy nhiên, nó chỉ gửi một yêu cầu có thể được sao chép bởi bất kỳ người dùng nào. Ủy quyền chỉ đơn giản kiểm tra xem auth_key có phải là cùng một thứ được lưu trữ trong bảng tùy chọn là wpcentral_auth_key hay không. Khóa này là liên tục, vì vậy nếu bị xâm phạm, nó sẽ ủy quyền cho bất kỳ người dùng nào gửi yêu cầu thay mặt cho quản trị viên trang web.

/**
 * Check for the authorization of the request using the auth key
 *
 * @returns        bool
 * @since      1.0
 */
function wpc_authorize(){
    global $l, $error;
     
    $return = array(); 
     
    $auth_key = wpc_optREQ('auth_key');
    if(empty($auth_key)){
        $return['error'] = 'Unauthorized Access!!';
        echo json_encode($return);
        die();
    }
     
    $verify_authkey = wpc_get_option('wpcentral_auth_key');
    if($auth_key != $verify_authkey){
        $return['error'] = $l['invalid_auth_key'];
        echo json_encode($return);
        die();
    }
}

Khi một yêu cầu được định dạng chính xác được gửi bằng khóa ủy quyền phù hợp, người dùng sẽ tự động đăng nhập với tư cách là người dùng 1 trong cơ sở dữ liệu. Đây là tài khoản người dùng đầu tiên được tạo trên một trang web và thường là một trong những người dùng quản trị chính. Sau khi đăng nhập, kẻ tấn công sẽ có thời gian trị vì miễn phí và có thể tiêm ngoài trời, gỡ xuống trang web, và nhiều hơn nữa.

/**
 * Provides access to the website's admin panel
 *
 * @returns     bool
 * @since       1.0
 */
function my_wpc_signon(){
    global $l, $error;
     
    //Authorize
    wpc_authorize();
     
    $user_info = get_userdata(1);
         
    // Automatic login //
    $username = $user_info->user_login;
    $user = get_user_by('login', $username );
     
    // Redirect URL //
    if (!is_wp_error($user)){
        wp_clear_auth_cookie();
        wp_set_current_user($user->ID);
        wp_set_auth_cookie($user->ID);
 
        $redirect_to = user_admin_url();
        wp_safe_redirect($redirect_to);
 
        exit();
    }
}

May mắn thay, trong phiên bản mới nhất của wpCentral, nhà phát triển đã thực hiện kiểm tra để đảm bảo rằng các yêu cầu được gửi từ địa chỉ IP máy chủ wpCentral. Điều này đảm bảo rằng nếu một khóa kết nối bị xâm phạm, việc khai thác hàng loạt sẽ khó thực hiện hơn vì các yêu cầu cần đến từ bảng điều khiển wpCentral thay vì một truy vấn đơn giản. Ngoài ra, tính năng đăng nhập tự động dường như đã bị vô hiệu hóa trong thời gian này.


Rất quan trọng để cập nhật ngay lập tức

Do tính chất độc đáo của lỗ hổng này, rất khó để tạo quy tắc tường lửa cung cấp bảo vệ hoàn toàn. Lưu ý rằng, là một phần của bản cập nhật plugin, khóa wpCentral của bạn sẽ được đặt lại, ngăn chặn kẻ tấn công duy trì quyền truy cập trái phép vào trang web của bạn do khóa kết nối có thể đã bị xâm phạm trước đó. Vì những lý do này, bạn nên cập nhật lên phiên bản mới nhất càng sớm càng tốt để đảm bảo trang web của bạn được an toàn.


Phần kết luận

Trong bài hôm nay, chúng tôi trình bày chi tiết về lỗ hổng leo thang đặc quyền trong plugin wpCentral. Lỗ hổng này đã được vá trong phiên bản 1.5.1, tuy nhiên, chúng tôi khuyên người dùng nên cập nhật lên phiên bản mới nhất (1.5.2) ngay lập tức. Các trang web chạy Wordfence Premium đã được bảo vệ khỏi các cuộc tấn công chống lại lỗ hổng này kể từ ngày 14 tháng 2 năm 2020. Các trang web chạy phiên bản Wordfence miễn phí sẽ nhận được cập nhật quy tắc tường lửa vào ngày 15 tháng 3 năm 2020.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.