wp2shell: lỗi định tuyến của REST API batch dẫn tới SQL injection, rồi tới tài khoản quản trị
Hai lỗi trong WordPress core ghép lại thành một chuỗi không cần đăng nhập và không cần plugin: một request tới /wp-json/batch/v1 có thể chạm tới SQL injection trong WP_Query, rồi tạo tài khoản quản trị. Bản vá theo từng nhánh, không phải một con số duy nhất.
Chuyện gì xảy ra
CVE-2026-63030: endpoint batch /wp-json/batch/v1 xác định sai route khi nhiều lời gọi được gộp vào một request, nên một lời gọi có thể chạy dưới danh nghĩa của route khác.
CVE-2026-60137: tham số author__not_in của WP_Query không được lọc đúng, dẫn tới SQL injection khi plugin hoặc theme đưa dữ liệu người ngoài vào tham số đó.
Ghép lại, kẻ tấn công chưa đăng nhập đi qua endpoint batch để chạm tới SQL injection, rồi tạo tài khoản quản trị — trên một bản WordPress mặc định, không cần plugin nào. Các bản trước 6.8 không nằm trong dải ảnh hưởng.
Đường vào
POST /wp-json/batch/v1, hoặc?rest_route=/batch/v1khi REST API đi qua tham số. Endpoint có sẵn trên một bản WordPress mặc định, nên không cần điều kiện nào thêm.- Mã
207 Multi-Statustrong access log cho endpoint này nghĩa là request đã được xử lý, tức là đường lỗi đã được chạm tới — không chỉ là dò thăm. - Mu-plugin chặn theo tiền tố không che được đường này nếu danh sách tiền tố không có
/batch/v1: endpoint vẫn trả lời và vẫn xử lý request.
Mã nào đang chạy
- Core WordPress trên đĩa: bản vá là thay tệp core, không phải một tuỳ chọn cấu hình. Sửa một tệp trong theme không vá được lỗi này.
- Bản sao lưu và bản staging: chúng không phục vụ request nên không phải đường vào, nhưng vẫn là mã đọc được trên cùng máy.
- Container: với ảnh WordPress, core nằm trong volume được gắn vào; kéo ảnh mới không cập nhật volume đang giữ core.
Đang chạy, không phải đã cài
- Tệp core mới chỉ có hiệu lực khi PHP đọc lại tệp. Opcache thường tự kiểm tra thời điểm sửa, nhưng khởi động lại FPM là cách chắc chắn.
- Tự động cập nhật của WordPress có thể đã tắt hoặc hỏng: một site có thể nằm nguyên ở bản lỗi nhiều tuần sau khi bản vá đã phát hành. Đo phiên bản, đừng tin vào cơ chế tự cập nhật.
Bản bị ảnh hưởng và bản vá
| Sản phẩm | CVE | Bản bị ảnh hưởng | Bản vá |
|---|---|---|---|
| WordPress | CVE-2026-63030 | 7.0.x | 7.0.2 |
6.9.x | 6.9.5 | ||
| WordPress | CVE-2026-60137 | 7.0.x | 7.0.2 |
6.9.x | 6.9.5 | ||
6.8.x | 6.8.6 |
Tóm tắt giữ nguyên tiếng Anh như trong cảnh báo gốc.
Mô tả gốc (WordPress · CVE-2026-63030): WordPress 6.9.x before 6.9.5 and 7.0.x before 7.0.2 is affected by a REST API batch endpoint route confusion issue which, combined with the author__not_in WP_Query SQL Injection (CVE-2026-60137), could allow an attacker to perform SQL Injection and achieve Remote Code Execution.
Mô tả gốc (WordPress · CVE-2026-60137): WordPress 6.8.x before 6.8.6, 6.9.x before 6.9.5, and 7.0.x before 7.0.2 does not properly sanitise the author__not_in parameter of WP_Query, which could allow SQL Injection when a plugin or theme passes untrusted input to the parameter.
Cách xử lý
- Nâng theo đúng nhánh đang chạy, không nhảy qua nhiều bản lớn trên site đang phục vụ khách.
- Sau khi nâng: kiểm tra checksum của core, xem lại danh sách tài khoản quản trị, và tìm tệp PHP bị sửa sau ngày công bố.
- Nếu chưa nâng được: chặn
/wp-json/batch/v1và?rest_route=/batch/v1ở proxy hoặc WAF, và ghi lại mọi request tới đường đó.
Tự kiểm tra
wp core versionCho biết: bản core đang chạy
wp core verify-checksumsCho biết: tệp core có bị sửa không
wp user list --role=administrator --fields=ID,user_login,user_registeredCho biết: tài khoản quản trị và ngày tạo — tài khoản lạ sau ngày công bố là dấu hiệu
grep -c 'batch/v1' /var/log/apache2/access.logCho biết: số request tới endpoint batch; đọc mã trả về bên cạnh
wp plugin list --status=must-useCho biết: mu-plugin nào đang chặn đường nào
Nguồn
- CVE-2026-63030 — WordPress
- CVE-2026-60137 — WordPress
- WordPress.org releases
- NVD CVE-2026-63030
Viết từ cảnh báo gốc và tài liệu của nhà phát hành; phiên bản lấy từ dữ liệu của trang, cập nhật 10/11/2026. Khi có khác biệt, cảnh báo gốc là chuẩn.