Cảnh báo CVE-2026-4853: Lỗ hổng JetBackup WordPress Plugin Path Traversal dịp nghỉ lễ 30/4

Cảnh báo CVE-2026-4853: Lỗ hổng JetBackup WordPress Plugin Path Traversal dịp nghỉ lễ 30/4

Cập nhật tiếp tục CVE thứ 3 trong dịp lễ : 01/05/2026

Tiếp nối chuỗi cảnh báo bảo mật dịp nghỉ lễ 30/4 – 1/5, hôm nay xuất hiện thêm một lỗ hổng nữa cần chú ý: CVE-2026-4853 trên plugin JetBackup của WordPress. Lỗ hổng này không nguy hiểm bằng hai CVE đầu tuần (cPanel auth bypass và Copy Fail kernel), nhưng nếu trang web của bạn dùng JetBackup thì đây là việc cần xử lý ngay trong vài phút tới.

Khác với hai lỗ hổng kia, CVE này yêu cầu attacker phải có quyền administrator-level trong WordPress thì mới khai thác được. Nhưng đừng vì vậy mà chủ quan: trong nhiều trường hợp thực tế, ranh giới giữa “có admin” và “không có admin” mỏng hơn bạn nghĩ.

Mức độ nguy hiểm

  • Mã CVE: CVE-2026-4853
  • Plugin bị ảnh hưởng: JetBackup – Backup, Restore & Migrate (StellarWP)
  • Phiên bản dính: 3.1.19.8 và các phiên bản cũ hơn
  • Loại lỗ hổng: Path Traversal dẫn đến Arbitrary Directory Deletion
  • Yêu cầu khai thác: Cần authenticated với quyền administrator-level
  • Tác động: Xóa thư mục tùy ý trên hệ thống file của WordPress, ví dụ xóa toàn bộ wp-content/plugins làm sập site
  • Nguồn báo cáo: Wordfence, công bố trên NVD ngày 17/04/2026

Lỗ hổng hoạt động thế nào

Đoạn code lỗi nằm ở handler upload file của plugin JetBackup. Plugin có sanitize tham số fileName bằng hàm sanitize_text_field() của WordPress, nhưng hàm này chỉ remove HTML tag chứ không chặn các chuỗi path traversal như ../. Tên file đã sanitize được concatenate trực tiếp trong Upload::getFileLocation() mà không dùng basename() hay validate xem path resolve cuối cùng có nằm trong thư mục upload hay không.

Khi file upload không hợp lệ, cleanup logic của plugin gọi dirname() trên cái path đã traversal, rồi pass cho Util::rm() để xóa recursive. Kết quả: attacker có thể truyền tên file kiểu ../../wp-content/plugins/abc.zip, plugin sẽ resolve về thư mục wp-content/plugins rồi xóa sạch toàn bộ plugin của site.

Đây là pattern lỗi kinh điển: developer tin tưởng vào sanitize function của framework mà không hiểu rõ hàm đó bảo vệ chống cái gì. sanitize_text_field() là dành cho XSS protection, không phải path traversal protection.

Tại sao lỗ hổng này vẫn quan trọng dù cần admin auth

Có ý kiến cho rằng lỗ hổng cần admin thì attacker đã có nhiều cách phá site dễ hơn rồi. Đúng một phần, nhưng đây là 4 kịch bản thực tế khiến CVE-2026-4853 vẫn nguy hiểm:

  1. Site có nhiều admin user. Agency làm web cho khách thường có 3-5 admin (developer chính, junior, content manager, owner, vợ owner). Một tài khoản phụ bị compromise qua phishing hay password yếu là attacker có vector destruction.
  2. Privilege escalation chain. Lỗ hổng này có thể combine với lỗ hổng XSS, CSRF hoặc subscriber privilege escalation khác để biến user quyền thấp thành full destruction power. Một mình thì không nguy hiểm, kết hợp thì rất.
  3. Insider threat. Nhân viên cũ, freelancer cũ còn quyền admin do quên revoke. Khi có mâu thuẫn, họ có thể dùng JetBackup làm vũ khí xóa sạch site nhanh hơn cả lệnh rm qua FTP, đồng thời khó truy vết hơn.
  4. Compromised admin via supply chain. Một plugin khác trên site bị backdoor hoặc password admin bị leak qua data breach của tool quản lý password. Attacker có quyền admin, dùng JetBackup làm tool destruction để cover track hoặc tống tiền.

Trong cả 4 kịch bản, mục tiêu tấn công thường là xóa wp-content/plugins để disable toàn bộ security plugin (Wordfence, iThemes Security, MalCare) trước khi làm hành động khác. Sau khi security layer bị wipe, attacker có thể quay lại làm gì cũng được mà không bị log.

Cách kiểm tra site của bạn có bị ảnh hưởng không

Cách 1: Kiểm tra qua WP Admin (nhanh nhất)

  1. Đăng nhập WordPress Admin của site
  2. Vào menu Plugins → Installed Plugins
  3. Tìm dòng “JetBackup – WP Backup, Migrate & Restore”
  4. Xem version: nếu <= 3.1.19.8 là đang vulnerable

Cách 2: Kiểm tra qua SSH (dành cho hosting provider hoặc dev)

# Scan tất cả site WordPress trên server có dùng JetBackup
sudo find /home -path '*/wp-content/plugins/jetbackup/jetbackup.php' 2>/dev/null

# Lấy version từng site
sudo find /home -path '*/wp-content/plugins/jetbackup/jetbackup.php' 2>/dev/null | while read f; do
  ver=$(grep -m1 "Version:" "$f" | awk '{print $NF}')
  site=$(echo "$f" | sed 's|/wp-content.*||')
  echo "$site -> v$ver"
done

Cách 3: WP-CLI (dành cho dev quen tool dòng lệnh)

cd /path/to/wordpress
wp plugin list --name=jetbackup --fields=name,version,status --allow-root

Cách khắc phục

Phương án 1: Update plugin (recommend)

Plugin đã có patch trong các phiên bản 3.1.19.9 trở lên. Update là cách đơn giản và an toàn nhất.

Qua WP Admin:

  1. Plugins → Installed Plugins
  2. Tìm JetBackup → click “Update Now”
  3. Đợi vài giây cho update xong
  4. Verify version đã lên 3.1.19.9 hoặc mới hơn

Qua WP-CLI (cho ai quản lý nhiều site):

wp plugin update jetbackup --allow-root --path=/path/to/wp

Mass update toàn server (cho hosting provider):

# Script update tất cả site WordPress trên server
for wp_path in $(sudo find /home -name 'wp-config.php' -exec dirname {} \;); do
  if [ -d "$wp_path/wp-content/plugins/jetbackup" ]; then
    echo "Updating: $wp_path"
    site_user=$(stat -c '%U' "$wp_path")
    sudo -u "$site_user" wp plugin update jetbackup --path="$wp_path" 2>&1 | tail -3
  fi
done

Phương án 2: Deactivate hoặc xóa plugin nếu không dùng

Nhiều site cài JetBackup từ lâu rồi quên không dùng nữa. Nếu hosting của bạn đã có hệ thống backup tự động (như TND.vn, hầu hết các hosting provider chuyên nghiệp đều có), plugin backup của user thực ra không cần thiết.

Vào Plugins → Installed Plugins, tìm JetBackup, click Deactivate rồi Delete. Đỡ phải nhớ update sau này, đỡ tốn tài nguyên server.

Phương án 3: Block bằng WAF (cho ai chưa update được ngay)

Nếu vì lý do nào đó chưa update được (đang test, đang chờ approve), tạm thời block các request có pattern path traversal trên endpoint của JetBackup ở Cloudflare WAF hoặc plugin Wordfence:

  • Pattern block: request body chứa fileName= kết hợp với ../ hoặc %2e%2e%2f
  • URL pattern: request đến /wp-admin/admin-ajax.php với action liên quan jetbackup

Đây là giải pháp tạm thời, không thay thế việc update plugin.

Audit security cơ hội: việc nên làm cùng lúc

Vì lỗ hổng này yêu cầu admin auth, đây là cơ hội tốt để dọn dẹp các vấn đề security khác trên site WordPress của bạn:

  1. Audit danh sách admin user. Vào Users → All Users, filter theo role Administrator. Xóa hoặc downgrade các tài khoản không còn hoạt động: dev cũ, freelancer xong việc, nhân viên đã nghỉ.
  2. Bắt buộc đổi password mạnh cho tất cả admin. Dùng plugin như “Password Policy Manager” để force complex password với độ dài tối thiểu.
  3. Bật 2FA cho admin user. Plugin “Two Factor” của WordPress.org chính chủ là free và đủ dùng. WP Admin → Users → Edit → bật 2FA.
  4. Limit login attempts. Plugin Limit Login Attempts Reloaded hoặc Wordfence để chặn brute force.
  5. Disable file editing trong WP Admin. Thêm vào wp-config.php: define('DISALLOW_FILE_EDIT', true);. Ngăn attacker (nếu có quyền admin) edit code plugin/theme từ WP Admin.
  6. Check file integrity. Plugin Wordfence có Scan tool để compare file core WordPress với version chính thức, phát hiện file bị inject malicious code.

TND.vn đã xử lý gì cho khách hàng

Đội ngũ kỹ thuật TND.vn đã scan toàn bộ shared hosting node để xác định các site WordPress đang dùng JetBackup phiên bản cũ. Khách hàng có site bị ảnh hưởng sẽ nhận được email thông báo riêng kèm hướng dẫn cập nhật trong tối nay.

Với khách hàng managed WordPress của TND, plugin sẽ được tự động cập nhật trong khung giờ thấp điểm để tránh ảnh hưởng traffic. Khách hàng tự quản trị site, vui lòng tự kiểm tra theo hướng dẫn ở trên hoặc liên hệ hotline kỹ thuật nếu cần hỗ trợ trong dịp lễ.

Tổng kết chuỗi 3 CVE dịp lễ 30/4 – 1/5

Đây là CVE thứ ba trong chỉ 3 ngày, tạo nên một bộ ba bài học cho ai vận hành hosting hoặc website WordPress:

  • CVE-2026-41940 (cPanel): Authentication bypass mức Critical (CVSS 9.8). Đã có patch, đảm bảo cPanel của bạn đang ở phiên bản mới nhất.
  • CVE-2026-31431 (Copy Fail): Linux kernel privilege escalation mức Critical. Chưa có patch chính thức, dùng grubby mitigation tạm thời.
  • CVE-2026-4853 (JetBackup): WordPress plugin path traversal mức High. Đã có patch, update là xong.

Bài học chung: dịp nghỉ lễ là thời điểm hacker tăng cường tấn công vì biết rõ admin/dev đang nghỉ. Năm nào cũng vậy, không có ngoại lệ. Đầu tư vào auto-update, monitoring 24/7 và quy trình patch khẩn không phải là chi phí mà là bảo hiểm.

Tài liệu tham khảo


Bài viết được cập nhật khi có thông tin mới. Nếu thấy hữu ích, hãy share cho bạn bè đang vận hành site WordPress trong dịp nghỉ lễ. Một bài share có thể cứu cả một website cuối tuần này.