Skip to content

WebSockets werden über HTTP initiiert. Sie stellen dabei langlebige asynchrone Verbindungen in beide Richtungen zur Verfügung. Alle Web Schwachstellen können auch für WebSockets auftreten. WebSockets sind nützlich, bei Anwendungen mit geringer Latenz. Zudem ist es nötig wenn Nachrichten ausgetauscht werden müssen, wie echtzeit Daten etwa Finanzielle Daten. ![[Pasted image 20241024222856.png]] Websocket Verbindungen werden normalerweise durch JavaScript wie dem folgenden erstellt:

 var ws = new WebSocket("wss://normal-website.com/chat");
 ```
 Das `wss` Protokoll ist verschlüsselt, während das `ws` Protokoll unverschlüsselt ist.
 Um eine Verbindung aufzubauen führt der Browser einen Handshake mit dem Server auf. Dazu wird vom Browser zunächst der folgende WebSocket handshake request ausgeführt:
```http
 GET /chat HTTP/1.1
 Host: normal-website.com
 Sec-WebSocket-Version: 13
 Sec-WebSocket-Key: <key>
 Connection: keep-alive, Upgrade
 Cookie: session=<cookie>
 Upgrade: websocket
Akzeptiert der Server die Verbindung, er schickt einen WebSocket handshake zurück: http HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: websocket Sec-WebSocket-Accept: <encrypted> Sobald die Verbindung aufgebaut wurde kann der Browser durch Javascript Nachrichten schicken:
ws.send("Peter Wiener");

Manipulieren des Handshakes

Manche Schwachstellen können nur gefunden und ausgenutzt werden durch die Manipulation des Handshakes. Dabei werden Design Fehler benutzt wie: - Vertrauen in HTTP header wie X-Forwarded-For - Fehler im Session Management, da Sessions üblicherweise auf dem Kontext des Handshakes basieren - Angriffsfläche durch nicht Standardmäßige Header

Cross-site WebSockets

Es ist möglich eine cross-domain websocket Attacke von einer vom Angreifer kontrollierbaren Seite zu machen. Dies ist bekannt als cross-site WebSocket hijacking Angriff, dabei wird eine CSRF Schwachstelle auf einem WebSocket handshake durchgeführt. Diese Attacke kann durchgeführt werden, wenn der WebSocket handshake nur auf HTTP cookies basiert. Zudem dürfen keine CSRF Token oder andere unvorhersehbare Werte enthalten.