Đầu tháng 9/2026, Wordfence công bố một lỗ hổng khá độc đáo trong plugin All-in-One WP Migration and Backup — plugin có hơn 5 triệu bản cài active. Lỗ hổng được định danh là CVE-2026-19949, điểm CVSS 8.8 (High), là dạng SQL Injection bậc hai (second-order SQL injection). Đáng chú ý là payload chỉ kích hoạt khi quản trị viên chạy lại bản backup/restore, nên nhiều bạn sẽ tưởng mình an toàn trong khi “quả bom” đã được cài sẵn trong database từ trước.
Mình đã theo dõi không ít vụ SQL injection ở plugin backup/migration, nhưng vụ này tiêu biểu cho một loại rủi ro mà rất ít người để ý: dữ liệu bị gieo trước, kích hoạt sau. Trong bài này, mình sẽ đi từ A đến Z: lỗ hổng hoạt động ra sao, cách kiểm tra website của bạn có dính không, cách vá, và cách rà soát dấu vết nếu nghi ngờ đã bị khai thác.
CVE-2026-19949 là lỗ hổng gì và nguy hiểm ra sao?

Đây là lỗ hổng SQL injection không cần xác thực (unauthenticated) nhưng hoạt động theo cơ chế hai giai đoạn. Điểm CVSS 8.8 do Wordfence đánh giá, ảnh hưởng đến toàn bộ phiên bản từ 7.109 trở xuống, đã được vá ở bản 7.110. Nguy hiểm nhất là kịch bản leo thang đến RCE — Remote Code Execution — tức kẻ tấn công chạy mã tùy ý trên server của bạn.
Cơ chế second-order SQL injection hoạt động như thế nào?
Kịch bản tấn công gồm hai bước, và chính điều này khiến nó khó phát hiện hơn SQL injection thông thường.
Bước 1 — Gieo payload (không cần đăng nhập): kẻ tấn công gửi trackback chứa nội dung được chế tạo đặc biệt đến một bài viết public của bạn. Dữ liệu này nằm im trong database, hoàn toàn vô hại ở thời điểm đó. Không có alert, không có log đáng ngờ.
Bước 2 — Kích hoạt khi restore: khi bạn (hoặc ai đó) xuất khẩu site bằng All-in-One WP Migration rồi nhập lại, plugin sẽ viết lại các giá trị bên trong câu lệnh SQL. Lỗi ở cách plugin xác định ranh giới chuỗi khiến nội dung của kẻ tấn công thoát ra khỏi string literal và trở thành SQL thực thi.
Sau khi chèn SQL thành công, kẻ tấn công có thể đọc secret key của plugin từ database, rồi dùng key đó điều khiển chức năng import với một file archive được chế tạo — dẫn đến RCE trong lúc restore. Bạn có thể đọc bản phân tích đầy đủ của Wordfence để hiểu sâu hơn phần technical.
Làm sao kiểm tra website có đang chạy phiên bản lỗi không?
Cách nhanh nhất là dùng WP-CLI. SSH vào server rồi chạy:
wp plugin list --status=active | grep all-in-one-wp-migration
# Hoặc xem chi tiết phiên bản
wp plugin get all-in-one-wp-migration --fields=name,version,statusNếu bạn không rành SSH, mở wp-admin rồi vào Plugins > Installed Plugins, tìm “All-in-One WP Migration” và nhìn cột Version. Phiên bản 7.109 hoặc thấp hơn nghĩa là đang bị dính lỗi.
Cách cập nhật lên bản 7.110 an toàn ra sao?
Trường hợp này vá khá đơn giản vì bản fix đã có sẵn. Tuy nhiên mình vẫn khuyên làm theo đúng trình tự, vì đây đúng là plugin backup/migration — thứ bạn không muốn làm hỏng giữa chừng:
Bước 1: Tạo backup thủ công trước khi cập nhật (dùng UpdraftPlus, hoặc dump database bằng wp db export backup-pre-7110.sql).
Bước 2: Cập nhật plugin:
wp plugin update all-in-one-wp-migration
# Xác nhận lại phiên bản
wp plugin get all-in-one-wp-migration --field=version
# Kết quả phải là 7.110 trở lênBước 3: Nếu site đang ở sau WAF (Cloudflare, Wordfence, LiteSpeed WAF), kiểm tra xem vendor đã có rule chặn CVE-2026-19949 chưa. Wordfence đã push firewall rule theo lịch staged cho khách hàng của họ.
Bước 4: Tắt trackback/trackback spam nếu bạn không dùng — đây chính là cửa vào của bước gieo payload:
wp option update default_pingback_flag 0
wp option update default_ping_status closedNghi ngờ bị khai thác thì rà soát dấu vết thế nào?
Vì payload được gieo qua trackback, bạn cần soi bảng wp_comments tìm comment loại trackback/pingback có nội dung bất thường:
wp db query "SELECT comment_ID, comment_author, comment_author_IP, comment_date, LEFT(comment_content,120) AS snippet FROM wp_comments WHERE comment_type IN ('trackback','pingback') ORDER BY comment_date DESC LIMIT 50;"Nhìn kỹ các đoạn có chuỗi lạ như dấu nháy đơn lặp, SELECT, UNION, hoặc hex string dài. Tiếp đó kiểm tra bảng wp_options xem secret key của plugin có bị thay đổi bất thường không, và review access log các request đến wp-trackback.php trong vài tháng gần đây. Nếu từng restore site trong giai đoạn đó, hãy xem xét đổi toàn bộ mật khẩu, salt key trong wp-config.php, và quét malware toàn diện.
SQL injection plugin nào khác cần cập nhật gấp?
Song song với CVE-2026-19949, Patchstack cũng liệt kê vài advisory SQL injection khác bạn nên rà:
- Charitable (CVE-2026-81287) — cập nhật lên 1.8.12.2 trở lên
- WP Data Access (CVE-2026-81293) — cập nhật lên 5.5.82 trở lên
- Smart Marketing SMS and Newsletters Forms (CVE-2026-81756) — cập nhật lên 5.1.25 trở lên
- Throws SPAM Away (CVE-2026-81763) — cập nhật lên 3.9 trở lên
Một lệnh tổng rà nhanh:
wp plugin list --update=availableTrách nhiệm của người quản trị site là gì?
Theo mình, bài học lớn nhất từ vụ này là: đừng bao giờ coi plugin backup/migration là “vùng an toàn tuyệt đối”. Chính vì plugin này chạm trực tiếp vào database nên một lỗi parsing nhỏ cũng đủ biến file backup của bạn thành vector tấn công. Với 5 triệu site đang dùng, kẻ tấn công có mồi rất lớn để gieo payload hàng loạt rồi kiên nhẫn chờ từng site restore.
Về lâu dài, mình giữ thói quen: tắt trackback ở mọi site khách hàng, cập nhật plugin trong 48 giờ kể từ khi có advisory critical, và ưu tiên các nền tảng có virtual patching như mình đã phân tích trong bài FlyWP tích hợp Patchstack. Kết hợp với việc nâng cấp PHP 8.x và quét định kỳ, bạn đã có lớp phòng thủ khá vững so với đa số site WordPress hiện nay. Còn nếu bạn từng dùng All-in-One WP Migration mà chưa cập nhật — hãy dừng lại 5 phút, chạy lệnh kiểm tra phía trên, và vá ngay hôm nay.
