Kỹ sư VietSunshine phát hiện lỗ hổng CVE-2026-32475 nghiêm trọng trong Elementor Pro, có thể thực thi mã từ xa (RCE)

22/08/2026
CVE-2026-32475 đã mang tên VietSunshine lên top 1 All-time Wordfence Bounty Hall of Fame.

Trong bài research trước, chúng tôi đã chia sẻ về SQL Injection trong WordPress Core. Tuy nhiên, chúng tôi vẫn chưa thể tìm ra cách bypass authentication hoặc xây dựng một attack chain dẫn đến RCE. Và sau khi wp2shell được công bố, chúng tôi vừa thấy phấn khích, lại vừa kèm theo “nhiều chút” nuối tiếc vì không phát hiện được chain này .

Vì vậy, chúng tôi quyết định tiếp tục “thử vận may” với một mục tiêu khác. Khi nhìn vào danh sách lỗ hổng của Elementor Pro, tôi tự hỏi tại sao trong 6 năm qua không có bug RCE nào được phát hiện? Do đó “Elementor Pro, I choose you”. Kết quả, chúng ta có bug CVE-2026-32475 - Unauthenticated Remote Code Execution.

Elementor Pro là phiên bản cao cấp của Elementor, một plugin rất phổ biến trong hệ sinh thái WordPress với khoảng 6 triệu website đang sử dụng (theo BuiltWith – Websites using Elementor Pro). Plugin bổ sung nhiều tính năng nâng cao, trong đó có Forms widget cho phép tạo biểu mẫu và xử lý file upload.

những Website đang sử dụng Elementor Pro
Các trang web sử dụng Elementor Pro

Tổng quan về lỗ hổng CVE-2026-32475

Ở các phiên bản 4.2.1 trở xuống, module Forms của Elementor Pro xử lý danh sách nhiều tệp được gửi lên cùng một lúc qua hai bước riêng biệt: kiểm tra tính an toàn và lưu tệp. Nếu danh sách này bắt đầu bằng một vị trí không chứa tệp, bước kiểm tra sẽ dừng ngay, nhưng bước lưu chỉ bỏ qua vị trí đó rồi tiếp tục xử lý các tệp phía sau.

Kẻ tấn công có thể lợi dụng sự khác biệt này bằng cách gửi một danh sách gồm các mục trống ở đầu và một tệp PHP độc hại ở cuối. Tệp PHP sẽ không được kiểm tra nhưng vẫn được lưu vào thư mục có thể truy cập công khai. Trong cấu hình bị ảnh hưởng, lỗ hổng có thể bị khai thác mà không cần đăng nhập, dẫn đến việc thực thi mã trên website.

Đọc thêm: Cảnh báo lỗ hổng trong WordPress Core do các kỹ sư VietSunshine phát hiện, một mắt xích trong chuỗi khai thác wp2shell

CVE-2026-32475 hoạt động ra sao?

Elementor Pro cung cấp Forms widget, trong đó có File Upload field cho phép người dùng đính kèm file vào form. Đây là một chức năng phổ biến, nhưng cũng là một attack surface đáng chú ý vì dữ liệu do người dùng kiểm soát sẽ được đưa lên server.

Khi phân tích cách Elementor Pro xử lý File Upload, nhóm nghiên cứu nhận thấy plugin thực tế đã có cơ chế kiểm tra phần mở rộng của file. Một file PHP được upload theo cách thông thường sẽ bị từ chối.

Đoạn code thực hiện việc kiểm tra đó:

$file_extension = pathinfo( $file['name'], PATHINFO_EXTENSION );
$file_types_meta = explode( ',', $field['file_types'] );
$file_types_meta = array_map( 'trim', $file_types_meta );
$file_types_meta = array_map( 'strtolower', $file_types_meta );
$file_extension = strtolower( $file_extension );
return (
    in_array( $file_extension, $file_types_meta ) &&
    ! in_array( $file_extension, $this->get_blacklist_file_ext() )
);

 

Danh sách bị chặn bao gồm các extension có thể thực thi, trong đó có php, phtml, php5 và nhiều loại khác. Vì vậy, nếu chỉ nhìn vào cơ chế kiểm tra này, việc upload trực tiếp một file .php dường như không khả thi.

Vấn đề xuất hiện ở bước tiếp theo.

Validation và processing không đồng nhất

Elementor Pro xử lý các file được upload trong hai vòng lặp độc lập. Vòng lặp thứ nhất chịu trách nhiệm kiểm tra, trong khi vòng lặp thứ hai chịu trách nhiệm đưa file vào thư mục đích.

Điểm quan trọng nằm ở cách hai vòng lặp xử lý một empty file entry.

Trong validation(), khi gặp trường hợp này, code sử dụng return:

foreach ( files[id] as $index => $file ) {
    if ( ! $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
        return;
    }
    // ...
    if ( ! $this->is_file_type_valid( $field, $file ) ) {
        $ajax_handler->add_error(
            $id,
            esc_html__( 'This file type is not allowed.', 'elementor-pro' )
        );
    }
}

return ở đây không chỉ bỏ qua file hiện tại mà kết thúc toàn bộ hàm validation.

Trong khi đó, process_field() lại xử lý cùng trường hợp bằng continue:

foreach ( files[id] as $index => $file ) {
    if ( UPLOAD_ERR_NO_FILE === $file['error'] ) {
        continue;
    }
    // ... file được xử lý và di chuyển
}

continue chỉ bỏ qua phần tử hiện tại, sau đó vòng lặp vẫn tiếp tục với các phần tử phía sau.

Chính sự khác biệt rất nhỏ này tạo ra vấn đề trong lỗ hổng CVE-2026-32475.

lỗ hổng CVE-2026-32475

Từ validation bypass đến RCE trong CVE-2026-32475

Điểm quan trọng tiếp theo nằm ở vị trí file được lưu.

Trong process_field(), Elementor Pro tạo tên file mới và giữ lại extension của file được upload:

$file_extension = pathinfo( $file['name'], PATHINFO_EXTENSION );
$uploads_dir = $this->get_ensure_upload_dir();
$filename = uniqid() . '.' . $file_extension;
$filename = wp_unique_filename( $uploads_dir, $filename );
$new_file = trailingslashit( $uploads_dir ) . $filename;
$move_new_file = Plugin::instance()
    ->php_api
    ->move_uploaded_file( $file['tmp_name'], $new_file );

 

Theo phân tích kỹ thuật của Patchstack về CVE-2026-32475, file cuối cùng được lưu tại:

wp-content/uploads/elementor/forms/

Đây là thư mục có thể truy cập từ web. Vì vậy, khi attacker có thể đưa một file PHP tới bước xử lý này, cuộc tấn công không còn dừng ở File Upload mà có thể dẫn tới Remote Code Execution.

Attack chain có thể tóm tắt:
Unauthenticated → File Upload → Validation Bypass → PHP file được lưu → RCE

Patchstack đánh giá vulnerability này ở mức CVSS 9.0, trong khi Wordfence đánh giá 9.8, đồng thời xác định đây là một unauthenticated arbitrary file upload dẫn đến remote code execution.

Điểm đáng chú ý của CVE-2026-32475 nằm ở chỗ cơ chế blacklist extension vẫn tồn tại. Vấn đề không đơn giản là plugin không kiểm tra file PHP, mà nằm ở cách các thành phần khác nhau xử lý cùng một dữ liệu theo những quy tắc khác nhau.

Chính sự khác biệt trong control flow đã tạo ra khoảng cách giữa kiểm tra và thực thi, biến một chức năng File Upload có cơ chế bảo vệ thành một attack path tiềm ẩn dẫn tới RCE.

attack flow của lỗ hổng CVE-2026-32475

Kỹ sư VietSunshine ghi dấu với phát hiện CVE-2026-32475

CVE-2026-32475 được phát hiện và báo cáo bởi hai kỹ sư Tín Phạm (TF1T)Trọng Phạm (dtro) - kỹ sư bảo mật của VietSunshine - thông qua chương trình Bug Bounty của Patchstack. Đáng chú ý, CVE-2026-32475 hiện đang được xếp hạng #1 tại Wordfence Bounty Hall of Fame – một dấu ấn nổi bật đối với hoạt động nghiên cứu và phát hiện lỗ hổng bảo mật trong hệ sinh thái WordPress.

CVE-2026-32475 - lỗ hổng trong Elementor Pro
Lỗ hổng CVE-2026-32475 hiện đang được xếp hạng #1 tại Wordfence Bounty Hall of Fame

Wordfence cho biết Hall of Fame là nơi ghi nhận những bounty đáng chú ý được trao trong chương trình Bug Bounty. Trang này cũng mô tả chương trình dành cho các nhà nghiên cứu phát hiện những lỗ hổng có tác động đáng kể tới tính bảo mật của hệ sinh thái WordPress.

Khuyến nghị xử lý lỗ hổng

1. Cập nhật Elementor Pro ngay lập tức

Quản trị viên website đang sử dụng Elementor Pro nên kiểm tra phiên bản hiện tại và nâng cấp lên 4.2.2 hoặc mới hơn. Đây là biện pháp quan trọng nhất để loại bỏ lỗ hổng.

Theo Patchstack, bản vá đã điều chỉnh cách hai vòng lặp xử lý file rỗng, đồng thời phiên bản mới còn thực hiện kiểm tra extension ngay trong bước xử lý file trước khi file được ghi xuống máy chủ.

2. Kiểm tra thư mục upload

Đối với những website từng sử dụng phiên bản Elementor Pro bị ảnh hưởng, việc cập nhật plugin là cần thiết nhưng chưa nên dừng lại ở đó.

Quản trị viên nên kiểm tra:

wp-content/uploads/elementor/forms/

để tìm các file bất thường, đặc biệt là những file có extension như .php, .phtml hoặc các loại file thực thi không phù hợp với chức năng của form. Patchstack cũng khuyến nghị rà soát thư mục này đối với các website đã chạy phiên bản dễ bị ảnh hưởng.

3. Kiểm tra lại các biểu mẫu có chức năng upload

Do điều kiện khai thác liên quan trực tiếp tới File Upload field, doanh nghiệp nên rà soát các biểu mẫu Elementor Pro đang được public trên website. Đặc biệt cần lưu ý những form tuyển dụng, hỗ trợ khách hàng hoặc các form cho phép người dùng bên ngoài gửi tài liệu.

4. Không cho phép thực thi mã trong thư mục upload

Ngoài việc cập nhật plugin, doanh nghiệp nên xem xét cấu hình máy chủ để ngăn việc thực thi PHP trong các thư mục upload. Đây là một lớp phòng vệ bổ sung nhằm hạn chế tác động nếu một file không mong muốn lọt vào khu vực lưu trữ.

Disclosure timeline của lỗ hổng CVE-2026-32475

Quá trình phát hiện, xử lý và công bố lỗ hổng CVE-2026-32475 diễn ra qua các mốc:

  • 16/07/2026: Vulnerability được gửi tới Patchstack.
  • 16/07/2026: Patchstack xác nhận report, liên hệ vendor và gán CVE-2026-32475.
  • 17/07/2026: Vendor bắt đầu chuẩn bị bản vá.
  • 03/08/2026: Patchstack review bản vá và xác nhận root cause đã được xử lý.
  • 19/08/2026: Elementor Pro 4.2.2 được phát hành.
  • 19/08/2026: Technical advisory được công bố.

Thông tin từ Wordfence cũng cho thấy lỗ hổng arbitrary file upload trong Elementor Pro đã được vendor khắc phục. Người dùng có thể tham khảo thêm phân tích tại Wordfence – Critical Arbitrary File Upload Vulnerability Patched in Elementor Pro WordPress Plugin.

Dịch vụ Pentest tại VietSunshine

Đối với đội ngũ VietSunshine, việc săn tìm và nghiên cứu các lỗ hổng bảo mật thế hệ mới không đơn thuần là hoạt động chuyên môn. Đó là hành trình đào sâu tri thức, chinh phục thử thách và liên tục bứt phá giới hạn phân tích.

Mỗi dấu vết lỗ hổng được bóc tách chính là nguồn tư liệu thực chiến quý giá, giúp các kỹ sư mài giũa tư duy sắc bén. Chính năng lực chuyên sâu này là điểm tựa vững chắc để VietSunshine kiên cố hóa hàng rào bảo mật cho khách hàng.

Đồng thời, việc chủ động tìm kiếm và công bố lỗ hổng trước khi bị kẻ xấu khai thác chính là sứ mệnh của chúng tôi trong việc xây dựng một không gian mạng an toàn hơn.

Đừng chờ đến khi lỗ hổng trở thành sự cố. Hãy để Dịch vụ An toàn Thông tin VietSunshine giúp bạn chủ động phát hiện, đánh giá và xử lý những điểm yếu tiềm ẩn trong hệ thống.

Xem thêm các dịch vụ an ninh mạng khác tại VietSunshine:

  1. Đánh giá và Tư vấn hồ sơ cấp độ
  2. Giám sát an toàn thông tin
  3. Red Teaming
  4. Điều tra và ứng cứu sự cố
  5. Thông tin mối đe dọa ANM
  6. Săn tìm mối đe dọa
  7. Kiểm tra cấu hình bảo mật