Skip to main content

Supabase Realtime CVE-2026-62247

| EUVDEUVD-2026-84066 MEDIUM
Incorrect Authorization (CWE-863)
2026-09-21 GitHub_M
6.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate to private Realtime channel (presence.write, presence.read denied)
  2. Delivery
    Join and enable presence tracking
  3. Exploit
    INSERT probe returns row via RETURNING *
  4. Execution
    Server conflates write with read authorization
  5. Persist
    Receive presence_diff of other members
  6. Impact
    Harvest peers' presence metadata

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires a private Supabase Realtime channel configured with a differential per-extension RLS policy where the client is granted presence.write but explicitly denied presence.read; the attacker must hold a valid authenticated WebSocket session (PR:L) on that channel and enable presence tracking. Limiting factors: this is a non-default asymmetric configuration - deployments with uniform presence visibility are not affected, postgres_changes data is never exposed, and disclosure is confined to application-defined presence metadata (location, online-status, roster, viewing, typing). Only versions prior to 2.111.2 are vulnerable.

Impact

This is a moderate, tightly-gated authorization flaw (CWE-863) with no signals of active or opportunistic exploitation: no CISA KEV listing, no EPSS score supplied, and no public proof-of-concept identified - so this is 'no public exploit identified at time of analysis.' The vendor CVSS of 6.5 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N) captures network reach and low attacker privilege but, in my view, overstates confidentiality impact: the leaked data is limited to other members' presence metadata (application-defined location, online-status, roster, viewing, typing), not database rows - the description explicitly notes postgres_changes row data is unaffected - which argues for C:L rather than C:H. More importantly, the real-world risk is bounded by a specific non-default precondition: the tenant must have configured a differential RLS policy on a private channel that grants presence.write while denying presence.read. Deployments with uniform presence visibility 'have no differential' and are simply not affected. There is no SSVC decision data, no KEV, and no EPSS in the input to weigh; the honest read is 'low real-world risk despite a mid-range CVSS,' driven by the narrow configuration gate and limited data exposure rather than any exploitation evidence. This is patch-in-normal-cycle, not a fire drill.

Exploit ScenarioDerived

A tenant configures a private Supabase Realtime channel with an asymmetric authorization policy: a given client is granted presence.write (may broadcast its own presence) but is explicitly denied presence.read. Because the pre-2.111.2 write probe used INSERT ... RETURNING *, Postgres enforced the SELECT (read) policy on the returned row and conflated write with read, so the authenticated client still receives presence_diff messages exposing other members' location, online-status, roster, and typing metadata. No public exploit code exists; exploitation requires a valid authenticated WebSocket session on the channel.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 21, 2026

Presence metadata disclosure in Supabase Realtime before 2.111.2 lets an authenticated WebSocket client on a private channel receive presence_diff messages containing other members' application-defined presence state - location, online-status, roster, viewing or typing data - even when that channel's per-extension row-level security policy explicitly denies presence.read while still granting presence.write. The defect is an authorization-logic error (CWE-863) in how presence diffs were dispatched past the read policy; it is tightly gated by a non-default asymmetric policy configuration, and there is no public exploit identified at time of analysis, no CISA KEV listing, and no EPSS score supplied. The vendor's CVSS 6.5 (C:H) likely overstates confidentiality impact, since disclosure is confined to presence metadata and postgres_changes row data is explicitly unaffected, which argues for C:L.

RemediationAI

Upgrade Supabase Realtime to version 2.111.2, the exact fixed release (release tag v2.111.2, upstream commit c039bca9b57c2e554a67fdf462970b54641d82eb via PR 1969, referenced by advisory GHSA-rcr8-2525-4r7p); self-hosted operators should pin their container/image digest to 2.111.2 or later and Supabase Cloud projects inherit the fix on the managed side. Until the upgrade is applied, the most effective compensating control is to remove the policy asymmetry that makes exploitation possible: audit presence policies and ensure no role is granted presence.write while being denied presence.read - either grant presence.read to any principal that can write presence, which restores non-differential visibility, or revoke presence.write from those principals, with the trade-off that clients then lose the ability to publish presence state. A blunter option is to disable presence tracking entirely on the affected private channels (clients simply will not receive presence_state/presence_diff), which fully removes exposure at the cost of the presence feature, while leaving postgres_changes and broadcast untouched since those paths are not affected by this issue. Note that because the bug is an authorization-logic error rather than a protocol flaw, log-based detection is weak - presence_diff payloads look identical to legitimate traffic - so access-control correction or version upgrade should be treated as the primary action rather than monitoring.

Affected VersionsENISA

realtime < 2.111.2

Affected Packages

euvd realtime fix: 2.111.2

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Supabase Realtime is an Elixir/Phoenix-WebSocket service that exposes three extension families over channels: Broadcast (ephemeral messages), Presence (shared per-member state tracked via track/untrack messages and delivered as presence_state/presence_diff), and Postgres Changes (database row change replication). Authorization is delegated to the Postgres row-level security policies of the underlying tenant database, with each extension exposing distinct read and write policies so operators can grant, for example, presence.write without presence.read. CWE-863 (Incorrect Authorization) applies here: the read policy was either not evaluated or its result conflated with the write result on the delivery path, so a client holding a valid authenticated session and a write-but-not-read grant could still receive presence diffs. The upstream patch (PR 1969, commit c039bca9b57c2e554a67fdf462970b54641d82eb) addresses two coupled problems visible in the diff - the authorization probe that determined policy outcomes inserted its probe row with RETURNING *, which caused Postgres to enforce the SELECT (read) policy on the returned row and therefore conflate write with read (fixed by adding a returning: false mode to Realtime.Tenants.Repo that omits the RETURNING clause), and the authorization reducer previously iterated all extensions and set read=false for extensions that had not been checked, rather than only for the extensions actually requested, leaving unevaluated state as nil. Downstream, the patch threads a presence_read? value derived from socket.assigns.policies into the fastlane metadata so the message dispatcher can withhold presence_diff from sockets denied presence.read, and adds a handle_info({:authorize_presence_diff, ...}) fallback that re-checks can_read_presence? at delivery time for sockets whose presence.read was not authorized at join (for example when presence was auto-enabled later by a track message).

Know when Realtime gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
vuln.today AI 4.3 MEDIUM

Authenticated network client (PR:L, AV:N) on a specific but attacker-usable channel state (AC:L); disclosure limited to presence metadata (C:L), no integrity or availability impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

Lifecycle Timeline

1
Patch available
Sep 21, 2026 - 20:02 EUVD

DescriptionCVE.org

Supabase Realtime provides Broadcast, Presence, and Postgres Changes via WebSockets. Prior to 2.111.2, Realtime authorization does not correctly honor the per-extension presence.read row-level security policy when a private-channel client is allowed presence.write but explicitly denied presence.read. Under that differential policy, the client can receive presence_diff messages containing other members' presence metadata, including application-defined location, online-status, roster, viewing, or typing information. Deployments with uniform presence visibility have no differential, and postgres_changes row data is unaffected. This issue is fixed in version 2.111.2.

Threat Intelligence Overview

EPSS Score
0.3%
Top 75% exploitable
Prevalence
Medium
popular Supabase BaaS component, but differential presence-policy config is niche
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy