XSS2Shell CVE-2026-64638: Lỗ Hổng XSS Trang Login WordPress Và Hướng Dẫn Vá, Rà Soát A-Z

Câu trả lời nhanh
XSS2Shell (CVE-2026-64638, CVSS 8.9) là lỗ hổng XSS phản chiếu tại trang wp-login.php của WordPress core, ảnh hưởng mọi phiên bản, không cần xác thực. Từ XSS, kẻ tấn công có thể tạo Application Password qua một click của admin rồi upload plugin ZIP để chạy mã PHP. Bản vá đã phát hành ngày 6/8/2026 trong WordPress 7.0.3, backport về nhánh 4.7. Kiểm tra bằng wp core version và cập nhật ngay nếu chưa lên 7.0.3.

Cuối tháng 8/2026, đội nghiên cứu pwn.ai công bố chuỗi tấn công mang tên XSS2Shell: một lỗ hổng XSS phản chiếu ngay tại trang đăng nhập (wp-login.php) của WordPress core, đánh số CVE-2026-64638 với điểm CVSS 8.9. Đáng nói là lỗ hổng này ảnh hưởng đến mọi phiên bản WordPress, không cần attacker có bất kỳ quyền hạn nào, và pwn.ai đã chứng minh đường leo thang từ XSS lên chạy mã PHP trên server chỉ bằng một click của quản trị viên. Mình sẽ đi qua chi tiết kỹ thuật, cách kiểm tra site của bạn đang an toàn hay chưa, và các bước xử lý từ A đến Z bằng WP-CLI.

XSS2Shell là gì và nghiêm trọng đến mức nào?

Minh họa lỗ hổng XSS2Shell CVE-2026-64638 trên trang đăng nhập WordPress

XSS2Shell là chuỗi tấn công do hệ thống AI tự động của công ty pwn.ai phát hiện trong 4 ngày, bắt đầu từ nghiên cứu Same Origin Method Execution (SOME) của Paulos Yibelo năm 2022. Điểm khởi đầu là lỗi ở trang wp-login.php: khi đăng nhập thất bại, WordPress hiển thị lại tên người dùng trên trang lỗi. Chuỗi ký tự giống thẻ HTML chứa khoảng trắng sau dấu < có thể vượt qua hàm sanitize_user()wp_strip_all_tags(), sau đó được wp_kses_post() diễn giải thành HTML hợp lệ. Kết quả: attacker kiểm soát được các phần tử DOM sống trên trang lỗi đăng nhập.

Vì sao một XSS ở trang login lại chạy được mã PHP?

Trên wp-login.php, WordPress còn nạp sẵn file user-profile.js (vì trang này xử lý đặt lại mật khẩu). Script này mong đợi một số input không tồn tại ở trang login, khiến hai biến phân giải thành undefined và vượt qua phép so sánh bình đẳng. Tiếp đó, biến ajaxurl vốn không định nghĩa có thể bị “clobber” bằng một DOM element attacker chèn vào, hướng JavaScript của chính WordPress tới một REST request same-origin do kẻ tấn công chọn. kết hợp với hỗ trợ JSONP của REST API, JavaScript cuối cùng thực thi ngay trong origin của site. pwn.ai cho biết CSP dạng nonce với strict-dynamic cũng không chặn được đường này.

Đường từ XSS lên RCE diễn ra như thế nào?

Từ vị trí XSS, pwn.ai dùng kỹ thuật SOME để gọi điều khiển phê duyệt Application Password trong phiên của quản trị viên đang đăng nhập. WordPress khi đó tạo một API credential và chuyển hướng nó tới success_url do attacker kiểm soát. Với credential này, họ gọi REST API để đăng một page chứa JavaScript same-origin; khi admin mở page đó, script lấy nonce plugin-upload và upload một file ZIP chứa mã độc. PHP trong plugin đó có thể được gọi trực tiếp, thậm chí không cần kích hoạt plugin. Điều kiện duy nhất: nạn nhân phải là Administrator đang đăng nhập và click một link do attacker chuẩn bị.

WordPress đã vá chưa và site của bạn có nằm trong vùng nguy hiểm không?

Đã vá từ ngày 6/8/2026 ở bản WordPress 7.0.3, và bản vá được backport về tận nhánh 4.7. Các site bật auto-update nền thường đã tự nhận bản vá. Tuy nhiên theo quan điểm của mình, cứ kiểm tra bằng lệnh cho chắc — không nên tin tuyệt đối vào cơ chế tự động, đặc biệt khi bạn dùng hosting chặn cron hoặc cache plugin can thiệp. Kiểm tra phiên bản hiện tại:

wp core version --path=/var/www/example.com/public_html
# In thêm phiên bản DB và status cập nhật
wp core check-update --path=/var/www/example.com/public_html

Nếu kết quả trả về dưới 7.0.3 (hoặc nhánh 6.x/5.x chưa nhận backport tương ứng), site bạn vẫn đang lộ XSS này.

Cách cập nhật WordPress core an toàn bằng WP-CLI?

Mình luôn làm theo trình tự quen: backup trước, update sau, verify cuối cùng. Chạy với quyền của user webserver:

# 1. Backup database và file
sudo -u www-data wp db export backup-pre-703.sql --path=/var/www/example.com/public_html
tar -czf backup-wp-$(date +%F).tar.gz /var/www/example.com/public_html

# 2. Cập nhật core (bao gồm cả bản dịch)
sudo -u www-data wp core update --path=/var/www/example.com/public_html
sudo -u www-data wp core update-db --path=/var/www/example.com/public_html

# 3. Xóa cache nếu có
sudo -u www-data wp cache flush --path=/var/www/example.com/public_html

# 4. Xác nhận phiên bản
sudo -u www-data wp core version --path=/var/www/example.com/public_html

Nếu bạn chưa từng thao tác rollback khi cập nhật lỗi, xem lại hướng dẫn rollback WordPress khi nâng cấp lỗi của mình để có kịch bản dự phòng trước khi nhấn update.

Cách rà soát dấu vết nếu site đã từng bị lợi dụng?

Với lỗ hổng kiểu này, dấu vết đọng lại thường nằm ở Application Password lạ, page nháp chứa script, plugin ZIP không rõ nguồn gốc. Rà nhanh bằng WP-CLI:

# Liệt kê Application Password của từng user
sudo -u www-data wp user list --fields=ID,user_login --path=/var/www/example.com/public_html
sudo -u www-data wp db query "SELECT user_id, name, created FROM wp_usermeta JOIN wp_application_passwords ..." --path=/var/www/example.com/public_html

# Liệt kê plugin và thời gian thêm mới (so với ngày 6/8)
sudo -u www-data wp plugin list --path=/var/www/example.com/public_html

# Tìm page/post недавно chứa thẻ script khả nghi
sudo -u www-data wp db query "SELECT ID, post_title, post_date, post_status FROM wp_posts WHERE post_content LIKE '%<script%' ORDER BY post_date DESC LIMIT 20;" --path=/var/www/example.com/public_html

Đồng thời kiểm tra wp-config.php xem có key hay credential nào bị thay đổi, và xem access log những request POST tới /wp-json/ hoặc wp-admin/update.php bất thường quanh nửa đầu tháng 8. Cách triển khai kiểm tra từng bước tương tự mình đã chia sẻ trong bài hướng dẫn tự kiểm tra secure hosting WordPress.

Ngoài việc vá, bạn nên làm gì để phòng thủ lớp sau?

WordPress khuyên các biện pháp hardening không thay thế được bản vá, và mình hoàn toàn đồng ý. Nhưng phòng thủ theo tầng vẫn đáng làm: giới hạn truy cập wp-login.php theo IP ở tầng Nginx/Cloudflare, bật xác thực hai yếu tố cho admin, rà soát định kỳ Application Password và gỡ những cái không dùng. Với admin duy trì thói quen đăng nhập lâu dài, một session bị mượn chỉ cần một click sai là mất server.

Kết luận: vá ngay hôm nay, đừng đợi auto-update

CVE-2026-64638 là ví dụ điển hình cho thấy một XSS “vặt” ở trang login có thể trở thành chìa khóa chạy mã PHP trên server. Việc vá chỉ tackle vài phút với WP-CLI, trong khi hậu quả nếu bị khai thác là toàn bộ database credential, file và mật khẩu lộ sáng. Kiểm tra phiên bản ngay hôm nay, cập nhật lên 7.0.3 trở lên nếu chưa, và rà lại Application Password như một thói quen định kỳ.

Thanh Tùng

Mình là Thanh Tùng. Bạn bè gọi mình là "bác sĩ máy tính" vì hễ máy nào có vấn đề là mình muốn mò vào xem sao. Mình viết hướng dẫn theo cách mà mình mong người khác đã viết cho mình ngày xưa — từng bước rõ ràng, không bỏ sót, và nói luôn cái gì hay bị lỗi. Ngoài giờ làm mình chơi guitar, nuôi mèo, và có một con VPS riêng dành riêng cho việc cài thử đủ thứ linh tinh.

Xem tất cả bài viết →

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *