Skip to content

WebSocket Saldırıları

difficulty: orta

WebSocket bağlantıları HTTP handshake ile başlar, sonra çift yönlü kanala geçer. Güvenlik kontrolleri çoğu zaman handshake’e odaklanır; mesaj içeriği ve origin doğrulaması ihmal edilir. Her mesajı HTTP parametresi gibi test et.

GET /chat HTTP/1.1
Host: victim.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Origin: https://victim.com
Cookie: session=...

Sunucu 101 Switching Protocols döner. Sonrasında JSON/text/binary frame’ler güvenilmez girdidir.

Terminal window
curl -i -N \
-H 'Connection: Upgrade' \
-H 'Upgrade: websocket' \
-H 'Sec-WebSocket-Version: 13' \
-H 'Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==' \
-H 'Origin: https://attacker.example' \
-H 'Cookie: session=USER' \
https://victim.com/chat
□ Mesaj DOM'a yazılıyorsa → XSS
□ SQL / NoSQL / OS / LDAP / SSTI sink → ilgili injection
□ Yetki yalnızca handshake'te → mesaj düzeyinde IDOR
□ Komut tipi tahmin edilebilir → {"cmd":"admin_delete","id":1}
□ Binary / protobuf / MessagePack → decode edip alan değiştir
{ "action": "getUser", "id": 2 }
{ "action": "search", "q": "' OR 1=1--" }
{ "msg": "<img src=x onerror=alert(1)>" }
{ "template": "{{7*7}}" }
{ "path": "....//....//etc/passwd" }

Handshake çerezle kimlik doğruluyor ama Origin doğrulanmıyor ve ek CSRF token yoksa, saldırgan sitesi kurban adına WebSocket açıp veri sızdırabilir:

  1. Handshake’i incele — Origin reddediliyor mu? Yalnızca cookie mi var? Sec-WebSocket-Protocol özel token taşıyor mu?

  2. Saldırgan Origin ile dene — Burp’da Origin’i değiştir; 101 geliyorsa aday.

  3. Saldırgan sayfasından bağlan :

  4. Kurbanı çek — oturumlu tarayıcı WS açar; hassas mesajlar attacker’a akar. SameSite=Lax/Strict CSWSH’yi azaltabilir; None veya cookie’siz JWT query/header akışlarında risk sürer.

Origin: https://victim.com.attacker.example
Origin: null
Origin: https://attacker.example
Origin: https://victim.com%09.evil.com
□ roomId / userId / channel subscribe değiştir
□ Başka kullanıcının mesajlarına subscribe
□ Admin-only action'ı user oturumuyla gönder
□ Reconnect token / ticket tahmin edilebilir veya reuse
□ Rate limit yok → mesaj flood / account enumeration
{ "subscribe": "user:1001" }
{ "subscribe": "user:1002" }
{ "action": "transfer", "from": 1, "to": 2, "amount": 100 }
□ Aynı harcama mesajını paralel gönder (race)
□ Eski signed message replay
□ Sequence number yoksa reorder

Nadir: ön proxy WebSocket upgrade’i yanlış işlerse isteğin diğer kullanıcı bağlantısına karışması (lab/özel bug). Upgrade isteklerini smuggling test setine ekleyin.

Terminal window
websocat -H='Cookie: session=...' wss://hedef/chat
Terminal window
wscat -c 'wss://hedef/chat' --header 'Cookie: session=...'
Terminal window
websocat -E wss://hedef/chat
□ Origin / CSRF token / SameSite cookie matrisi
□ Her mesaj tipi için IDOR + injection
□ XSS sink (chat UI)
□ CSWSH PoC (zararsız read)
□ Binary protokol decode
□ Reconnect & ticket güvenliği