- Một kỹ thuật clickjacking mới sử dụng bộ lọc SVG được giới thiệu, mở rộng các cuộc tấn công dụ nhấp chuột đơn giản trước đây thành các cuộc tấn công tương tác phức tạp hơn
- Đã xác nhận rằng các phần tử bộ lọc SVG như
feColorMatrix, feDisplacementMap có thể được áp dụng cả với iframe cross-origin, từ đó cho phép thao túng trực quan và trích xuất dữ liệu
- Bằng cách kết hợp các bộ lọc, có thể thực hiện đọc pixel, phép toán logic và thao tác UI theo điều kiện, giúp triển khai các cuộc tấn công clickjacking nhiều bước hoặc tấn công dẫn dụ nhập liệu
- Trong trường hợp thực tế, một cuộc tấn công sử dụng lỗ hổng Google Docs đã thành công, và nhà nghiên cứu nhận được phần thưởng $3133.70 từ Google VRP
- Kỹ thuật này làm lộ ra một bề mặt tấn công mới trong mô hình bảo mật trình duyệt, cho thấy cách khai thác logic của bộ lọc SVG có thể phát triển thành mối đe dọa an ninh
Tổng quan về clickjacking SVG
- Clickjacking truyền thống có cấu trúc tấn công đơn giản: chồng một iframe lên trên để khiến người dùng vô tình nhấp chuột
- Clickjacking SVG mới được đề xuất sử dụng bộ lọc SVG để cho phép tương tác phức tạp và rò rỉ dữ liệu
- Các bộ lọc như
feColorMatrix và feDisplacementMap có thể được áp dụng lên cả tài liệu cross-origin, nên có thể thao túng trực quan nội dung bên ngoài
Các thành phần của bộ lọc SVG
- Các phần tử bộ lọc chính gồm <feImage> , <feFlood> , <feOffset> , <feDisplacementMap> , <feGaussianBlur> , <feTile> , <feMorphology> , <feBlend> , <feComposite> , <feColorMatrix> ...
- Chúng kết hợp và biến đổi ảnh đầu vào để tạo ra ảnh mới, và có thể nối với nhau theo dạng chuỗi
- Thông qua các tổ hợp này, kẻ tấn công có thể tự do triển khai hiệu ứng hình ảnh, masking và thao tác màu sắc
Ví dụ tấn công
- Captcha giả (fake captcha): dùng
feDisplacementMap để làm méo văn bản, dụ người dùng nhập mã nhạy cảm
- Ẩn chữ màu xám (grey text hiding): dùng
feComposite và feMorphology để xóa phần hướng dẫn hoặc thông báo lỗi trong ô nhập, khiến người dùng nhập mật khẩu do kẻ tấn công chỉ định
- Đọc pixel (pixel reading): phát hiện màu của một pixel cụ thể và điều khiển hoạt động của bộ lọc dựa trên đó, từ đó hiện thực hóa các cuộc tấn công phản ứng động như phát hiện nhấp nút, hover, trạng thái nhập liệu
Phép toán logic và tấn công phức hợp
- Có thể kết hợp
feBlend và feComposite để hiện thực các cổng logic như AND, OR, XOR, NOT
- Nhờ vậy, có thể xây dựng mạch logic hoàn chỉnh ngay bên trong bộ lọc SVG, từ đó tự động hóa các kịch bản clickjacking nhiều bước
- Ví dụ, trong cuộc tấn công vào ứng dụng “Securify”, cấu trúc lừa người dùng được triển khai bằng cách điều khiển logic nhiều bước như mở hộp thoại, nhấp checkbox, nhấp nút
Trường hợp thực tế: lỗ hổng Google Docs
- Trong Google Docs, popup và ô nhập xuất hiện sau khi nhấp nút “Generate Document” được phát hiện và thao túng bằng logic dựa trên bộ lọc SVG
- Trạng thái focus của ô nhập, chữ màu xám và màn hình loading được phát hiện theo thời gian thực để điều khiển luồng tấn công
- Cuộc tấn công này đã được báo cáo cho Google và mang lại bug bounty $3133.70
Ứng dụng với mã QR
- Có thể triển khai logic tạo mã QR ngay trong bộ lọc SVG, mã hóa dữ liệu pixel thành URL rồi hiển thị dưới dạng QR
- Khi người dùng quét mã QR, dữ liệu sẽ được gửi tới máy chủ do kẻ tấn công kiểm soát
- Dùng
feDisplacementMap và sửa lỗi Reed–Solomon để tạo mã QR có thể quét được
Các khả năng khai thác bổ sung
- Có thể mở rộng sang nhiều kiểu tấn công khác như đọc văn bản, rò rỉ dữ liệu dựa trên thao tác nhấp chuột, chèn con trỏ chuột giả
- Cuộc tấn công có thể được triển khai chỉ với CSS/SVG mà không cần JavaScript, nên có khả năng vượt qua CSP
Ý nghĩa nghiên cứu
- Clickjacking dựa trên phép toán logic bằng bộ lọc SVG là một kỹ thuật tấn công mới chưa từng được đề cập trong các nghiên cứu trước đây
- Các nghiên cứu cũ chỉ nhắc tới SVG như công cụ che phủ trực quan đơn giản, còn nghiên cứu này chứng minh khả năng thực thi logic và điều khiển tương tác
- Nhà nghiên cứu xem đây là một lớp lỗ hổng mới, đồng thời nhấn mạnh sự cần thiết phải xem xét lại hệ thống bảo mật trình duyệt
Kết luận
- Nghiên cứu này được đánh giá là trường hợp tấn công bảo mật đầu tiên sử dụng bộ lọc SVG như một ngôn ngữ lập trình
- Tác giả dự kiến sẽ trình bày nội dung liên quan tại 39c3 và Disobey 2026 vào cuối năm 2025
- Bài viết được tạo ra chỉ bằng 42kB HTML/CSS/SVG, không dùng ảnh hay JS, cho thấy tính sáng tạo của nghiên cứu bảo mật thử nghiệm
1 bình luận
Ý kiến Hacker News
Nếu nhà phát triển cấu hình đúng header X-Frame-Options thì vấn đề này sẽ được giải quyết
Nhưng trên thực tế, có lẽ người ta sẽ phản ứng kiểu đuổi theo các vấn đề bảo mật rồi xóa một nửa đặc tả SVG khỏi trình duyệt
Ngoài ra, cuộc tấn công này cũng có thể thực hiện trên các trang cho phép chèn HTML chứ không chỉ qua frame
Tôi đã tắt SVG từ trước vì lý do bảo mật
Nhưng dạo này tôi còn nghĩ có lẽ phải vô hiệu hóa cả CSS
Giá mà CSS vẫn chỉ là thứ dùng để trang trí văn bản thì tốt biết mấy, giờ nó đã biến thành gần như một ngôn ngữ lập trình, rất dễ bị hacker hay nhà quảng cáo lạm dụng
Bây giờ thì gần như không thể nữa
Khi xem “ví dụ phát hiện xem pixel có phải màu đen thuần túy hay không để bật hoặc tắt bộ lọc”, tôi thực sự thấy rối hoàn toàn
Tôi không hiểu vì sao HTML/CSS lại trở nên phức tạp đến vậy
Có
<checkbox>và<label>ẩn, khi bấm thì checkbox được bật/tắt, rồi chỉ bằng CSS mà style thay đổi theo trạng tháiSVG thực ra không vẽ gì cả mà chỉ định nghĩa bộ lọc
Việc dùng tới hai
<feTile>để tách riêng vùng lát gạch và vùng đầu ra cũng rất kỳ lạMấy phần tử như
<fake-frame>hay<art-frame>lại là cái gì nữa?Việc bấm
<label>để bật/tắt checkbox là hành vi mặc định của HTMLNó dùng bộ chọn
:has()của CSS để phát hiện trạng thái<feTile>là một phần tử bộ lọc đơn, dùng để lát ảnh đầu vào hoặc crop nó<fake-frame>và<art-frame>là các custom element do tác giả tự định nghĩaNội dung liên quan đã được tổng hợp trong bài blog
Việc bấm
<label>để chuyển focus là truyền thống từ desktop UIChức năng đổi style theo trạng thái checkbox cũng đã có từ thời Firefox 1
Việc nhúng trực tiếp bộ lọc SVG vào HTML cũng là tính năng có từ lâu
Nói cách khác, đây không phải vấn đề của HTML mới mà là sự kết hợp của các tính năng cũ
Bản demo này khiến tôi nhớ đến kiểu hack Flash Player ngày xưa
Nó giống cách lừa người dùng cho phép truy cập bộ nhớ hệ thống
Đồ họa vector đúng là thứ dường như không thể tự kiểm soát chính mình
SVG adder đúng là một tác phẩm nghệ thuật. Thật sự rất ấn tượng
Tôi tham khảo thêm trong bài viết trên Stack Overflow
Trên Chrome Android của tôi (chính xác hơn là trình duyệt Kiwi), màn hình bị vỡ hoặc hiển thị lạ, có lẽ do dark mode
Tôi tò mò không biết người khác có gặp hiện tượng này không
Bài này làm tôi nhớ đến demo tính toán bằng CSS mà tôi từng xem trước đây
Thật sự là một công trình rất ấn tượng. Tôi chưa biết nên giải quyết thế nào, nhưng cần được vá sớm
Một bài đăng quá hay. Tôi đã rất thích thú trong suốt lúc đọc