Client-supplied bytes are spliced unvalidated into other subscribers' JSON frames, letting any broadcaster forge Realtime protocol events (including postgres_changes) to every other client on the channel.
Does it affect you?
Not read yetConditions are read within the hour after an advisory comes in.
Summary The bytes a client sends as a V2 binary user broadcast are spliced verbatim into the JSON text frame that other clients receive, without ever being parsed or validated. Any client that may broadcast on a channel can therefore write arbitrary top-level Realtime protocol fields into the frames every other subscriber on that channel receives, including a forged postgres changes database-change event and a forged phx close . On a public channel no authorization of any kind is involved: the anon key is published in every client bundle by design, and public channels run with policies: nil .
Timeline
24 Sep- Published by GitHub advisory24 Sep
- Seen by Patchwire23 Oct
Packages
Stacks
Related alerts(1)
Same packages- Self-hosted Supabase Realtime deployment serving multiple tenants.
- Clients or users can choose their own tenant external id (e.g. user-defined project names) through the management API.
- An attacker can create a tenant whose external id equals the victim's tenant id followed by "-private".
- The victim tenant uses private (RLS-protected) broadcast channels.
- Affected
- in the source
- Fixed in
- no fix yet
- ID
- GHSA-2rcv-vpjw-5g6c