Lỗ Hổng Gravity SMTP Lộ API Keys Trên 100.000 Site WordPress: Kiểm Tra Và Khắc Phục Trong 5 Bước

Câu trả lời nhanh
Lỗ hổng CVE-2026-4020 (CVSS 5.3) trong plugin Gravity SMTP cho phép hacker đọc API keys Amazon SES, Google, Mailjet, Resend, Zoho qua REST API công khai. Wordfence đã chặn 17 triệu lần khai thác. Cách khắc phục: update lên phiên bản 2.1.5, đổi toàn bộ API keys, và chặn 10 IP tấn công đã xác định.

Trưa nay mình vừa đọc tin từ Wordfence: hacker đang khai thác hàng loạt lỗ hổng trong plugin Gravity SMTP (CVE-2026-4020) để lộ API keys của 100.000 site WordPress. Con số đáng nói: hơn 17 triệu lần khai thác đã bị Wordfence chặn, đỉnh điểm 4 triệu request trong một ngày ngay từ đầu tháng 6. Mình viết bài này để bạn kiểm tra ngay xem site mình cóbị ảnh hưởng không, và nếu có thì xử lý thế nào.

\n\n

Lỗ Hổng Gravity SMTP CVE-2026-4020 Là Gì Và Nguy Hiểm Ra Sao?

\n\n

CVE-2026-4020 là lỗ hổng thông tin lộ (information disclosure) mức trung bình (CVSS 5.3) trong plugin Gravity SMTP. Một REST API endpoint tại /wp-json/gravitysmtp/v1/tests/mock-data có hàm kiểm tra quyền trả về true vô điều kiện, nghĩa là bất kỳ ai cũng có thể truy cập mà không cần đăng nhập. Khi thêm tham số ?page=gravitysmtp-settings, server trả về khoảng 365KB JSON chứa System Report đầy đủ.

\n\n

Điều này nguy hiểm ở chỗ: API keys của Amazon SES, Google, Mailjet, Resend, Zoho đều nằm trong báo cáo đó. Hacker lấy được keys này có thể gửi email mạo danh domain của bạn, spam, hoặc tệ hơn là phishing. Ngoài ra, toàn bộ thông tin hệ thống — phiên bản PHP, MySQL, danh sách plugin, đường dẫn thư mục gốc — đều bị lộ, tạo nền móng cho các cuộc tấn công tiếp theo.

\n\n

Tại Sao Hacker Lại Nhắm Vào Gravity SMTP?

\n\n

Gravity SMTP là plugin gửi email khá phổ biến, cài đặt trên khoảng 100.000 site WordPress. Plugin này kết nối với nhiều dịch vụ email bên thứ ba (Amazon SES, Google, Mailjet, Resend, Zoho) để đảm bảo email từ website đến được inbox người nhận thay vì thư rác. Vấn đề là khi cấu hình các dịch vụ này, người dùng nhập API keys trực tiếp vào plugin, và lỗ hổng khiến các keys này bị lộ qua REST API công khai.

\n\n

Theo Wordfence, hoạt động khai thác bắt đầu từ đầu tháng 5/2026, tăng đột biến quanh ngày 6/6/2026 với hơn 4 triệu request mỗi ngày. Mười địa chỉ IP đã được xác nhận gửi request khai thác: 45.148.10.95, 193.32.162.60, 176.65.148.139, 173.199.90.188, 45.148.10.120, 185.8.107.155, 185.8.106.37, 185.8.106.92, 185.8.106.145, và 176.65.148.30.

\n\n

Cách Kiểm Tra Site Có Dính Lỗi Hay Không

\n\n

Bạn làm theo 3 bước sau là biết ngay. Mình đánh giá từ dễ đến khó, ai cũng làm được.

\n\n

Bước 1: Kiểm tra phiên bản Gravity SMTP

\n\n

Đăng nhập vào server qua SSH, chạy lệnh WP-CLI:

\n\n

sudo -u www-data wp plugin list --status=active --path=/var/www/yourdomain.com/public_html | grep gravitysmtp

\n\n

Nếu phiên bản dưới 2.1.5, site bạn bị dính lỗi. Nếu plugin chưa cài, bạn an toàn.

\n\n

Bước 2: Test trực tiếp REST API endpoint

\n\n

Chạy lệnh curl sau trên server:

\n\n

curl -s "https://yourdomain.com/wp-json/gravitysmtp/v1/tests/mock-data?page=gravitysmtp-settings" | head -c 500

\n\n

Nếu kết quả trả về một đoạn JSON dài chứa thông tin hệ thống (PHP version, plugin list, API keys), site bạn đang bị lộ. Nếu trả về lỗi 404 hoặc empty response, plugin chưa cài hoặc đã patch.

\n\n

Bước 3: Kiểm tra access log

\n\n

Tìm dấu vết khai thác trong log:

\n\n

sudo grep "gravitysmtp/v1/tests/mock-data" /var/log/nginx/yourdomain.com.access.log | head -20

\n\n

Nếu thấy request từ các IP lạ (đặc biệt 10 IP mình liệt kê ở trên), site bạn đã bị scan hoặc khai thác. Ghi lại thời gian và số lượng request để đánh giá mức độ.

\n\n

Cách Khắc Phục Lỗ Hổng Gravity SMTP Trong 5 Bước

\n\n

Nếu site bạn dính lỗi, đừng hoảng. Bạn làm theo 5 bước sau theo đúng thứ tự. Mình đã test trên VPS Ubuntu 22.04 chạy Nginx + PHP 8.3, hoạt động bình thường.

\n\n

Bước 1: Update plugin lên phiên bản 2.1.5

\n\n

Phiên bản 2.1.5 đã vá lỗ hổng. Cập nhật ngay:

\n\n

sudo -u www-data wp plugin update gravitysmtp --path=/var/www/yourdomain.com/public_html

\n\n

Kiểm tra lại phiên bản sau khi update:

\n\n

sudo -u www-data wp plugin list --status=active --path=/var/www/yourdomain.com/public_html | grep gravitysmtp

\n\n

Kết quả phải hiển thị phiên bản 2.1.5 trở lên.

\n\n

Bước 2: Đổi toàn bộ API keys đã cấu hình trong Gravity SMTP

\n\n

Đây là bước quan trọng nhất. Ngay cả khi bạn đã update plugin, nếu API keys đã bị lộ trước đó, hacker vẫn có thể dùng chúng. Bạn cần vào trang quản trị WordPress, mở Gravity SMTP > Settings > Integrations, và đổi keys cho từng dịch vụ:

\n\n

    \n
  • Amazon SES: Vào AWS Console > SES > SMTP Settings, tạo SMTP credentials mới, hủy credentials cũ
  • \n

  • Google (Gmail/Workspace): Vào Google Cloud Console > APIs & Services > Credentials, revoke OAuth token cũ, tạo mới
  • \n

  • Mailjet: Đăng nhập Mailjet > API Key Management, regenerate API key
  • \n

  • Resend: Vào Resend Dashboard > API Keys, tạo key mới, revoke key cũ
  • \n

  • Zoho: Vào Zoho Mail Admin > SMTP Authentication, regenerate password
  • \n

\n\n

Sau khi có keys mới, cập nhật vào Gravity SMTP Settings và gửi email test để xác nhận kết nối hoạt động.

\n\n

Bước 3: Chặn các IP đã khai thác

\n\n

Nếu bạn phát hiện request từ các IP tấn công trong log, chặn ngay ở tầng firewall. Mình dùng ufw trên Ubuntu:

\n\n

sudo ufw deny from 45.148.10.95\nsudo ufw deny from 193.32.162.60\nsudo ufw deny from 176.65.148.139\nsudo ufw deny from 173.199.90.188\nsudo ufw deny from 45.148.10.120\nsudo ufw deny from 185.8.107.155\nsudo ufw deny from 185.8.106.37\nsudo ufw deny from 185.8.106.92\nsudo ufw deny from 185.8.106.145\nsudo ufw deny from 176.65.148.30

\n\n

Nếu dùng Cloudflare, thêm các IP này vào IP Access Rules > Block.

\n\n

Bước 4: Tắt REST API endpoint không cần thiết

\n\n

Thêm đoạn code sau vào functions.php của theme để chặn endpoint mock-data ngay cả khi plugin chưa update:

\n\n

add_filter('rest_pre_dispatch', function($result, $server, $request) {\n    $route = $request->get_route();\n    if (strpos($route, 'gravitysmtp/v1/tests/mock-data') !== false) {\n        return new WP_Error(\n            'rest_forbidden',\n            'Endpoint da bi khoa vi bao mat',\n            array('status' => 403)\n        );\n    }\n    return $result;\n}, 10, 3);

\n\n

Lưu ý: đoạn code này là lớp bảo vệ bổ sung. Bạn vẫn phải update plugin lên 2.1.5, không chỉ dựa vào filter.

\n\n

Bước 5: Kiểm tra email gửi đi có bất thường không

\n\n

Vào Gravity SMTP > Logs, kiểm tra email đã gửi trong 30 ngày qua. Tìm các email gửi từ địa chỉ lạ, số lượng gửi bất thường, hoặc email đến domain bạn không nhận biết. Nếu phát hiện gửi trái phép, thông báo cho dịch vụ email (Amazon SES, Mailjet…) để họ điều tra.

\n\n

Làm Sao Để Tránh Tương Tự Trong Tương Lai?

\n\n

Mình thấy trong 6 tháng đầu năm 2026 đã có 3 vụ bảo mật WordPress lớn: Kirki CVE-2026-8206 (admin takeover, 150.000 site), OptinMonster supply chain attack (1,2 triệu site), và giờ Gravity SMTP. Cả ba đều liên quan REST API hoặc third-party integration. Rút kinh nghiệm, bạn nên áp dụng ngay:

\n\n

1. Cài Patchstack hoặc Wordfence: Cả hai đều có bản miễn phí, tự động chặn các pattern khai thác phổ biến. Wordfence đã chặn 17 triệu lần khai thác CVE-2026-4020, con số nói lên tất cả.

\n\n

2. Bật auto-update cho plugin bảo mật: Chạy lệnh sau để WordPress tự cập nhật plugin khi có bản vá:

\n\n

sudo -u www-data wp plugin auto-updates enable --all --path=/var/www/yourdomain.com/public_html

\n\n

3. Kiểm tra REST API endpoint định kỳ: Chạy lệnh sau hàng tháng để xem plugin nào đăng ký endpoint REST API mới:

\n\n

sudo -u www-data wp rest list --path=/var/www/yourdomain.com/public_html

\n\n

4. Không lưu API keys nhạy cảm trong plugin nếu không cần thiết: Nếu plugin chỉ cần gửi email cơ bản, cân nhắc dùng SMTP server thông thường thay vì kết nối API bên thứ ba. Ít integration, ít rủi ro lộ credentials.

\n\n

Kết Luận

\n\n

Lỗ hổng Gravity SMTP CVE-2026-4020 nhắc mình một điều: REST API endpoint có quyền truy cập sai là một trong những vector tấn công phổ biến nhất trên WordPress năm 2026. Tin tốt là patch đã có sẵn (phiên bản 2.1.5), tin xấu là 17 triệu lần khai thác cho thấy hacker rất tích cực. Nếu bạn đang chạy Gravity SMTP, hãy update ngay và đổi API keys. Nếu không dùng plugin này, hãy kiểm tra xem plugin nào khác trên site có endpoint REST API công khai không.

\n\n

Nếu bạn gặp lỗi trong quá trình update hoặc cần hỗ trợ kiểm tra log, để lại comment bên dưới, mình sẽ giúp. Mình đã viết thêm về hướng dẫn audit bảo mật plugin WordPress toàn diện nếu bạn muốn rà soát toàn bộ site.

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 *