πŸ”WebSockets

What are WebSockets?

WebSockets lΓ  mα»™t giao thα»©c liΓͺn lαΊ‘c hai chiều, song cΓ΄ng hoΓ n toΓ n được khởi tαΊ‘o qua HTTP. ChΓΊng thường được sα»­ dα»₯ng trong cΓ‘c α»©ng dα»₯ng web hiện Δ‘αΊ‘i để truyền dα»― liệu vΓ  lΖ°u lượng khΓ΄ng Δ‘α»“ng bα»™ khΓ‘c.

Trong phαΊ§n nΓ y, chΓΊng tΓ΄i sαΊ½ giαΊ£i thΓ­ch sα»± khΓ‘c biệt giα»―a HTTP vΓ  WebSockets, mΓ΄ tαΊ£ cΓ‘ch kαΊΏt nα»‘i WebSocket được thiαΊΏt lαΊ­p vΓ  phΓ‘c thαΊ£o cΓ‘c thΓ΄ng bΓ‘o WebSocket trΓ΄ng nhΖ° thαΊΏ nΓ o.

What is the difference between HTTP and WebSockets?

HαΊ§u hαΊΏt giao tiαΊΏp giα»―a trΓ¬nh duyệt web vΓ  trang web đều sα»­ dα»₯ng HTTP. Vα»›i HTTP, mΓ‘y khΓ‘ch gα»­i yΓͺu cαΊ§u vΓ  mΓ‘y chủ trαΊ£ về phαΊ£n hα»“i. ThΓ΄ng thường, phαΊ£n hα»“i xαΊ£y ra ngay lαΊ­p tα»©c vΓ  giao dα»‹ch hoΓ n tαΊ₯t. Ngay cαΊ£ khi kαΊΏt nα»‘i mαΊ‘ng vαΊ«n mở, kαΊΏt nα»‘i nΓ y sαΊ½ được sα»­ dα»₯ng cho mα»™t giao dα»‹ch riΓͺng của yΓͺu cαΊ§u vΓ  phαΊ£n hα»“i.

Mα»™t sα»‘ trang web hiện Δ‘αΊ‘i sα»­ dα»₯ng WebSockets. CΓ‘c kαΊΏt nα»‘i WebSocket được bαΊ―t Δ‘αΊ§u qua HTTP vΓ  thường tα»“n tαΊ‘i lΓ’u dΓ i. Tin nhαΊ―n cΓ³ thể được gα»­i theo mα»™t trong hai hΖ°α»›ng vΓ o bαΊ₯t kα»³ lΓΊc nΓ o vΓ  khΓ΄ng mang tΓ­nh chαΊ₯t giao dα»‹ch. KαΊΏt nα»‘i thường sαΊ½ mở vΓ  khΓ΄ng hoαΊ‘t Δ‘α»™ng cho Δ‘αΊΏn khi mΓ‘y khΓ‘ch hoαΊ·c mΓ‘y chủ sαΊ΅n sΓ ng gα»­i tin nhαΊ―n.

WebSockets Δ‘αΊ·c biệt hα»―u Γ­ch trong cΓ‘c trường hợp yΓͺu cαΊ§u thΓ΄ng bΓ‘o cΓ³ Δ‘α»™ trα»… thαΊ₯p hoαΊ·c do mΓ‘y chủ khởi tαΊ‘o, chαΊ³ng hαΊ‘n nhΖ° nguα»“n cαΊ₯p dα»― liệu tΓ i chΓ­nh theo thời gian thα»±c.

How are WebSocket connections established?

CΓ‘c kαΊΏt nα»‘i WebSocket thường được tαΊ‘o bαΊ±ng JavaScript phΓ­a mΓ‘y khΓ‘ch nhΖ° sau:

var ws = new WebSocket("wss://normal-website.com/chat");

Giao thα»©c wss thiαΊΏt lαΊ­p WebSocket qua kαΊΏt nα»‘i TLS được mΓ£ hΓ³a, trong khi giao thα»©c ws sα»­ dα»₯ng kαΊΏt nα»‘i khΓ΄ng được mΓ£ hΓ³a.

Để thiαΊΏt lαΊ­p kαΊΏt nα»‘i, trΓ¬nh duyệt vΓ  mΓ‘y chủ thα»±c hiện WebSocket handshake qua HTTP. TrΓ¬nh duyệt Δ‘Ζ°a ra yΓͺu cαΊ§u WebSocket handshake nhΖ° sau:

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

NαΊΏu mΓ‘y chủ chαΊ₯p nhαΊ­n kαΊΏt nα»‘i, nΓ³ sαΊ½ trαΊ£ về phαΊ£n hα»“i WebSocket handshake nhΖ° sau:

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=

TαΊ‘i thời Δ‘iểm nΓ y, kαΊΏt nα»‘i mαΊ‘ng vαΊ«n mở vΓ  cΓ³ thể được sα»­ dα»₯ng để gα»­i thΓ΄ng bΓ‘o WebSocket theo mα»™t trong hai hΖ°α»›ng.

Mα»™t sα»‘ tΓ­nh nΔƒng của thΓ΄ng bΓ‘o WebSocket handshake Δ‘Γ‘ng chΓΊ Γ½:

  • TiΓͺu đề ConnectionvΓ  Upgradetrong yΓͺu cαΊ§u vΓ  phαΊ£n hα»“i chỉ ra rαΊ±ng Δ‘Γ’y lΓ  WebSocket handshake.

  • TiΓͺu đề Sec-WebSocket-VersionyΓͺu cαΊ§u chỉ Δ‘α»‹nh phiΓͺn bαΊ£n giao thα»©c WebSocket mΓ  mΓ‘y khΓ‘ch muα»‘n sα»­ dα»₯ng. Điều nΓ y thường lΓ  13.

  • TiΓͺu đề Sec-WebSocket-Key yΓͺu cαΊ§u chα»©a giΓ‘ trα»‹ ngαΊ«u nhiΓͺn được mΓ£ hΓ³a Base64, giΓ‘ trα»‹ nΓ y sαΊ½ được tαΊ‘o ngαΊ«u nhiΓͺn trong mα»—i yΓͺu cαΊ§u bαΊ―t tay.

  • TiΓͺu đề Sec-WebSocket-Accept phαΊ£n hα»“i chα»©a hΓ m bΔƒm của giΓ‘ trα»‹ được gα»­i trong tiΓͺu đề Sec-WebSocket-Key yΓͺu cαΊ§u, được nα»‘i vα»›i mα»™t chuα»—i cα»₯ thể được xΓ‘c Δ‘α»‹nh trong Δ‘αΊ·c tαΊ£ giao thα»©c. Điều nΓ y được thα»±c hiện để ngΔƒn chαΊ·n cΓ‘c phαΊ£n hα»“i sai lệch do mΓ‘y chủ hoαΊ·c proxy bα»™ nhα»› đệm bα»‹ Δ‘α»‹nh cαΊ₯u hΓ¬nh sai.

What do WebSocket messages look like?

Khi kαΊΏt nα»‘i WebSocket Δ‘Γ£ được thiαΊΏt lαΊ­p, cΓ‘c thΓ΄ng bΓ‘o cΓ³ thể được gα»­i khΓ΄ng Δ‘α»“ng bα»™ theo cαΊ£ hai hΖ°α»›ng bởi mΓ‘y khΓ‘ch hoαΊ·c mΓ‘y chủ.

Mα»™t tin nhαΊ―n Δ‘Ζ‘n giαΊ£n cΓ³ thể được gα»­i tα»« trΓ¬nh duyệt bαΊ±ng JavaScript phΓ­a mΓ‘y khΓ‘ch nhΖ° sau:

ws.send("Peter Wiener");

Về nguyΓͺn tαΊ―c, thΓ΄ng bΓ‘o WebSocket cΓ³ thể chα»©a bαΊ₯t kα»³ nα»™i dung hoαΊ·c Δ‘α»‹nh dαΊ‘ng dα»― liệu nΓ o. Trong cΓ‘c α»©ng dα»₯ng hiện Δ‘αΊ‘i, JSON thường được sα»­ dα»₯ng để gα»­i dα»― liệu cΓ³ cαΊ₯u trΓΊc trong cΓ‘c thΓ΄ng bΓ‘o WebSocket.

VΓ­ dα»₯: mα»™t α»©ng dα»₯ng chat-bot sα»­ dα»₯ng WebSockets cΓ³ thể gα»­i mα»™t thΓ΄ng bΓ‘o nhΖ° sau:

{"user":"Hal Pline","content":"I wanted to be a Playstation growing up, not a device to answer your inane questions"}

Manipulating WebSocket traffic

Intercepting and modifying WebSocket messages

BαΊ‘n cΓ³ thể sα»­ dα»₯ng Burp Proxy để chαΊ·n vΓ  sα»­a Δ‘α»•i cΓ‘c thΓ΄ng bΓ‘o WebSocket nhΖ° sau:

  • Mở trΓ¬nh duyệt của Burp.

  • Duyệt Δ‘αΊΏn chα»©c nΔƒng α»©ng dα»₯ng sα»­ dα»₯ng WebSockets. BαΊ‘n cΓ³ thể xΓ‘c Δ‘α»‹nh rαΊ±ng WebSockets Δ‘ang được sα»­ dα»₯ng bαΊ±ng cΓ‘ch sα»­ dα»₯ng α»©ng dα»₯ng vΓ  tΓ¬m kiαΊΏm cΓ‘c mα»₯c xuαΊ₯t hiện trong tab lα»‹ch sα»­ WebSockets trong Burp Proxy.

  • Trong tab ChαΊ·n của Burp Proxy, hΓ£y Δ‘αΊ£m bαΊ£o rαΊ±ng tΓ­nh nΔƒng chαΊ·n được bαΊ­t.

  • Khi mα»™t thΓ΄ng bΓ‘o WebSocket được gα»­i tα»« trΓ¬nh duyệt hoαΊ·c mΓ‘y chủ, nΓ³ sαΊ½ được hiển thα»‹ trong tab ChαΊ·n để bαΊ‘n xem hoαΊ·c sα»­a Δ‘α»•i. NhαΊ₯n nΓΊt Chuyển tiαΊΏp - forward để chuyển tiαΊΏp tin nhαΊ―n.

Note: You can configure whether client-to-server or server-to-client messages are intercepted in Burp Proxy. Do this in the Options tab, in the Intercept WebSocket Messages options.

Replaying and generating new WebSocket messages

NgoΓ i việc chαΊ·n vΓ  sα»­a Δ‘α»•i cΓ‘c tin nhαΊ―n WebSocket mα»™t cΓ‘ch nhanh chΓ³ng, bαΊ‘n cΓ³ thể phΓ‘t lαΊ‘i cΓ‘c tin nhαΊ―n riΓͺng lαΊ» vΓ  tαΊ‘o cΓ‘c tin nhαΊ―n mα»›i. BαΊ‘n cΓ³ thể lΓ m Δ‘iều nΓ y bαΊ±ng Burp Repeater:

  • Trong Burp Proxy, hΓ£y chọn mα»™t thΖ° trong lα»‹ch sα»­ WebSockets hoαΊ·c trong tab Intercept vΓ  chọn "Send to Repeater" tα»« menu context.

  • Trong Burp Repeater, giờ Δ‘Γ’y bαΊ‘n cΓ³ thể chỉnh sα»­a tin nhαΊ―n Δ‘Γ£ chọn vΓ  gα»­i Δ‘i gα»­i lαΊ‘i.

  • BαΊ‘n cΓ³ thể nhαΊ­p mα»™t tin nhαΊ―n mα»›i vΓ  gα»­i nΓ³ theo mα»™t trong hai hΖ°α»›ng, tα»›i mΓ‘y khΓ‘ch hoαΊ·c mΓ‘y chủ.

  • Trong bαΊ£ng "History" trong Burp Repeater, bαΊ‘n cΓ³ thể xem lα»‹ch sα»­ của cΓ‘c tin nhαΊ―n Δ‘Γ£ được truyền qua kαΊΏt nα»‘i WebSocket. Điều nΓ y bao gα»“m cΓ‘c thΓ΄ng bΓ‘o mΓ  bαΊ‘n Δ‘Γ£ tαΊ‘o trong Burp Repeater vΓ  bαΊ₯t kα»³ thΓ΄ng bΓ‘o nΓ o được tαΊ‘o bởi trΓ¬nh duyệt hoαΊ·c mΓ‘y chủ thΓ΄ng qua cΓΉng mα»™t kαΊΏt nα»‘i.

  • NαΊΏu bαΊ‘n muα»‘n chỉnh sα»­a vΓ  gα»­i lαΊ‘i bαΊ₯t kα»³ thΖ° nΓ o trong bαΊ£ng lα»‹ch sα»­, bαΊ‘n cΓ³ thể thα»±c hiện việc nΓ y bαΊ±ng cΓ‘ch chọn thΖ° vΓ  chọn "Edit and resend" tα»« menu ngα»― cαΊ£nh.

Manipulating WebSocket connections

CΕ©ng nhΖ° thao tΓ‘c vα»›i cΓ‘c thΓ΄ng bΓ‘o WebSocket, Δ‘Γ΄i khi cαΊ§n phαΊ£i thao tΓ‘c vα»›i WebSocket handshake để thiαΊΏt lαΊ­p kαΊΏt nα»‘i.

CΓ³ nhiều tΓ¬nh huα»‘ng khΓ‘c nhau trong Δ‘Γ³ thao tΓ‘c bαΊ―t tay WebSocket cΓ³ thể cαΊ§n thiαΊΏt:

  • NΓ³ cΓ³ thể cho phΓ©p bαΊ‘n tiαΊΏp cαΊ­n nhiều bề mαΊ·t tαΊ₯n cΓ΄ng hΖ‘n.

  • Mα»™t sα»‘ cuα»™c tαΊ₯n cΓ΄ng cΓ³ thể khiαΊΏn kαΊΏt nα»‘i của bαΊ‘n bα»‹ ngαΊ―t, do Δ‘Γ³ bαΊ‘n cαΊ§n thiαΊΏt lαΊ­p mα»™t kαΊΏt nα»‘i mα»›i.

  • MΓ£ thΓ΄ng bΓ‘o hoαΊ·c dα»― liệu khΓ‘c trong yΓͺu cαΊ§u bαΊ―t tay ban Δ‘αΊ§u cΓ³ thể Δ‘Γ£ cΕ© vΓ  cαΊ§n cαΊ­p nhαΊ­t.

BαΊ‘n cΓ³ thể thao tΓ‘c bαΊ―t tay WebSocket bαΊ±ng Burp Repeater:

  • Gα»­i mα»™t tin nhαΊ―n WebSocket tα»›i Burp Repeater nhΖ° Δ‘Γ£ được mΓ΄ tαΊ£ .

  • Trong Burp Repeater, nhαΊ₯p vΓ o biểu tượng bΓΊt chΓ¬ bΓͺn cαΊ‘nh URL WebSocket. Thao tΓ‘c nΓ y sαΊ½ mở ra mα»™t trΓ¬nh hΖ°α»›ng dαΊ«n cho phΓ©p bαΊ‘n Δ‘Γ­nh kΓ¨m vΓ o mα»™t WebSocket Δ‘Γ£ kαΊΏt nα»‘i hiện cΓ³, sao chΓ©p mα»™t WebSocket Δ‘Γ£ kαΊΏt nα»‘i hoαΊ·c kαΊΏt nα»‘i lαΊ‘i vα»›i mα»™t WebSocket Δ‘Γ£ ngαΊ―t kαΊΏt nα»‘i.

  • NαΊΏu bαΊ‘n chọn sao chΓ©p mα»™t WebSocket Δ‘Γ£ kαΊΏt nα»‘i hoαΊ·c kαΊΏt nα»‘i lαΊ‘i vα»›i mα»™t WebSocket Δ‘Γ£ ngαΊ―t kαΊΏt nα»‘i, thΓ¬ trΓ¬nh hΖ°α»›ng dαΊ«n sαΊ½ hiển thα»‹ Δ‘αΊ§y đủ chi tiαΊΏt về yΓͺu cαΊ§u bαΊ―t tay WebSocket mΓ  bαΊ‘n cΓ³ thể chỉnh sα»­a theo yΓͺu cαΊ§u trΖ°α»›c khi thα»±c hiện bαΊ―t tay.

  • Khi bαΊ‘n nhαΊ₯p vΓ o "Connect", Burp sαΊ½ cα»‘ gαΊ―ng thα»±c hiện quΓ‘ trΓ¬nh handshake Δ‘Γ£ Δ‘α»‹nh cαΊ₯u hΓ¬nh vΓ  hiển thα»‹ kαΊΏt quαΊ£. NαΊΏu kαΊΏt nα»‘i WebSocket mα»›i được thiαΊΏt lαΊ­p thΓ nh cΓ΄ng, thΓ¬ bαΊ‘n cΓ³ thể sα»­ dα»₯ng kαΊΏt nα»‘i nΓ y để gα»­i tin nhαΊ―n mα»›i trong Burp Repeater.

WebSockets security vulnerabilities

Về nguyΓͺn tαΊ―c, trΓͺn thα»±c tαΊΏ, bαΊ₯t kα»³ lα»— hα»•ng bαΊ£o mαΊ­t web nΓ o cΕ©ng cΓ³ thể phΓ‘t sinh liΓͺn quan Δ‘αΊΏn WebSockets:

  • Đầu vΓ o do người dΓΉng cung cαΊ₯p được truyền Δ‘αΊΏn mΓ‘y chủ cΓ³ thể được xα»­ lΓ½ theo nhα»―ng cΓ‘ch khΓ΄ng an toΓ n, dαΊ«n Δ‘αΊΏn cΓ‘c lα»— hα»•ng nhΖ° SQL Injection hoαΊ·c XML external entity injection.

  • Mα»™t sα»‘ blind vulnerabilities Δ‘αΊ‘t được thΓ΄ng qua WebSockets chỉ cΓ³ thể được phΓ‘t hiện bαΊ±ng cΓ‘ch sα»­ dα»₯ng cΓ‘c kα»Ή thuαΊ­t ngoΓ i bΔƒng tαΊ§n (OAST) .

  • NαΊΏu dα»― liệu do kαΊ» tαΊ₯n cΓ΄ng kiểm soΓ‘t được truyền qua WebSockets tα»›i nhα»―ng người dΓΉng α»©ng dα»₯ng khΓ‘c, thΓ¬ Δ‘iều Δ‘Γ³ cΓ³ thể dαΊ«n Δ‘αΊΏn vul XSS hoαΊ·c cΓ‘c lα»— hα»•ng phΓ­a mΓ‘y khΓ‘ch khΓ‘c.

Manipulating WebSocket messages to exploit vulnerabilities

PhαΊ§n lα»›n cΓ‘c lα»— hα»•ng dα»±a trΓͺn Δ‘αΊ§u vΓ o αΊ£nh hưởng Δ‘αΊΏn WebSockets cΓ³ thể được tΓ¬m thαΊ₯y vΓ  khai thΓ‘c bαΊ±ng cΓ‘ch giαΊ£ mαΊ‘o nα»™i dung của thΓ΄ng bΓ‘o WebSocket .

VΓ­ dα»₯: giαΊ£ sα»­ α»©ng dα»₯ng trΓ² chuyện sα»­ dα»₯ng WebSockets để gα»­i tin nhαΊ―n trΓ² chuyện giα»―a trΓ¬nh duyệt vΓ  mΓ‘y chủ. Khi người dΓΉng nhαΊ­p tin nhαΊ―n trΓ² chuyện, mα»™t tin nhαΊ―n WebSocket nhΖ° sau sαΊ½ được gα»­i Δ‘αΊΏn mΓ‘y chủ:

{"message":"Hello Carlos"}

Nα»™i dung của tin nhαΊ―n được truyền (mα»™t lαΊ§n nα»―a qua WebSockets) tα»›i mα»™t người dΓΉng trΓ² chuyện khΓ‘c vΓ  được hiển thα»‹ trong trΓ¬nh duyệt của người dΓΉng nhΖ° sau:

<td>Hello Carlos</td>

Trong tΓ¬nh huα»‘ng nΓ y, miα»…n lΓ  khΓ΄ng cΓ³ quΓ‘ trΓ¬nh xα»­ lΓ½ hoαΊ·c phΓ²ng thủ Δ‘αΊ§u vΓ o nΓ o khΓ‘c Δ‘ang hoαΊ‘t Δ‘α»™ng, kαΊ» tαΊ₯n cΓ΄ng cΓ³ thể thα»±c hiện mα»™t cuα»™c tαΊ₯n cΓ΄ng XSS bαΊ±ng chα»©ng về khΓ‘i niệm bαΊ±ng cΓ‘ch gα»­i thΓ΄ng bΓ‘o WebSocket sau:

{"message":"<img src=1 onerror='alert(1)'>"}

Manipulating the WebSocket handshake to exploit vulnerabilities

Mα»™t sα»‘ lα»— hα»•ng WebSockets chỉ cΓ³ thể được tΓ¬m thαΊ₯y vΓ  khai thΓ‘c bαΊ±ng manipulating the WebSocket handshake . Nhα»―ng lα»— hα»•ng nΓ y cΓ³ xu hΖ°α»›ng liΓͺn quan Δ‘αΊΏn lα»—i thiαΊΏt kαΊΏ, chαΊ³ng hαΊ‘n nhΖ°:

  • Đặt niềm tin khΓ΄ng Δ‘ΓΊng chα»— vΓ o cΓ‘c tiΓͺu đề HTTP để thα»±c hiện cΓ‘c quyαΊΏt Δ‘α»‹nh bαΊ£o mαΊ­t, chαΊ³ng hαΊ‘n nhΖ° tiΓͺu đề X-Forwarded-For.

  • CΓ‘c lα»—i trong cΖ‘ chαΊΏ xα»­ lΓ½ phiΓͺn, vΓ¬ bα»‘i cαΊ£nh phiΓͺn trong Δ‘Γ³ cΓ‘c thΓ΄ng bΓ‘o WebSocket được xα»­ lΓ½ thường được xΓ‘c Δ‘α»‹nh bởi ngα»― cαΊ£nh phiΓͺn của thΓ΄ng bΓ‘o handshake.

  • Bề mαΊ·t tαΊ₯n cΓ΄ng được giα»›i thiệu bởi cΓ‘c tiΓͺu đề HTTP tΓΉy chỉnh được α»©ng dα»₯ng sα»­ dα»₯ng.

Using cross-site WebSockets to exploit vulnerabilities

Mα»™t sα»‘ lα»— hα»•ng bαΊ£o mαΊ­t WebSockets phΓ‘t sinh khi kαΊ» tαΊ₯n cΓ΄ng tαΊ‘o kαΊΏt nα»‘i WebSocket tΓͺn miền chΓ©o tα»« mα»™t trang web mΓ  kαΊ» tαΊ₯n cΓ΄ng kiểm soΓ‘t. ĐÒy được gọi lΓ  mα»™t cuα»™c tαΊ₯n cΓ΄ng cross-site WebSocket hijacking vΓ  nΓ³ liΓͺn quan Δ‘αΊΏn việc khai thΓ‘c lα»— hα»•ng cross-site request forgery (CSRF) trΓͺn mα»™t WebSocket handshake. Cuα»™c tαΊ₯n cΓ΄ng thường cΓ³ tΓ‘c Δ‘α»™ng nghiΓͺm trọng, cho phΓ©p kαΊ» tαΊ₯n cΓ΄ng thα»±c hiện cΓ‘c hΓ nh Δ‘α»™ng Δ‘αΊ·c quyền thay mαΊ·t cho người dΓΉng nαΊ‘n nhΓ’n hoαΊ·c lαΊ₯y dα»― liệu nhαΊ‘y cαΊ£m mΓ  người dΓΉng nαΊ‘n nhΓ’n cΓ³ quyền truy cαΊ­p.

What is cross-site WebSocket hijacking?

Cross-site WebSockets hijacking ( cΕ©ng được biαΊΏt nhΖ° lΓ  cross-origin WebSocket hijacking) liΓͺn quan Δ‘αΊΏn lα»— hα»•ng giαΊ£ mαΊ‘o yΓͺu cαΊ§u liΓͺn trang (CSRF) trong quΓ‘ trΓ¬nh WebSocket handshake. NΓ³ phΓ‘t sinh khi yΓͺu cαΊ§u WebSocket handshake chỉ dα»±a vΓ o cookie HTTP để xα»­ lΓ½ session vΓ  khΓ΄ng chα»©a bαΊ₯t kα»³ CSRF token nΓ o hoαΊ·c cΓ‘c giΓ‘ trα»‹ khΓ΄ng thể Δ‘oΓ‘n trΖ°α»›c khΓ‘c.

KαΊ» tαΊ₯n cΓ΄ng cΓ³ thể tαΊ‘o mα»™t trang web Δ‘α»™c hαΊ‘i trΓͺn miền riΓͺng của chΓΊng, trang nΓ y sαΊ½ thiαΊΏt lαΊ­p kαΊΏt nα»‘i WebSocket chΓ©o trang tα»›i α»©ng dα»₯ng dα»… bα»‹ tαΊ₯n cΓ΄ng. Ứng dα»₯ng sαΊ½ xα»­ lΓ½ kαΊΏt nα»‘i trong bα»‘i cαΊ£nh (context session) phiΓͺn của người dΓΉng nαΊ‘n nhΓ’n vα»›i α»©ng dα»₯ng.

Sau Δ‘Γ³, trang của kαΊ» tαΊ₯n cΓ΄ng cΓ³ thể gα»­i cΓ‘c tin nhαΊ―n tΓΉy Γ½ Δ‘αΊΏn mΓ‘y chủ thΓ΄ng qua kαΊΏt nα»‘i vΓ  đọc nα»™i dung của cΓ‘c tin nhαΊ―n nhαΊ­n được tα»« mΓ‘y chủ. Điều nΓ y cΓ³ nghΔ©a lΓ , khΓ΄ng giα»‘ng nhΖ° CSRF thΓ΄ng thường, kαΊ» tαΊ₯n cΓ΄ng cΓ³ được sα»± tΖ°Ζ‘ng tΓ‘c hai chiều vα»›i α»©ng dα»₯ng bα»‹ xΓ’m nhαΊ­p.

What is the impact of cross-site WebSocket hijacking?

Mα»™t cuα»™c tαΊ₯n cΓ΄ng cross-site Websocket hijacking thΓ nh cΓ΄ng thường sαΊ½ cho phΓ©p hacker:

  • Perform unauthorized actions masquerading as the victim user. NhΖ° vα»›i CSRF thΓ΄ng thường, kαΊ» tαΊ₯n cΓ΄ng cΓ³ thể gα»­i cΓ‘c thΓ΄ng bΓ‘o tΓΉy Γ½ Δ‘αΊΏn α»©ng dα»₯ng phΓ­a mΓ‘y chủ. NαΊΏu α»©ng dα»₯ng sα»­ dα»₯ng thΓ΄ng bΓ‘o WebSocket do mΓ‘y khΓ‘ch tαΊ‘o để thα»±c hiện bαΊ₯t kα»³ hΓ nh Δ‘α»™ng nhαΊ‘y cαΊ£m nΓ o, thΓ¬ kαΊ» tαΊ₯n cΓ΄ng cΓ³ thể tαΊ‘o thΓ΄ng bΓ‘o phΓΉ hợp trΓͺn nhiều miền vΓ  kΓ­ch hoαΊ‘t cΓ‘c hΓ nh Δ‘α»™ng Δ‘Γ³.

  • Retrieve sensitive data that the user can access. KhΓ΄ng giα»‘ng nhΖ° CSRF thΓ΄ng thường, chiαΊΏm quyền Δ‘iều khiển WebSocket chΓ©o trang cho phΓ©p kαΊ» tαΊ₯n cΓ΄ng tΖ°Ζ‘ng tΓ‘c hai chiều vα»›i α»©ng dα»₯ng dα»… bα»‹ tαΊ₯n cΓ΄ng qua WebSocket bα»‹ tαΊ₯n cΓ΄ng. NαΊΏu α»©ng dα»₯ng sα»­ dα»₯ng cΓ‘c thΓ΄ng bΓ‘o WebSocket do mΓ‘y chủ tαΊ‘o để trαΊ£ lαΊ‘i bαΊ₯t kα»³ dα»― liệu nhαΊ‘y cαΊ£m nΓ o cho người dΓΉng, thΓ¬ kαΊ» tαΊ₯n cΓ΄ng cΓ³ thể chαΊ·n cΓ‘c thΓ΄ng bΓ‘o Δ‘Γ³ vΓ  thu thαΊ­p dα»― liệu của người dΓΉng nαΊ‘n nhΓ’n.

Performing a cross-site WebSocket hijacking attack

VΓ¬ mα»™t cuα»™c tαΊ₯n cΓ΄ng chiαΊΏm quyền Δ‘iều khiển WebSocket trΓͺn nhiều trang web về cΖ‘ bαΊ£n lΓ  mα»™t lα»— hα»•ng CSRF trΓͺn mα»™t WebSocket handshake, nΓͺn bΖ°α»›c Δ‘αΊ§u tiΓͺn để thα»±c hiện mα»™t cuα»™c tαΊ₯n cΓ΄ng lΓ  xem xΓ©t cΓ‘c WebSocket handshake mΓ  α»©ng dα»₯ng thα»±c hiện vΓ  xΓ‘c Δ‘α»‹nh xem chΓΊng cΓ³ được bαΊ£o vệ chα»‘ng lαΊ‘i CSRF hay khΓ΄ng.

XΓ©t về cΓ‘c Δ‘iều kiện thΓ΄ng thường Δ‘α»‘i vα»›i cΓ‘c cuα»™c tαΊ₯n cΓ΄ng CSRF , bαΊ‘n thường cαΊ§n tΓ¬m mα»™t thΓ΄ng bΓ‘o bαΊ―t tay chỉ dα»±a vΓ o cookie HTTP để xα»­ lΓ½ phiΓͺn vΓ  khΓ΄ng sα»­ dα»₯ng bαΊ₯t kα»³ mΓ£ thΓ΄ng bΓ‘o nΓ o hoαΊ·c cΓ‘c giΓ‘ trα»‹ khΓ΄ng thể Δ‘oΓ‘n trΖ°α»›c khΓ‘c trong tham sα»‘ yΓͺu cαΊ§u.

VΓ­ dα»₯: yΓͺu cαΊ§u WebSocket handshake sau Δ‘Γ’y cΓ³ thể dα»… bα»‹ CSRF, vΓ¬ mΓ£ thΓ΄ng bΓ‘o phiΓͺn duy nhαΊ₯t được truyền trong 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

Note: TiΓͺu đề Sec-WebSocket-Key chα»©a mα»™t giΓ‘ trα»‹ ngαΊ«u nhiΓͺn để ngΔƒn lα»—i tα»« bα»™ nhα»› đệm proxy vΓ  khΓ΄ng được sα»­ dα»₯ng cho mα»₯c Δ‘Γ­ch xΓ‘c thα»±c hoαΊ·c xα»­ lΓ½ session.

NαΊΏu yΓͺu cαΊ§u WebSocket handshake dα»… bα»‹ tαΊ₯n cΓ΄ng CSRF thΓ¬ trang web của kαΊ» tαΊ₯n cΓ΄ng cΓ³ thể thα»±c hiện yΓͺu cαΊ§u chΓ©o trang để mở mα»™t WebSocket trΓͺn trang dα»… bα»‹ tαΊ₯n cΓ΄ng. Điều gΓ¬ xαΊ£y ra tiαΊΏp theo trong cuα»™c tαΊ₯n cΓ΄ng phα»₯ thuα»™c hoΓ n toΓ n vΓ o logic của α»©ng dα»₯ng vΓ  cΓ‘ch α»©ng dα»₯ng sα»­ dα»₯ng WebSockets . Cuα»™c tαΊ₯n cΓ΄ng cΓ³ thể liΓͺn quan Δ‘αΊΏn:

  • Gα»­i tin nhαΊ―n WebSocket để thα»±c hiện cΓ‘c hΓ nh Δ‘α»™ng trΓ‘i phΓ©p thay mαΊ·t cho người dΓΉng nαΊ‘n nhΓ’n.

  • Gα»­i tin nhαΊ―n WebSocket để truy xuαΊ₯t dα»― liệu nhαΊ‘y cαΊ£m.

  • Đôi khi, chỉ cαΊ§n đợi cΓ‘c tin nhαΊ―n Δ‘αΊΏn cΓ³ chα»©a dα»― liệu nhαΊ‘y cαΊ£m.

How to secure a WebSocket connection

Để giαΊ£m thiểu nguy cΖ‘ lα»— hα»•ng bαΊ£o mαΊ­t phΓ‘t sinh vα»›i WebSockets, hΓ£y sα»­ dα»₯ng cΓ‘c nguyΓͺn tαΊ―c sau:

  • Sα»­ dα»₯ng wss://giao thα»©c (WebSockets qua TLS).

  • MΓ£ cα»©ng URL của Δ‘iểm cuα»‘i WebSockets vΓ  chαΊ―c chαΊ―n khΓ΄ng kαΊΏt hợp dα»― liệu do người dΓΉng kiểm soΓ‘t vΓ o URL nΓ y.

  • BαΊ£o vệ thΓ΄ng bΓ‘o bαΊ―t tay WebSocket chα»‘ng lαΊ‘i CSRF, để trΓ‘nh cΓ‘c lα»— hα»•ng chiαΊΏm quyền Δ‘iều khiển WebSocket trΓͺn nhiều trang web.

  • Xα»­ lΓ½ dα»― liệu nhαΊ­n được qua WebSocket lΓ  khΓ΄ng Δ‘Γ‘ng tin cαΊ­y theo cαΊ£ hai hΖ°α»›ng. Xα»­ lΓ½ dα»― liệu mα»™t cΓ‘ch an toΓ n trΓͺn cαΊ£ mΓ‘y chủ vΓ  mΓ‘y khΓ‘ch, để ngΔƒn chαΊ·n cΓ‘c lα»— hα»•ng dα»±a trΓͺn Δ‘αΊ§u vΓ o nhΖ° SQL injection vΓ  cross-site scripting .

Last updated