Vấn đề là khi một đoạn mã JavaScript được nhúng vào website, nó sẽ kế thừa toàn bộ quyền bảo mật của website đó. Vì vậy, chỉ cần script này có lỗ hổng, mọi website sử dụng nó đều trở thành “nạn nhân tiềm năng”, tạo ra một rủi ro chuỗi cung ứng cực kỳ nguy hiểm.
Sai sót nghiêm trọng ở đây là: script không kiểm tra nguồn gửi thông điệp. Thay vì xác minh xem thông điệp đến từ domain đáng tin cậy, nó lại lưu trực tiếp origin đó và dùng để tải thêm một file JavaScript khác từ chính origin này.
Nói đơn giản, kẻ tấn công có thể:
-
Gửi một thông điệp giả mạo
-
Đưa vào một domain do mình kiểm soát
-
Khiến trình duyệt nạn nhân tự động tải và chạy mã độc
-
Đây là một dạng Client-Side XSS, cho phép thực thi mã JavaScript tùy ý trong ngữ cảnh của website đang mở (bao gồm cả các trang của Meta).
Một số trang Meta, đặc biệt là các trang trợ giúp khi chưa đăng nhập, cho phép tải script từ các bên phân tích dữ liệu thứ ba. Chỉ cần một trong các domain này bị chiếm quyền (subdomain takeover, XSS, upload file), kẻ tấn công đã có thể đặt mã độc vào đó.
Ngoài ra, trên Facebook Android WebView, việc tái sử dụng “window[.]name” kết hợp với “window[.]open()” cho phép kẻ tấn công giành lại quyền truy cập vào cửa sổ gốc, từ đó gửi thông điệp độc hại ngay trong ngữ cảnh “đáng tin”.
Các tham số như domain, loại sự kiện, cấu hình trích xuất… có thể bị chèn ký tự đặc biệt để thoát khỏi chuỗi JavaScript và tiêm mã độc. Đây là Stored XSS, nghĩa là mã độc được lưu lại và sẽ tự động thực thi với mọi người truy cập sau đó. Nguy hiểm hơn, việc khai thác không cần bất kỳ thao tác nào từ phía nạn nhân, mã độc sẽ chạy ngay trong phiên đăng nhập Facebook hợp lệ.
Điều đó đồng nghĩa:
-
Không chỉ Meta bị ảnh hưởng
-
Mà bất kỳ website nào sử dụng gateway này đều có nguy cơ
-
Người dùng Facebook có thể bị tấn công chỉ bằng cách truy cập một trang web “vô hại”
-
Chiếm quyền phiên đăng nhập Facebook
-
Đánh cắp dữ liệu, cookie, token
-
Thực hiện lừa đảo, phát tán mã độc ở quy mô lớn
-
Meta và các tổ chức sử dụng Conversions API Gateway cần khẩn trương rà soát, vá lỗi và kiểm tra toàn bộ logic sinh mã JavaScript
-
Tuyệt đối không nối chuỗi trực tiếp với dữ liệu người dùng
-
Kiểm tra chặt chẽ “event[.]origin” khi sử dụng “postMessage”
-
Áp dụng CSP nghiêm ngặt và hạn chế tối đa domain bên thứ ba
-
Hạn chế đăng nhập Facebook trên các website không rõ nguồn gốc
-
Nếu cẩn thận thì nên đăng xuất khi không sử dụng
-
Theo dõi các cảnh báo bảo mật từ Meta là những biện pháp giảm thiểu rủi ro cần thiết.
