NỘI DUNG
WordPress vừa vá một lỗ hổng bảo mật cực kỳ nghiêm trọng nằm ngay trong phần lõi (core), cho phép kẻ tấn công không cần bất kỳ tài khoản hay đăng nhập nào vẫn có thể thực thi mã tùy ý trên website. Đáng lo ngại hơn, lỗ hổng này tồn tại ngay cả trên một bản cài đặt WordPress “sạch”, không cài thêm plugin nào.
Lỗ hổng được đặt tên wp2shell, hiện đã được gán CVE:
- CVE-2026-63030 — lỗi nhầm lẫn route trong batch API của REST API
- CVE-2026-60137 — lỗi SQL injection trong lõi WordPress
Khi kết hợp cả hai, một request ẩn danh có thể đi thẳng đến khả năng thực thi mã từ xa (RCE) mà không cần điều kiện tiên quyết nào.
Phạm vi ảnh hưởng:
| Phiên bản | Mức độ | Đã vá tại |
|---|---|---|
| 6.8.0 – 6.8.5 | Chỉ dính SQL injection | 6.8.6 |
| 6.9.0 – 6.9.4 | Toàn bộ chuỗi RCE | 6.9.5 |
| 7.0.0 – 7.0.1 | Toàn bộ chuỗi RCE | 7.0.2 |
Nhánh 7.1 beta2 đã tích hợp sẵn cả hai bản vá. Do nhánh 6.9 ra mắt từ tháng 12/2025, mọi website bị ảnh hưởng bởi chuỗi RCE đều đang chạy một phiên bản chưa đầy 8 tháng tuổi.
Bạn có thể đọc phân tích chi tiết về cơ chế, mức độ nguy hiểm và bối cảnh phát hiện lỗ hổng tại bài viết gốc: 👉 wp2shell – Lỗ hổng nghiêm trọng trong lõi WordPress cho phép chiếm quyền không cần đăng nhập
Việc cần làm ngay
Nếu website của bạn đang chạy WordPress 6.9.0 – 6.9.4 hoặc 7.0.0 – 7.0.1, hãy cập nhật ngay lên phiên bản mới nhất (6.9.5 / 7.0.2 hoặc mới hơn). Đây là giải pháp duy nhất triệt để. Nếu site đang ở nhánh 6.8, cũng nên lên 6.8.6 để vá lỗi SQL injection đi kèm.
WordPress đã bật cơ chế cập nhật bắt buộc qua hệ thống auto-update, nhưng chưa rõ cơ chế này có áp dụng cho các site đã tắt tự động cập nhật hay không — vì vậy đừng chủ quan, hãy tự kiểm tra phiên bản thực tế đang chạy trên site của mình.
Ngoài việc tự kiểm tra phiên bản, bạn cũng có thể dùng công cụ kiểm tra online tại wp2shell.com để xem site của mình có đang nằm trong diện bị ảnh hưởng hay không.
Nếu chưa thể cập nhật ngay: chặn tạm endpoint batch API
Cả hai bug chỉ gộp thành chuỗi RCE khi kẻ tấn công chạm được vào endpoint /wp-json/batch/v1 mà không cần đăng nhập. Chặn được đường này ở tầng web server/WAF sẽ cắt đứt nhánh khai thác ẩn danh, dùng như biện pháp câu giờ trong lúc chờ update. Lưu ý: cách này không vá được lỗi SQL injection gốc, chỉ chặn nhánh khai thác không cần đăng nhập, và có thể ảnh hưởng đến các tích hợp hợp lệ đang dùng REST API — chỉ nên áp dụng tạm thời.
Apache (.htaccess)
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-json/batch/v1/?$ [NC,OR]
RewriteCond %{QUERY_STRING} (^|&)rest_route=/batch/v1(&|$) [NC]
RewriteRule ^ - [F,L]NGINX
location = /wp-json/batch/v1 {
return 403;
}
if ($query_string ~* "rest_route=/batch/v1") {
return 403;
}Cloudflare (WAF Custom Rule)
(http.request.uri.path eq "/wp-json/batch/v1")
or
(http.request.uri.query contains "rest_route=/batch/v1")Ba cách trên đều nhắm vào cùng một mục tiêu: chặn cả dạng path lẫn dạng query-string của batch endpoint, vì nếu chỉ chặn một trong hai, kẻ tấn công vẫn có thể lách qua đường còn lại.
Một vài lưu ý khi triển khai
Nếu site dùng permalink dạng plain (không phải pretty permalink), route REST có thể được gọi qua dạng /index.php/wp-json/batch/v1 hoặc /index.php?rest_route=/batch/v1 — nên kiểm tra thêm biến thể này để rule không bị lọt.
Rule Cloudflare dùng contains mặc định phân biệt hoa/thường; nên bọc thêm lower() quanh http.request.uri.query để chặt hơn.
Nên test trên môi trường staging trước khi áp dụng production, vì một số plugin (ví dụ Gutenberg hoặc các plugin quản lý nội dung hàng loạt) có thể đang dùng batch endpoint hợp lệ.
Các lựa chọn khác
Ngoài việc chặn ở WAF/web server, còn hai cách khác cũng đến từ cùng nguyên tắc chặn truy cập ẩn danh vào batch endpoint:
Tắt hoàn toàn WordPress REST API nếu site không cần dùng đến — cách này triệt để nhưng sẽ vô hiệu hóa toàn bộ truy cập REST API ẩn danh, có thể ảnh hưởng plugin/theme phụ thuộc vào nó.
Cài một plugin nhỏ chặn request ẩn danh tới /batch/v1 thông qua hook rest_pre_dispatch.
Kết luận
wp2shell là lỗ hổng nằm ngay trong lõi WordPress, không phải plugin hay theme, nên ảnh hưởng đến rất nhiều website — kể cả những site không cài thêm bất kỳ plugin nào. Việc chặn batch endpoint ở WAF hoặc web server là biện pháp phòng thủ tạm thời hữu ích, nhưng không thay thế được việc cập nhật WordPress lên phiên bản đã vá. Hãy kiểm tra phiên bản đang chạy trên site của bạn ngay hôm nay và cập nhật càng sớm càng tốt.
Gợi ý: Nếu website chưa kịp vá và đã có dấu hiệu bị khai thác, Anh có thể tham khảo dịch vụ xử lý mã độc WordPress để được kiểm tra, làm sạch mã độc, gỡ redirect bẩn và hardening lại website sau khi xử lý.
Với kinh nghiệm thực chiến từ việc tiếp xúc hàng ngày với vô vàn vấn đề về Website, Hosting, VPS, Server tại Phòng Kỹ thuật AZDIGI, mình luôn ấp ủ niềm đam mê chia sẻ kiến thức.
Mình xây dựng các blog không chỉ để tự trau dồi kỹ năng mà còn để cung cấp những tài liệu, hướng dẫn hữu ích nhất đến cộng đồng. Rất mong nhận được sự quan tâm của các bạn!
Để lại thông tin, mình sẽ phản hồi ngay.
