17 triệu lần tấn công chỉ trong vài ngày. Đó là con số Wordfence ghi nhận được trên plugin Gravity SMTP — một plugin gửi email WordPress có hơn 100.000 cài đặt đang hoạt động. Lỗi CVE-2026-4020 cho phép bất kỳ ai cũng đọc được API key, OAuth token và toàn bộ cấu hình server của bạn chỉ bằng một câu lệnh GET đơn giản. Mình sẽ hướng dẫn bạn kiểm tra, fix và xoay vòng chứng nhận từ A đến Z.
Gravity SMTP CVE-2026-4020 Là Gì Và Tại Sao Nó Nguy Hiểm?
CVE-2026-4020 là lỗi Sensitive Information Exposure trong plugin Gravity SMTP, ảnh hưởng tất cả phiên bản đến 2.1.4. Nguyên nhân là một REST API endpoint tại /wp-json/gravitysmtp/v1/tests/mock-data được cấu hình permission_callback trả về true không điều kiện — nghĩa là không cần đăng nhập, không cần quyền gì, bất kỳ ai cũng truy cập được.
Khi attacker thêm tham số ?page=gravitysmtp-settings vào endpoint này, plugin trả về khoảng 365KB JSON chứa toàn bộ System Report: phiên bản PHP, web server, đường dẫn document root, chi tiết database, tất cả plugin và theme đang hoạt động, và nguy hiểm nhất là API key và OAuth token của các tích hợp email như Amazon SES, Google, Mailjet, Resend, Zoho.
Điều khiến mình lo lắng nhất là cuộc tấn công này dễ thực hiện đến mức chỉ cần một request GET đơn giản. Không cần hack phức tạp, không cần credentials. Wordfence đã chặn 17 triệu lần tấn công, với đỉnh cao ngày 7/6/2026 đạt 4 triệu lần trong một ngày.
Cách Kiểm Tra Site Có Đang Chạy Phiên Bản Nguy Hiểm Không?
Bạn làm theo 3 bước sau để kiểm tra nhanh:
Bước 1: Đăng nhập vào wp-admin, vào menu Plugins > Installed Plugins. Tìm dòng Gravity SMTP và xem số phiên bản.
Bước 2: Nếu bạn không thấy Gravity SMTP trong danh sách, site của bạn không bị ảnh hưởng. Nếu có và phiên bản nhỏ hơn hoặc bằng 2.1.4, site bạn đang ở trạng thái nguy hiểm.
Bước 3: Kiểm tra nhanh bằng WP-CLI nếu bạn có quyền truy cập SSH:
wp plugin list --status=active | grep gravitysmtpNếu kết quả trả về phiên bản nhỏ hơn 2.1.5, bạn cần update ngay lập tức.
Hướng Dẫn Update Gravity SMTP Lên 2.1.5 An Toàn Từng Bước
Đừng update vội. Bạn hãy làm theo quy trình 5 bước mà mình thường dùng để update bất kỳ plugin nào liên quan đến bảo mật:
Bước 1 — Backup: Luôn sao lưu trước khi update. Dùng UpdraftPlus hoặc lệnh WP-CLI:
# Backup database
wp db export /tmp/backup_$(date +%Y%m%d).sql
# Backup plugins folder
tar -czf /tmp/plugins_backup_$(date +%Y%m%d).tar.gz wp-content/plugins/gravitysmtp/Bước 2 — Tắt cache: Vào plugin cache (LiteSpeed Cache, WP Rocket, hoặc W3 Total Cache) và xóa toàn bộ page cache. Việc này giúp bạn nhận biết lỗi sau update (nếu có) thay vì xem trang cũ.
Bước 3 — Update plugin:
# Bằng WP-CLI
wp plugin update gravitysmtp
# Hoặc từ wp-admin: Plugins > Installed Plugins > click "Update Now" trên Gravity SMTPBước 4 — Verify phiên bản: Sau khi update, kiểm tra lại:
wp plugin list --status=active | grep gravitysmtpKết quả phải hiển thị 2.1.5 hoặc mới hơn. Lưu ý: nếu bạn chạy nhiều site trên cùng một server, bạn phải update trên TẤT CẢ các site.
Bước 5 — Test gửi email: Vào Gravity SMTP settings, gửi email test để đảm bảo plugin vẫn hoạt động bình thường sau update. Nhiều khi update có thể gây xung đột với plugin khác, nên luôn test.
Cách Kiểm Tra Site Đã Bị Tấn Công Chưa?
Đây là bước quan trọng nhất. Lỗi này hoạt động thông qua GET request thụ động — nghĩa là attacker chỉ đọc thông tin, không thay đổi bất cứ gì trên site. Không có file mã mới, không có user mới, không có plugin lạ. Vì vậy bạn sẽ không thấy dấu hiệu gì nổi bật.
Kiểm tra access logs: Dùng lệnh sau để tìm các request tấn công trong Nginx access log:
# Tìm kiếm trong Nginx logs
grep "gravitysmtp/v1/tests/mock-data" /var/log/nginx/access.log
# Với Apache
grep "gravitysmtp/v1/tests/mock-data" /var/log/apache2/access.log
# Tìm và đếm số lượng
grep -c "gravitysmtp/v1/tests/mock-data" /var/log/nginx/access.logDấu hiệu xác định bị tấn công: Nếu bạn thấy bất kỳ request nào chứa /wp-json/gravitysmtp/v1/tests/mock-data kèm theo page=gravitysmtp-settings trong query string, site của bạn đã bị truy cập thông tin nhạy cảm.
Các IP tấn công nổi bật mà Wordfence ghi nhận:
45.148.10.95 -- 642.000+ requests
193.32.162.60 -- 586.000+ requests
176.65.148.139 -- 539.000+ requests
173.199.90.188 -- 460.000+ requests
45.148.10.120 -- 410.000+ requests
185.8.107.155 -- 404.000+ requestsBạn có thể check nhanh xem các IP này có từng truy cập site không:
grep -E "45\.148\.10\.(95|120)|193\.32\.162\.60|176\.65\.148\.139|173\.199\.90\.188|185\.8\.107\.155" /var/log/nginx/access.log | wc -lNếu kết quả lớn hơn 0, bạn cần xoay vòng credentials ngay lập tức ở bước tiếp theo.
Xoay Vòng API Key Và OAuth Token Khi Đã Bị Rò Rỉ
Nếu site của bạn đã bị truy cập, toàn bộ thông tin xác thực email integrations đã bị rò rỉ. Bạn cần thu hồi và tạo mới TẤT CẢ các key sau đây:
Amazon SES: Đăng nhập AWS Console > SES > SMTP Settings > xóa SMTP credentials cũ, tạo mới. Cập nhật key mới vào Gravity SMTP settings hoặc wp-config.php.
Google (Gmail/G Suite): Vào Google Cloud Console > APIs and Services > Credentials > xóa OAuth client cũ, tạo mới. Cập nhật client ID và secret trong plugin.
Mailjet: Đăng nhập Mailjet > API Keys > regenerate API key và secret key.
Resend: Vào Resend Dashboard > API Keys > revoke key cũ, tạo key mới.
Zoho: Vào Zoho API Console > xóa client cũ, tạo self-client mới với refresh token.
Lưu ý quan trọng: Sau khi tạo key mới, bạn phải cập nhật trong Gravity SMTP settings và test gửi email lại. Đồng thời, kiểm tra xem key cũ có đang được sử dụng ở bất kỳ đâu khác không — như plugin khác, cron job, hoặc ứng dụng bên ngoài.
Block Endpoint Ở Server Level Để Phòng Chống Chung
Ngay cả khi đã update, bạn nên block endpoint này ở server level để phòng trường hợp plugin khác cũng có lỗi tương tự. Dưới đây là cách cấu hình cho từng web server:
Với Nginx: Thêm vào server block:
location ~* /wp-json/gravitysmtp/v1/tests/mock-data {
deny all;
return 403;
}Sau đó reload Nginx:
sudo nginx -t && sudo systemctl reload nginxVới OpenLiteSpeed và Apache: Thêm vào file .htaccess trong thư mục root của WordPress:
# Block Gravity SMTP mock-data endpoint
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-json/gravitysmtp/v1/tests/mock-data [NC]
RewriteRule .* - [F,L]
</IfModule>Bạn kiểm tra bằng cách truy cập trực tiếp https://yourdomain.com/wp-json/gravitysmtp/v1/tests/mock-data. Nếu trả về 403 Forbidden là đã block thành công.
5 Thực Tường Bảo Mật WordPress Nên Làm Ngay Trong Tháng 6/2026
Lỗi Gravity SMTP chỉ là một trong hàng nghìn lỗi được phát hiện mỗi năm. Theo Patchstack, năm 2025 có 11.334 vulnerability mới (tăng 42%), với thời gian trung bình từ khi patch ra đến khi bị mass exploit chỉ là 5 giờ. Để bảo vệ site, bạn nên thực hiện ngay 5 việc sau:
1. Bật auto-update cho plugin và theme: Luôn update security patch trong 24h đầu tiên.
# Bật auto-update cho tất cả plugin
wp plugin auto-updates enable --all
# Bật auto-update cho tất cả theme
wp theme auto-updates enable --all2. Cài đặt Web Application Firewall: Wordfence hoặc Solid Security đều tốt. WAF chặn các pattern tấn công phổ biến trước khi chúng đến được plugin. Wordfence Free đã chặn 17 triệu request tấn công Gravity SMTP — điều này chứng minh WAF có tác dụng thật.
3. Scan access logs định kỳ: Chạy script scan log hàng tuần để phát hiện request bất thường. Đưa danh sách endpoint nguy hiểm vào checklist kiểm tra thường xuyên.
4. Hạn chế plugin không cần thiết: Mỗi plugin thêm vào là một attack surface mới. Xóa các plugin không sử dụng — đừng chỉ tắt nó, hãy xóa hoàn toàn khỏi server.
5. Backup gần và xa: Tối thiểu 7 ngày backup liên tiếp, lưu trên ít nhất 2 nơi khác nhau (local + cloud). Khi bị hack, backup là thứ cuối cùng cứu được bạn.
Kết Luận: Update Ngay, Xoay Vòng Key, Block Endpoint
Lỗi CVE-2026-4020 trong Gravity SMTP đang được khai thác ngay lúc này, với hàng triệu request tấn công mỗi ngày. Nguy hiểm nhất là cuộc tấn công này không để lại dấu hiện rõ ràng — attacker chỉ cần đọc dữ liệu bằng GET request rồi đi luôn.
Tóm lại, bạn cần làm 3 việc ngay hôm nay: kiểm tra phiên bản Gravity SMTP và update lên 2.1.5 nếu cần, kiểm tra access log xem có bị truy cập trái phép không, và xoay vòng toàn bộ API key/OAuth token nếu phát hiện bị tấn công. Nếu chưa cài Gravity SMTP thì cũng nên chặn endpoint /wp-json/gravitysmtp/v1/tests/mock-data ở server level cho an toàn.
Bảo mật WordPress không phải việc làm một lần rồi xong. Nó là quá trình liên tục — update đều, scan thường xuyên, và luôn có backup gần nhất. Mình sẽ tiếp tục theo dõi và cập nhật các lỗi bảo mật WordPress mới nhất trên blog.