Ushbu bo'limda cross-site WebSocket hijacking'ni (CSWSH) tushuntiramiz, buzilish (compromise) ta'sirini tavsiflaymiz va cross-site WebSocket hijacking hujumini qanday amalga oshirishni batafsil bayon qilamiz.
Cross-site WebSocket hijacking (cross-origin WebSocket hijacking nomi bilan ham ma'lum) WebSocket handshake'idagi cross-site request forgery (CSRF) zaifligini o'z ichiga oladi. U WebSocket handshake so'rovi sessiyani boshqarish uchun faqat HTTP cookie'larga tayanganda va hech qanday CSRF token yoki boshqa oldindan aytib bo'lmaydigan qiymatlarni o'z ichiga olmaganda yuzaga keladi.
Hujumchi o'z domenida zararli veb-sahifa yaratib, u zaif ilovaga cross-site WebSocket ulanishini o'rnatishi mumkin. Ilova bu ulanishni jabrlanuvchi foydalanuvchining ilova bilan sessiyasi kontekstida qayta ishlaydi.
Shundan so'ng hujumchining sahifasi ulanish orqali serverga ixtiyoriy xabarlar yuborishi va serverdan qaytib keladigan xabarlar mazmunini o'qishi mumkin. Bu shuni anglatadiki, oddiy CSRF'dan farqli o'laroq, hujumchi buzilgan ilova bilan ikki tomonlama (two-way) o'zaro aloqaga ega bo'ladi.
Muvaffaqiyatli cross-site WebSocket hijacking hujumi ko'pincha hujumchiga quyidagilar imkonini beradi:
WebSocket xabarlaridan foydalansa, hujumchi mos xabarlarni cross-domain generatsiya qilib, o'sha amallarni ishga tushirishi mumkin.WebSocket orqali zaif ilova bilan ikki tomonlama o'zaro aloqa beradi. Agar ilova foydalanuvchiga maxfiy ma'lumotni qaytarish uchun server tomonidan generatsiya qilingan WebSocket xabarlaridan foydalansa, hujumchi bu xabarlarni ushlab olib, jabrlanuvchi foydalanuvchining ma'lumotini qo'lga kiritishi mumkin.Cross-site WebSocket hijacking hujumi mohiyatan WebSocket handshake'idagi CSRF zaifligi bo'lgani uchun, hujumni amalga oshirishning birinchi qadami — ilova bajaradigan WebSocket handshake'larini ko'rib chiqish va ular CSRF'dan himoyalanganmi yoki yo'qligini aniqlash.
CSRF hujumlari uchun odatiy shartlar nuqtai nazaridan, odatda sessiyani boshqarish uchun faqat HTTP cookie'larga tayanadigan va so'rov parametrlarida hech qanday token yoki boshqa oldindan aytib bo'lmaydigan qiymatlardan foydalanmaydigan handshake xabarini topishingiz kerak.
Masalan, quyidagi WebSocket handshake so'rovi ehtimol CSRF'ga zaif, chunki yagona sessiya tokeni cookie'da uzatiladi:
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: websocketSec-WebSocket-Key sarlavhasi keshlovchi proksilardan (caching proxies) kelib chiqadigan xatolarning oldini olish uchun tasodifiy qiymatni o'z ichiga oladi va autentifikatsiya yoki sessiyani boshqarish maqsadida ishlatilmaydi.
Agar WebSocket handshake so'rovi CSRF'ga zaif bo'lsa, hujumchining veb-sahifasi zaif saytda WebSocket ochish uchun cross-site so'rov amalga oshirishi mumkin. Hujumda keyin nima sodir bo'lishi butunlay ilovaning mantig'iga va uning WebSocket'lardan qanday foydalanishiga bog'liq. Hujum quyidagilarni o'z ichiga olishi mumkin:
WebSocket xabarlarini yuborish.WebSocket xabarlarini yuborish.