Lỗi include tệp PHP cục bộ không cần xác thực trong WordPress Core có thể dẫn đến RCE có điều kiện

Lưu ý: Dữ liệu này chỉ có tính chất tham khảo, phục vụ nghiên cứu an ninh mạng.CyStack khuyến nghị người dùng không sử dụng các thông tin này nhằm các mục đích bất hợp pháp

Lỗ hổng CVE-2026-87902 là gì?

Lỗ hổng CVE-2026-87902 là lỗ hổng Improper Control of Filename for Include/Require Statement in PHP Program ('PHP Remote File Inclusion') ảnh hưởng tới WordPress (phiên bản bị ảnh hưởng: < 7.1.2). Lỗ hổng này được xếp hạng ở mức Cao, với điểm CVSS 8.1. Lỗ hổng này đã được ghi nhận khai thác trong thực tế.

Giới thiệu chung

Dữ liệu gốc

Kẻ tấn công không cần xác thực có thể khiến quá trình phân giải page-template của get_page_template() include một tệp .php cục bộ có thể đọc được do họ lựa chọn, nằm ngoài các thư mục theme đang hoạt động. Nếu các điều kiện tiên quyết liên quan đối với máy chủ và theme đang hoạt động đều được đáp ứng, điều này có thể dẫn đến RCE.

Sản phẩm và phạm vi ảnh hưởng

Dữ liệu affected có default_status là unaffected và đánh dấu các phiên bản thấp hơn bản sửa chính là bị ảnh hưởng. Advisory WordPress cung cấp phạm vi theo từng nhánh như sau:

  • Nhánh 7.1: 7.1.0 đến 7.1.1 bị ảnh hưởng; bản sửa là 7.1.2.
  • Nhánh 7.0: 7.0.0 đến 7.0.5 bị ảnh hưởng; bản sửa là 7.0.6.
  • Các nhánh 6.9 đến 6.0: 6.9.0 đến 6.9.8 sửa ở 6.9.9; 6.8.0 đến 6.8.9 sửa ở 6.8.10; 6.7.0 đến 6.7.8 sửa ở 6.7.9; 6.6.0 đến 6.6.8 sửa ở 6.6.9; 6.5.0 đến 6.5.11 sửa ở 6.5.12; 6.4.0 đến 6.4.11 sửa ở 6.4.12; 6.3.0 đến 6.3.11 sửa ở 6.3.12; 6.2.0 đến 6.2.12 sửa ở 6.2.13; 6.1.0 đến 6.1.13 sửa ở 6.1.14; 6.0.0 đến 6.0.15 sửa ở 6.0.16.
  • Các nhánh 5.9 đến 5.0: 5.9.0 đến 5.9.17 sửa ở 5.9.18; 5.8.0 đến 5.8.16 sửa ở 5.8.17; 5.7.0 đến 5.7.18 sửa ở 5.7.19; 5.6.0 đến 5.6.20 sửa ở 5.6.21; 5.5.0 đến 5.5.21 sửa ở 5.5.22; 5.4.0 đến 5.4.22 sửa ở 5.4.23; 5.3.0 đến 5.3.24 sửa ở 5.3.25; 5.2.0 đến 5.2.27 sửa ở 5.2.28; 5.1.0 đến 5.1.25 sửa ở 5.1.26; 5.0.0 đến 5.0.28 sửa ở 5.0.29.
  • Các nhánh 4.9 đến 4.7: 4.9.0 đến 4.9.32 sửa ở 4.9.33; 4.8.0 đến 4.8.31 sửa ở 4.8.32; 4.7.0 đến 4.7.36 sửa ở 4.7.37. Ngoài phạm vi và bản sửa được advisory hỗ trợ ở trên, không nên suy ra trạng thái của một nhánh song song hoặc phạm vi khác.

Chi tiết kỹ thuật

Thành phần bị lỗi là cơ chế phân giải page-template trong get_page_template() thuộc wp-includes/template.php. Theo advisory của nhà cung cấp và tài liệu nghiên cứu, dữ liệu pagename do kẻ tấn công kiểm soát có thể tồn tại sau quá trình sanitization ở dạng đã mã hóa rồi được giải mã khi WordPress tạo đường dẫn template, cho phép path traversal ra ngoài các thư mục theme đang hoạt động khi việc kiểm tra giới hạn đường dẫn không đầy đủ. Theme con hoặc theme cha đang hoạt động phải có một thư mục cấp cao nhất bắt đầu bằng page-. Tệp đích phải là tệp .php cục bộ tồn tại trên máy chủ và có thể đọc được bởi tài khoản web server. Chuỗi RCE được tài liệu hóa sử dụng pearcmd.php của PEAR và yêu cầu register_argc_argv được bật; advisory nêu official PHP Docker image và một số cấu hình cPanel mặc định là các ví dụ có điều kiện phù hợp. Bằng chứng hiện có chưa xác định được mức độ phổ biến của các điều kiện này trên mọi theme, bố cục máy chủ hoặc tệp đích, và khả năng LFI có thể tồn tại ngay cả khi chưa đáp ứng các điều kiện RCE.

Khả năng khai thác

  • Có thể truy cập qua mạng và không yêu cầu xác thực.
  • Không yêu cầu tương tác của người dùng.
  • Độ phức tạp khai thác cao vì cần đồng thời đáp ứng các điều kiện của WordPress theme và môi trường máy chủ.
  • Bản ghi được cung cấp đánh dấu lỗ hổng đã bị khai thác và có public exploit. Patchstack đã ghi nhận hoạt động khai thác thực tế, gồm các yêu cầu dò khả năng include và các nỗ lực sử dụng pearcmd.php để ghi tệp PHP.
  • Công cụ quét công khai cho lỗ hổng này đã được quan sát trong lưu lượng tấn công. Không phải mọi cài đặt WordPress đều được chứng minh là đạt tới RCE.

Tác động kỹ thuật

Khai thác thành công cho phép WordPress include một tệp PHP cục bộ được chọn bên ngoài các thư mục theme đang hoạt động. Điều này có thể làm lộ dữ liệu hoặc tạo tác động xử lý tùy thuộc nội dung của tệp và quyền đọc của web server. Khi có pearcmd.php, register_argc_argv được bật và các điều kiện liên quan khác, chuỗi được tài liệu hóa có thể chuyển primitive include thành ghi và thực thi PHP với quyền của tài khoản web server. Hệ quả tổ chức có thể gồm thay đổi nội dung hoặc cấu hình mà tài khoản đó được phép sửa, truy cập dữ liệu máy chủ khả dụng cho tài khoản và gián đoạn dịch vụ. Bằng chứng không xác lập việc leo thang đặc quyền ngoài tài khoản web server hoặc ảnh hưởng đến các hệ thống liên quan.

Tác động đến tổ chức

Việc include thành công có thể làm lộ hoặc làm thay đổi kết quả xử lý của các tệp PHP cục bộ mà tài khoản web server có thể đọc. Khi các điều kiện của chuỗi PEAR được đáp ứng, kẻ tấn công có thể ghi tệp PHP do mình kiểm soát và thực thi mã với quyền của tài khoản web server, tạo rủi ro đối với tính toàn vẹn, dữ liệu có thể truy cập và tính sẵn sàng của dịch vụ. Mức độ ảnh hưởng thực tế bị giới hạn bởi quyền của tài khoản web server; hồ sơ hiện có không chứng minh việc leo thang đặc quyền lên toàn bộ máy chủ. Hoạt động khai thác đã được ghi nhận, vì vậy các hệ thống chưa được sửa cần được rà soát log và máy chủ bên cạnh việc cập nhật.

Cách khắc phục

  1. Cập nhật WordPress Core lên bản sửa tương ứng với nhánh đang chạy: 7.1.2, 7.0.6, 6.9.9, 6.8.10, 6.7.9, 6.6.9, 6.5.12, 6.4.12, 6.3.12, 6.2.13, 6.1.14, 6.0.16, 5.9.18, 5.8.17, 5.7.19, 5.6.21, 5.5.22, 5.4.23, 5.3.25, 5.2.28, 5.1.26, 5.0.29, 4.9.33, 4.8.32 hoặc 4.7.37. Không thay thế bản sửa của một nhánh bằng giả định rằng mọi nhánh khác cũng đã được sửa.
  2. Nếu chưa thể cập nhật ngay, xác minh các điều kiện phơi nhiễm gồm thư mục cấp cao nhất bắt đầu bằng page- trong theme con hoặc theme cha đang hoạt động và cấu hình register_argc_argv. Tắt register_argc_argv có thể loại bỏ điều kiện của chuỗi PEAR-to-RCE được tài liệu hóa, nhưng không sửa lỗi local file inclusion và không thay thế việc cập nhật.
  3. Rà soát access log, error log và filesystem theo các kiểm tra trong detection, đặc biệt các yêu cầu traversal được mã hóa, truy cập pearcmd và tệp PHP bất thường trong /tmp hoặc /var/tmp.
  4. Nếu phát hiện bằng chứng include đã thực thi hoặc tệp PHP được ghi bởi yêu cầu đáng ngờ, xử lý hệ thống như có khả năng bị xâm phạm và thực hiện quy trình điều tra, cô lập và khôi phục phù hợp với quyền truy cập của web server.

Cách phát hiện

  1. Kiểm kê phiên bản và nhánh WordPress đang chạy, sau đó đối chiếu với các phạm vi bị ảnh hưởng và bản sửa trong affected_summary; không suy ra trạng thái an toàn chỉ từ việc một nhánh khác đã được sửa.
  2. Kiểm tra theme con và theme cha đang hoạt động để xác định có thư mục cấp cao nhất bắt đầu bằng page- hay không. Đây là điều kiện phơi nhiễm được advisory nêu, không phải bằng chứng riêng lẻ cho thấy máy chủ đã bị khai thác.
  3. Rà soát cấu hình PHP về register_argc_argv, đồng thời kiểm tra sự tồn tại và khả năng đọc của pearcmd.php để đánh giá điều kiện của chuỗi RCE được tài liệu hóa.
  4. Trong access log, tìm pagename chứa các dạng traversal được mã hóa như %2e%2e hoặc %252e%252e, tiền tố dạng templates%2f hoặc tên thư mục page- khác, đặc biệt khi xuất hiện cùng page_id trên site root hoặc /index.php, trong cả query string và POST body.
  5. Tìm các tham số hoặc chuỗi liên quan đến pearcmd, +config-show và +config-create, cùng các user agent cve-2026-87902-poc/1.0 và nuclei-cve-2026-87902/1.0. Đây là các chỉ dấu đã được quan sát, nhưng user agent có thể bị giả mạo.
  6. Kiểm tra /tmp và /var/tmp để tìm các tệp .php bất thường. Việc phát hiện tệp được tạo trong giai đoạn ghi tệp là dấu hiệu cần coi máy chủ có khả năng đã bị xâm phạm. Ngoài ra, phản hồi OPML hoặc RSS từ một URL trang thông thường có thể cho thấy việc include đã thực thi; việc không thấy các dấu hiệu này không chứng minh máy chủ an toàn.
Nguồn (18)
Tìm hiểu thêm

Kiểm tra chuyên sâu cùng giải pháp quản lý rủi ro Web toàn diện

Giải pháp CyStack VulnScan liên tục phát hiện tài sản, xác minh lỗ hổng và giúp đội ngũ bảo mật ưu tiên khắc phục cho toàn bộ doanh nghiệp.