Nội dung bài viết
Các nhà nghiên cứu của Sucuri vừa công bố phân tích về một vụ xâm nhập WordPress, trong đó kẻ tấn công cài nhiều cơ chế duy trì (persistence) chồng lên nhau để mã độc liên tục quay lại mà không cần tấn công lại website.
Backdoor được đặt tên SC theo các dấu hiệu SC_ trong nội dung bị chèn. Sucuri mô tả nó như một "mạng lưới tự chữa lành" được điều khiển qua blockchain: payload tồn tại cùng lúc ở ít nhất 8 vị trí - trong file, database và bộ nhớ dùng chung - và bất kỳ vị trí nào còn sót lại cũng có thể dựng lại tất cả những vị trí khác.
Nói cách khác: xóa plugin thì drop-in viết lại nó; xóa drop-in thì theme viết lại; dọn sạch mọi file trên ổ đĩa thì lần tải trang tiếp theo sẽ khôi phục toàn bộ từ database hoặc từ bộ nhớ dùng chung. Không có một điểm duy nhất nào để gỡ bỏ mà chặn được cả hệ thống.
8 thành phần của SC
| Vị trí | Vai trò |
|---|---|
.user.ini | Đặt auto_prepend_file để chạy loader trước mọi request PHP trong cây thư mục |
wp-content/c1b12371.php | Loader, nạp file ẩn cùng tên có dấu chấm ở đầu nếu tồn tại |
wp-content/.c1b12371.php | Loader tầng 1, dựng lại plugin giả trong mu-plugins từ 3 nguồn: bản trong thư mục plugins, stub mã hóa trong thư mục cache và gói ZIP khôi phục có tên hex ngẫu nhiên |
wp-content/db.php | Drop-in nạp khi khởi động, chứa toàn bộ payload dạng nén + Base64; tái triển khai plugin khi bị thiếu |
wp-content/advanced-cache.php | Drop-in nạp trước plugin thường khi bật cache; dựng lại plugin từ 5 nguồn, gồm cả bộ nhớ dùng chung System V và database |
wp-content/themes/khorshidi/functions.php | Bản sao của db.php nằm trong theme |
wp-content/mu-plugins/hyper-engine-kit.php | Mã độc chính, cài dưới dạng must-use plugin |
wp-content/plugins/hyper-engine-kit/hyper-engine-kit.php | Bản sao dự phòng của payload |
Mã độc không có tên hàm đọc được, dùng bộ giải mã thay thế ký tự (substitution cipher) để giải nén code khi chạy.
Backdoor làm được gì?
- Ẩn mình khỏi màn hình Plugins và khỏi kiểm tra cập nhật.
- Liên lạc với máy chủ điều khiển (C2) thông qua blockchain Ethereum, giấu kênh điều khiển trong hạ tầng hợp pháp.
- Thu thập thông tin website và tải thêm payload.
- Tạo tài khoản quản trị ẩn.
- Chèn JavaScript tùy ý để tấn công khách truy cập (ví dụ skimmer đánh cắp thẻ thanh toán), chạy mã PHP, tắt hoặc xóa plugin bất kỳ.
- Đăng ký các cron hook (kể cả tên ngẫu nhiên) để định kỳ tái triển khai, kể cả khi không có lượt truy cập.
Đặc biệt, trên máy chủ hỗ trợ bộ nhớ dùng chung System V, payload được ghi vào một segment RAM có khóa cố định. Segment này tồn tại độc lập với file và database nên sống sót qua cả việc xóa file lẫn dọn database; trên shared hosting, nó thậm chí có thể thuộc sở hữu của một tài khoản khác.
Mã độc xâm nhập bằng cách nào?
Sucuri chưa xác định được đường lây nhiễm ban đầu. Các con đường phổ biến gồm: lỗ hổng trong lõi WordPress, plugin, theme; mật khẩu yếu; tấn công chuỗi cung ứng vào plugin phổ biến; và lợi dụng tính năng upload ảnh/form thiếu kiểm tra để đẩy web shell PHP lên máy chủ.
Bài học cho người quản trị
SC cho thấy một vụ lây nhiễm WordPress hiện đại có thể là cả một hệ thống, không chỉ là một file. Khi dọn dẹp, cần xử lý đồng thời tất cả các vị trí:
- Kiểm tra
.user.ini, các drop-indb.phpvàadvanced-cache.php, thư mụcmu-plugins, filefunctions.phpcủa mọi theme (kể cả theme không dùng). - Rà soát database: option lạ, cron hook lạ, tài khoản quản trị ẩn.
- Trên VPS/máy chủ riêng, kiểm tra và xóa các shared-memory segment đáng ngờ (
ipcs -m) hoặc khởi động lại dịch vụ PHP. - Sau khi dọn sạch, đổi toàn bộ mật khẩu, khóa bí mật trong
wp-config.phpvà vá lỗ hổng đã bị lợi dụng.
Lỗ hổng plugin wpForo bị khai thác
Cũng trong thời gian này, lỗ hổng SQL injection không cần xác thực trong plugin diễn đàn wpForo Forum (CVE-2026-1581, CVSS 7.5) đang bị khai thác. Lỗ hổng ảnh hưởng mọi phiên bản tới 2.4.14. Theo Previdian, từ 3/7/2026 đã ghi nhận chưa tới 20 lượt khai thác từ 5 địa chỉ IP ở Bulgaria, Thụy Sĩ, Pháp, Mỹ và Yemen. Người dùng wpForo nên cập nhật lên bản mới nhất.
Nguồn tham khảo: The Hacker News, Sucuri và Previdian.