Manipulating WebSocket Messages to Exploit Vulnerabilities
Đa số các lỗ hổng liên quan đến input đều có thể bị tìm thấy và khai thác thông qua việc intercept và chỉnh sửa các WebSocket message:
User input gửi đến server nếu không được xử lý đúng cách có thể dẫn đến SQL Injection hoặc XXE Injection.
Một số lỗ hổng không nhìn thấy được có thể bị phát hiện thông qua các kỹ thuật out-of-band.
Nếu payload của attacker được chuyển tiếp thông qua WebSocket đến các người dùng sử dụng ứng dụng thì có thể dẫn đến XSS attack hoặc các lỗ hổng client-side.
Ví dụ, giả sử một ứng dụng chat sử dụng WebSocket để gửi tin nhắn giữa trình duyệt và server. Khi người dùng nhập tin nhắn, sẽ có một message như sau gửi đến server:
{"message":"Hello Carlos"}
Nội dung này được chuyển đến cho một người dùng khác thông qua WebSocket và được render ra trình duyệt như sau:
<td>Hello Carlos</td>
Nếu không có các cơ chế xử lý input thì attacker có thể thực hiện XSS attack bằng cách gửi WebSocket message sau:
{"message":"<img src=1 onerror='alert(1)'>"}
Lab: Manipulating WebSocket Messages to Exploit Vulnerabilities
Mô tả lab:
Ứng dụng có tính năng chat sử dụng WebSocket.
Các tin nhắn được xem bởi nhân viên hỗ trợ một cách thường xuyên.
Mục tiêu là sử dụng WebSocket message để trigger hàm alert trong trình duyệt của nhân viên hỗ trợ.
Manipulating the WebSocket Handshake to Exploit Vulnerabilities
Một số lỗ hổng có thể bị phát hiện và khai thác bằng cách thao túng các WebSocket handshake request. Những lổ hổng này thường liên quan đến các khuyết điểm bảo mật sau:
Tin cậy vào các HTTPS header chẳng hạn như X-Forwarded-For1 để thực hiện những hành động bảo mật.
Ngữ cảnh session của các WebSocket message được xác định thông qua handshake message.
Sử dụng các custom HTTP header.
Lab: Manipulating the WebSocket Handshake to Exploit Vulnerabilities
Mô tả lab:
Ứng dụng có tính năng chat sử dụng WebSocket.
Nó có sử dụng XSS filter nhưng có khuyết điểm.
Mục tiêu là sử dụng WebSocket message để trigger hàm alert trong trình duyệt của nhân viên hỗ trợ.
Khi sử dụng message là:
{"message":"<script>alert(1)</script>"}
Thì ta nhận được message sau từ server:
{"error":"Attack detected: JavaScript"}
Đồng thời, khi request đến endpoint /chat để dùng tính năng trò chuyện, server cũng trả về HTTP response như sau:
HTTP/2 401 UnauthorizedContent-Type: application/json; charset=utf-8X-Frame-Options: SAMEORIGINContent-Length: 29"This address is blacklisted"
Có thể thấy, sau khi phát hiện ra việc tấn công XSS thì server đã chặn IP của chúng ta.
Hint
Có thể bypass việc chặn IP bằng cách sử dụng header X-Forwarded-For.
Intercept request đến endpoint /chat và thêm vào header X-Forwarded-For có giá trị là một IP nội bộ:
là header mang địa chỉ IP của client kết nối đến server thông qua proxy server. Cú pháp: X-Forwarded-For: <client>, <proxy1>, <proxy2>. Tham khảo X-Forwarded-For - HTTP | MDN (mozilla.org)↩