Một cuộc tấn công Cross Site Tracing(XST) liên quan đến việc sử dụng Tập lệnh chéo trang (XSS) và các phương thức TRACE hoặc TRACK HTTP. Theo RFC 2616, “TRACE cho phép khách hàng xem những gì đang được nhận ở đầu kia của chuỗi yêu cầu và sử dụng dữ liệu đó để kiểm tra hoặc thông tin chẩn đoán.”, Phương pháp TRACK hoạt động theo cách tương tự nhưng dành riêng cho IIS của Microsoft máy chủ web. XST có thể được sử dụng như một phương pháp để lấy cắp cookie của người dùng thông qua Cross-site Scripting (XSS) ngay cả khi cookie được đặt cờ “HttpOnly” hoặc để lộ tiêu đề Ủy quyền của người dùng.
Các bài viết liên quan:
Phương thức TRACE, mặc dù có vẻ vô hại, nhưng có thể được tận dụng thành công trong một số trường hợp để lấy cắp thông tin đăng nhập của người dùng hợp pháp. Kỹ thuật tấn công này được phát hiện bởi Jeremiah Grossman vào năm 2003, trong một nỗ lực để vượt qua thẻ HttpOnly mà Microsoft đã giới thiệu trong Internet Explorer 6 sp1 để bảo vệ cookie khỏi bị JavaScript truy cập. Trên thực tế, một trong những kiểu tấn công lặp lại nhiều lần nhất trong Cross Site Scripting là truy cập vào đối tượng document.cookie và gửi nó đến máy chủ web do kẻ tấn công kiểm soát để chúng có thể chiếm quyền điều khiển phiên của nạn nhân. Gắn thẻ cookie là HttpOnly cấm JavaScript truy cập vào nó, bảo vệ nó khỏi bị gửi cho bên thứ ba. Tuy nhiên, phương pháp TRACE có thể được sử dụng để bỏ qua bảo vệ này và truy cập cookie ngay cả trong trường hợp này.
Các trình duyệt hiện đại hiện đã ngăn chặn các yêu cầu TRACE được thực hiện qua JavaScript, tuy nhiên, các cách khác để gửi yêu cầu TRACE với trình duyệt đã được phát hiện, chẳng hạn như sử dụng Java.
Xem thêm Cross Tabulation trong SAS
Các ví dụ về Cross Site Tracing(XST)
Một ví dụ sử dụng cURL từ dòng lệnh để gửi yêu cầu TRACE đến máy chủ web trên máy chủ cục bộ có bật TRACE. Lưu ý cách máy chủ web phản hồi với yêu cầu được gửi đến nó.
$ curl -X TRACE 127.0.0.1 TRACE / HTTP/1.1 User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5 Host: 127.0.0.1 Accept: */*
Trong ví dụ này, hãy lưu ý cách chúng tôi gửi tiêu đề Cookie cùng với yêu cầu và nó cũng nằm trong phản hồi của máy chủ web.
$ curl -X TRACE -H "Cookie: name=value" 127.0.0.1 TRACE / HTTP/1.1 User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5 Host: 127.0.0.1 Accept: */* Cookie: name=value
Trong ví dụ này, phương thức TRACE bị vô hiệu hóa, hãy lưu ý cách chúng tôi gặp lỗi thay vì yêu cầu chúng tôi đã gửi.
Xem thêm Kiểm tra các biện pháp bảo vệ chống lại việc lạm dụng ứng dụng
$ curl -X TRACE 127.0.0.1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>405 Method Not Allowed</title> </head><body> <h1>Method Not Allowed</h1> <p>The requested method TRACE is not allowed for the URL /.</p> </body></html>
Ví dụ về yêu cầu JavaScript XMLHttpRequest TRACE. Trong Firefox 19.0.2, nó sẽ không hoạt động và trả về lỗi “Giá trị bất hợp pháp”. Trong Google Chrome 25.0.1364.172, nó sẽ không hoạt động và trả về lỗi “Uncaught Error: SecurityError: DOM Exception 18”. Điều này là do các trình duyệt hiện đại hiện chặn phương thức TRACE trong XMLHttpRequest để giúp giảm thiểu XST.
<script> var xmlhttp = new XMLHttpRequest(); var url = 'http://127.0.0.1/'; xmlhttp.withCredentials = true; // send cookie header xmlhttp.open('TRACE', url, false); xmlhttp.send(); </script>
Biện pháp khắc phục Cross Site Tracing(XST)
Apache
Trong các phiên bản Apache 1.3.34, 2.0.55 trở lên, hãy đặt chỉ thị TraceEnable thành “tắt” trong tệp cấu hình chính và sau đó khởi động lại Apache. Xem TraceEnable để biết thêm thông tin.
TraceEnable off
Xem thêm Kiểm tra RIA Cross Domain Policy