Skip to main content

Command Palette

Search for a command to run...

Lỗ hổng thực thi mã từ xa trong WordPress tác động tới hơn 100.000 trang web

Updated
5 min read
Lỗ hổng thực thi mã từ xa trong WordPress tác động tới hơn 100.000 trang web

Đội ngũ các chuyên gia bảo mật thuộc Wordfence vừa qua đã ra cảnh báo về một lỗ hổng nguy hiểm trong plugin Advanced Custom Fields:Extended, cho phép tin tặc lợi dụng để thực thi mã độc từ xa, ảnh hưởng tới hơn 100.000 trang web WordPress trên toàn thế giới.

Thông tin lỗ hổng

  • Định danh lỗ hổng: CVE-2025-13486

  • Điểm CVSS (3.1): 9.8

  • Mức độ nghiêm trọng: CRITICAL - Cực kỳ nghiêm trọng

  • Mô tả: Lỗ hổng trong hàm prepare_form() của plugin Advanced Custom Fields:Extended dành cho WordPress có thể bị kẻ tấn công lợi dụng và khai thác tấn công thực thi mã từ xa. Cụ thể, hàm này chấp nhận dữ liệu đầu vào của người dùng mà không có biện pháp kiểm tra hoặc đảm bảo an toàn, đồng thời truyền toàn bộ dữ liệu đã thu nạp tới hàm call_user_func_array(). Điều này tạo ra cơ hội cho kẻ tấn công chưa được xác thực (unauthenticated attacker) có thể nạp các dữ liệu độc hại để chèn backdoor, tạo ra các tài khoản quản trị viên mới và thực thi mã trên những máy chủ nạn nhân.

  • Phiên bản bị ảnh hưởng: Plugin Advanced Custom Fields:Extended từ phiên bản 0.9.0.5 đến phiên bản 0.9.1.1

Advanced Custom Fields: Extended được biết đến là một plugin mở rộng cho plugin Advanced Custom Fields của WordPress, chịu trách nhiệm bổ sung thêm các trường (fields), trình quản lý biểu mẫu (form manager) cùng một số tính năng khác với khoảng 100.000 trang web đang sử dụng trên phạm vi toàn cầu. Vừa qua, trên trang chủ của của Wordfence đã đăng tải cảnh báo đến người dùng về sự tồn tại của CVE-2025-13486, một lỗ hổng cho phép kẻ tấn công có thể lợi dụng plugin này để thực thi mã mà không cần xác thực danh tính trên hệ thống mục tiêu.

Cụ thể, lỗ hổng tồn tại trong hàm prepare_form() bên trong class acfe_module_form_front_render. Do hàm này được định nghĩa bằng cách sử dụng tham số form[render]form lấy trực tiếp từ dữ liệu đầu vào của người dùng cho mục đích hiển thị các biểu mẫu (render the form), nhưng không có biện pháp kiểm tra hay có các quy tắc để kiểm soát phần dữ liệu được nạp vào, kẻ tấn công có thể lợi dụng điều này để truyền một hàm PHP tuỳ ý tới hai tham số trên để thực thi các đoạn mã từ xa.

function prepare_form($form){

    if(!$form){
        return false;
    }

    // field values
    // we must inject values earlier than 10 so custom check in acf/prepare_field can be done
    // this fix an issue with Select 'custom value' which is checked on acf/prepare_field/type=select
    add_filter('acf/prepare_field', array($this, 'prepare_field_values'), 9);

    // field settings
    add_filter('acf/prepare_field', array($this, 'prepare_field_settings'), 15);

    // field attributes
    add_filter('acf/prepare_field', array($this, 'prepare_field_attributes'), 15);

    // uploader (always set in case of multiple forms on the page)
    acf_disable_filter('acfe/form/uploader');

    if($form['settings']['uploader'] !== 'default'){

        acf_enable_filter('acfe/form/uploader');
        acf_update_setting('uploader', $form['settings']['uploader']);

    }

    // custom instruction placement
    acf_enable_filter('acfe/override_instruction');
    acf_disable_filter('acfe/instruction_tooltip');
    acf_disable_filter('acfe/instruction_above_field');

    if($form['attributes']['fields']['instruction'] === 'tooltip'){
        acf_enable_filter('acfe/instruction_tooltip');
    }elseif($form['attributes']['fields']['instruction'] === 'above_field'){
        acf_enable_filter('acfe/instruction_above_field');
    }

    // generate render
    if($form['render']){

        // added mapped fields to context
        // this allow {render:field_name} to first check fields of the mapped field groups
        $mapped_fields = $this->get_form_fields_keys($form);
        acfe_add_context('mapped_fields', $mapped_fields);

        // check if render has {render:submit} tag
        $has_render_submit = false;

        // array render
        if(is_array($form['render'])){

            $html = array_map(function($row){
                return "{render:$row}";
            }, $form['render']);

            $html = implode('', $html);

            // assign new render
            $form['render'] = $html;

        // function render
        }elseif(is_callable($form['render'])){

            ob_start();
                call_user_func_array($form['render'], array($form));

Trong thử nghiệm của mình, các chuyên gia bảo mật thuộc Wordfence có thể dễ dàng thực hiện tấn công leo thang đặc quyền trên hệ thống mục tiêu bằng cách khai thác gián tiếp hàm wp_insert_user() thông qua lỗ hổng này, cho thấy tính nghiêm trọng của CVE-2025-13486.

Khuyến nghị & Khắc phục

CVE-2025-13486 là một lỗ hổng cực kỳ nghiêm trọng, kẻ tấn công có thể dễ dàng chèn các dữ liệu độc hại và chiếm hoàn toàn quyền điều khiển từ xa mà không gặp bất cứ trở ngại nào trong việc xác thực danh tính trên hệ thống mục tiêu. Người dùng và quản trị viên sở hữu trang WordPress có plugin Advanced Custom Fields:Extended đang chạy cần:

  1. Cập nhật bản vá: Cập nhật ngay lập tức plugin Advanced Custom Fields:Extended lên phiên bản 0.9.2 để vá lỗ hổng này. Đây là hành động cấp thiết và quan trọng nhất bởi trong bản cập nhật mới, đội ngũ phát triển đã vô hiệu hoá hàm call_user_func_array() và thành phần render part khỏi hàm prepare_form().

  2. Kiểm tra tài khoản quản trị viên: Rà soát danh sách tài khoản người dùng và xác định bất kỳ tài khoản quản trị viên không xác định hoặc đáng ngờ. Nếu phát hiện các tài khoản bất thường, cần tiến hành vô hiệu hoá và xoá vĩnh viễn các tài khoản đáng ngờ này.

  3. Kiểm tra log máy chủ và truy cập: Kiểm tra tệp nhật ký (server and access logs) để tìm kiếm những kết nối bất thường từ các địa chỉ IP tấn công đã biết từ nhiều nguồn Threat Intelligence.

  4. Giám sát hệ thống: Giám sát hệ thống 24/7, theo dõi những thay đổi bất thường đối với nội dung website, plugin hoặc themes. Bất kỳ sự thay đổi trái phép nào cũng có thể là dấu hiệu của việc hệ thống bị xâm nhập.

Tham khảo

  1. 100,000 WordPress Sites Affected by Remote Code Execution Vulnerability in Advanced Custom Fields: Extended WordPress Plugin

  2. Advanced Custom Fields: Extended 0.9.0.5 - 0.9.1.1 - Unauthenticated Remote Code Execution in prepare_form

Newsletters

Part 1 of 50

More from this blog

F

FPT IS Security

747 posts

Dedicated to providing insightful articles on cybersecurity threat intelligence, aimed at empowering individuals and organizations to navigate the digital landscape safely.