You are currently viewing wp2shell-PoC: chain khai thác WordPress không cần đăng nhập, từ SQLi đến RCE

wp2shell-PoC: chain khai thác WordPress không cần đăng nhập, từ SQLi đến RCE

Hôm 15/10 vừa rồi, một repo tên wp2shell-PoC xuất hiện trên GitHub. Mô tả ngắn gọn: CVE-2026-63030 + CVE-2026-60137 exploit RCE chain. Nghĩa là nó demo cách ghép hai lỗ hổng trong WordPress Core lại thành một chuỗi khai thác cho phép kẻ tấn công không có tài khoản nào vẫn đi được từ bước dò lỗi đến khi chạy được lệnh trên server.

Repo này làm gì

Đây là một proof-of-concept bằng Python, kèm sẵn một CLI để kiểm tra và khai thác chuỗi lỗ hổng mà tác giả gọi là “wp2shell”. Chuỗi này gồm hai mắt xích:

  • CVE-2026-63030: lỗi route confusion trong endpoint batch REST của WordPress (/wp-json/batch/v1). Endpoint này nhận nhiều sub-request và dùng hai mảng $matches và $validation được đánh index theo vị trí. Khi một sub-request có path sai định dạng (ví dụ http://:), nó bị ghi vào $validation nhưng không vào $matches do có câu lệnh continue. Hai mảng lệch nhau từ đó, các request sau bị dispatch nhầm handler, permission check và schema validation bị bypass.
  • CVE-2026-60137: SQL injection trong WP_Query. Kết hợp với lỗi trên, kẻ tấn công đưa được một chuỗi author_exclude thô (không qua validate) vào thẳng câu SQL, dẫn tới blind injection kiểu UNION.

Phần còn lại của README mô tả khá chi tiết các bước leo thang: dùng SQLi trả về WP_Post giả, WordPress cache lại trong memory, các shortcode trong post giả khiến WordPress ghi dữ liệu thật vào bảng oembed_cache. Sau đó attacker giả mạo một customize_changeset với "user_id": 1 trong JSON, lợi dụng một cycle-detection gadget gọi wp_update_post() mà không ghi đè post_content. Apply changeset thì tạm thời có quyền admin. Tiếp theo là một post giả status parse type request để kích hoạt hook parse_request, replay lại batch request với quyền admin vừa mượn, lần này POST /wp/v2/users thành công và tạo ra admin mới. Cuối cùng là login bằng tài khoản admin mới và upload plugin độc hại để chạy lệnh tùy ý.

Nói ngắn: PoC này không chỉ chứng minh một lỗi đơn lẻ, nó chứng minh cả đường đi từ chưa đăng nhập đến RCE, có shell tương tác đàng hoàng.

Vì sao nó đang hot

485 sao trong 2 ngày, với một repo chỉ có vài file Python, là con số đáng để ý. Lý do chính khá rõ: WordPress chạy trên một phần lớn web toàn cầu, và một chuỗi lỗi cho phép RCE không cần xác thực là loại ai cũng muốn kiểm tra ngay xem site của mình có dính không.

Phạm vi ảnh hưởng mà README nêu: WordPress 6.9.0 đến 6.9.4 và 7.0.0 đến 7.0.1 dính lỗi; 6.9.5 và 7.0.2 trở lên đã fix. Nếu bạn đang chạy một trong các bản dính lỗi thì việc cần làm là update, không phải ngồi đọc tiếp.

Điểm khiến repo này khác các PoC CVE lẻ tẻ: nó viết sẵn CLI nhiều chế độ, từ check nhẹ nhàng cho đến shell tương tác, và có cả nhánh exploit pre-auth (không cần credential) lẫn nhánh dùng credential có sẵn. Cộng thêm việc tác giả dọn dẹp hậu quả (xóa plugin shell, xóa admin tạo ra) khiến nó giống một tool bug bounty hơn là một script chứng minh cho vui.

Cài đặt và dùng thử nhanh

Yêu cầu duy nhất theo README là Python 3.8 trở lên. Không có bước cài đặt phức tạp, chạy trực tiếp file script từ thư mục repo:

wp2shell.py http://victim.com

Chế độ mặc định là check: gửi một probe batch lành tính, phát hiện lỗi route confusion mà không chạy payload SQLi. Target dính lỗi sẽ trả về HTTP 207 kèm các pattern lỗi parse_path_failed, block_cannot_read, rest_batch_not_allowed.

wp2shell.py http://target.com --check

Muốn xác nhận thêm SQLi thì thêm cờ confirm:

wp2shell.py http://target.com --check --confirm-sqli

Chế độ read để đọc dữ liệu qua SQL injection, mặc định --technique auto sẽ thử lần lượt union, error, blind:

wp2shell.py http://target.com --read

Dump user và hash mật khẩu:

wp2shell.py http://target.com --read --preset users

Hoặc chạy query tùy ý:

wp2shell.py http://target.com --read --query "SELECT @@version"

Ép một kỹ thuật cụ thể khi auto không ăn:

wp2shell.py http://target.com --read --technique blind --query "SELECT user_login FROM wp_users LIMIT 1"

Chế độ shell, có hai nhánh. Nhánh có credential thì login bằng admin sẵn có rồi upload plugin shell:

wp2shell.py http://target.com --shell --user admin --password ' ' --cmd id

Nhánh pre-auth thì chạy full chain SQLi, tạo admin, login, upload shell:

wp2shell.py http://target.com --shell --cmd id

Đổi --cmd id thành --interactive nếu muốn shell tương tác. Theo README, plugin shell được upload với path random và token riêng mỗi lần chạy, sau đó tự xóa; tài khoản admin do bridge tạo ra cũng bị xóa sau khi shell kết thúc.

Ai nên dùng, dùng khi nào

Đối tượng rõ nhất là pentester và người làm bug bounty: cần kiểm tra nhanh một site WordPress trong scope xem có dính CVE-2026-63030 và CVE-2026-60137 không, rồi nếu dính thì lấy bằng chứng leo thang có kiểm soát. Các đội vận hành WordPress cũng có thể dùng chế độ check (không kèm confirm-sqli) để rà các site nội bộ trước khi patch.

Một số tình huống cụ thể: kiểm tra hộ khách hàng sau khi có thông báo CVE, xác minh bản patch 6.9.5 hoặc 7.0.2 đã thực sự chặn chain chưa, hoặc viết report bug bounty có PoC chạy được thay vì chỉ mô tả curl.

Không nên dùng trên site không thuộc quyền kiểm soát của mình. README cũng ghi rõ: tool chỉ cho mục đích học tập hoặc bug bounty, cấm dùng ngoài môi trường được kiểm soát.

Ưu điểm và hạn chế

Điểm mạnh dễ thấy: CLI rõ ràng, nhiều chế độ từ check đến shell, có pre-auth và post-auth, có auto fallback giữa ba kỹ thuật SQLi. Việc tác giả chủ động dọn dẹp artifact sau khi chạy là chi tiết nhiều PoC khác bỏ qua. Repo cập nhật liên tục trong hai ngày 15 và 17/10, tức là đang được maintain tích cực ở giai đoạn đầu.

Mặt hạn chế thì phải nói thẳng: repo không ghi license. Với doanh nghiệp muốn dùng nội bộ, đây là điểm cần cân nhắc trước khi đưa vào quy trình, bởi “không rõ license” thường đồng nghĩa với “không được phép dùng chính thức”. Tài liệu hiện chỉ có README, chưa có test suite hay hướng dẫn troubleshoot khi target chạy cấu hình lạ. Bản thân công cụ dựa trên một chain rất phức tạp, nên khi WordPress ra patch mới hoặc thay đổi code batch endpoint, khả năng cao PoC sẽ hỏng trước khi tác giả kịp cập nhật. Cũng cần nhớ: chạy chế độ read hay shell trên target thật là ghi dữ liệu vào database (admin mới, changeset, post giả), dù tool có dọn sau đó.

Tôi không so sánh với các tool khác vì chưa thấy PoC nào cho đúng cặp CVE này, và các scanner chung như WPScan chỉ nhận diện version chứ không chứng minh được chain.

Kết luận thực dụng

Nếu bạn đang chạy WordPress trong khoảng 6.9.0 đến 6.9.4 hoặc 7.0.0 đến 7.0.1, việc cần làm hôm nay là update lên 6.9.5 hoặc 7.0.2, không phải cài tool. Còn nếu bạn làm pentest hoặc bug bounty và cần một PoC chạy được cho chain CVE-2026-63030 với CVE-2026-60137, repo này đáng để clone về đọc code và thử trong lab. Chỉ cần nhớ: 485 sao trong hai ngày không thay thế được một license rõ ràng, và một chain RCE không cần auth thì luôn nên thử trên môi trường cách ly trước.

Repo: gichirimaku/wp2shell-PoC

Đăng ngày 20/10/2026
Giang Na
Về tác giả: Giang Na
Người lập ra blog từ 2015 với những bài về Blogspot. Giờ tập trung vào cách đưa AI vào việc thường ngày, theo hướng thực dụng và dễ làm theo.

Giang Na

Người lập ra blog từ 2015 với những bài về Blogspot. Giờ tập trung vào cách đưa AI vào việc thường ngày, theo hướng thực dụng và dễ làm theo.