Cross-site WebSocket hijacking (CSWSH)
В этом разделе мы узнаем, что такое Cross-site WebSocket hijacking (CSWSH), опишем последствия компрометации и разберём, как выполнить данную атаку.
Что такое Cross-site WebSocket hijacking?
Cross-site WebSocket hijacking связано с уязвимостью CSRF в рукопожатии WebSocket. Оно возникает, когда запрос рукопожатия WebSocket полагается исключительно на HTTP-cookie для управления сессией и не содержит CSRF-токенов или других непредсказуемых значений.
Атакующий может создать вредоносную веб-страницу на своём домене, которая установит Cross-Site соединение WebSocket с уязвимым приложением. Приложение будет обрабатывать соединение в контексте сессии пользователя-жертвы с этим приложением.
Страница атакующего затем может отправлять серверу произвольные сообщения через соединение и читать содержимое сообщений, получаемых обратно от сервера. Это означает, что, в отличие от обычного CSRF, атакующий получает двустороннее взаимодействие с скомпрометированным приложением.
Каковы последствия Cross-site WebSocket hijacking?
Успешная атака Cross-site WebSocket hijacking часто позволяет атакующему:
Выполнять неавторизованные действия, выдавая себя за пользователя-жертву. Как и при обычном CSRF, атакующий может отправлять серверному приложению произвольные сообщения. Если приложение использует сообщения WebSocket, генерируемые клиентом, для выполнения чувствительных действий, атакующий может сформировать соответствующие сообщения и запустить доступные действия.
Получать конфиденциальные данные, к которым имеет доступ пользователь. В отличие от обычного CSRF, Cross-site WebSocket hijacking даёт атакующему двустороннее взаимодействие с уязвимым приложением через перехваченное соединение WebSocket. Если приложение использует сообщения WebSocket, генерируемые сервером, чтобы возвращать пользователю конфиденциальные данные, атакующий может перехватывать эти сообщения и получать данные пользователя-жертвы.
Выполнение атаки Cross-site WebSocket hijacking
Поскольку Cross-site WebSocket hijacking по сути является уязвимостью CSRF в рукопожатии WebSocket, первый шаг к выполнению атаки — изучить рукопожатия WebSocket, выполняемые приложением, и определить, защищены ли они от CSRF.
С точки зрения обычных условий для CSRF атак, вам обычно нужно найти сообщение рукопожатия, которое полагается только на HTTP-cookie для управления сессией и не использует никакие токены или другие непредсказуемые значения в параметрах запроса.
Например, следующий запрос рукопожатия WebSocket, вероятно, уязвим для CSRF, поскольку единственный сессионный токен передаётся в cookie:
GET /chat HTTP/1.1
Host: normal-website.com
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: wDqumtseNBJdhkihL6PW7w==
Connection: keep-alive, Upgrade
Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
Upgrade: websocketЕсли запрос рукопожатия WebSocket уязвим для CSRF, страница атакующего может выполнить Cross-Site запрос для открытия WebSocket на уязвимом сайте. Дальнейшие шаги зависят целиком от логики приложения и того, как оно использует WebSockets. Атака может включать:
Отправку сообщений WebSocket для выполнения неавторизованных действий от имени пользователя-жертвы.
Отправку сообщений WebSocket для получения конфиденциальных данных.
Иногда — просто ожидание входящих сообщений с конфиденциальными данными.
Last updated