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 pluginAdvanced Custom Fields:Extendeddà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àmcall_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:Extendedtừ 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] và 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:
Cập nhật bản vá: Cập nhật ngay lập tức plugin
Advanced Custom Fields:Extendedlê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àmcall_user_func_array()và thành phần render part khỏi hàmprepare_form().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.
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.
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.






