CVE-2026-85622 Overview
AppFlowy-Cloud through version 0.9.64 contains a broken access control flaw in its WebSocket handler. The establish_ws_connection_v2 handler fails to validate workspace membership when a client establishes a WebSocket session. Authenticated users can bind sessions to workspaces they do not belong to and then issue sync Manifest messages using victim object identifiers. This lets attackers read full document and database state from collaborations hosted in other workspaces without any interaction from the legitimate owner. The issue is tracked under CWE-863: Incorrect Authorization and disclosed in the VulnCheck Advisory for AppFlowy.
Critical Impact
Any authenticated AppFlowy-Cloud tenant can silently exfiltrate confidential documents and database contents from unrelated workspaces over a persistent WebSocket channel.
Affected Products
- AppFlowy-Cloud through 0.9.64
- Self-hosted AppFlowy deployments exposing the /ws/v2 endpoint
- Multi-tenant AppFlowy-Cloud installations sharing a single backend across workspaces
Discovery Timeline
- 2026-09-04 - CVE-2026-85622 published to NVD
- 2026-09-10 - Last updated in NVD database
Technical Details for CVE-2026-85622
Vulnerability Analysis
AppFlowy-Cloud exposes real-time collaboration through a WebSocket API defined in ws.rs. The establish_ws_connection_v2 handler authenticates the caller and accepts a target workspace identifier supplied by the client. It does not cross-check whether the authenticated user is a member of the requested workspace before attaching the session to that workspace's collaboration channels. Once the session is bound, downstream sync logic assumes the workspace-to-user relationship was validated at connection time. Attackers exploit this trust gap by supplying an arbitrary workspace ID during the WebSocket handshake and then requesting collaboration objects that belong to victims.
Root Cause
The root cause is a missing authorization check on the workspace parameter accepted by establish_ws_connection_v2. Authentication proves the caller controls a valid AppFlowy account, but the handler never enforces the workspace membership predicate that other REST endpoints apply. This maps directly to CWE-863: Incorrect Authorization, where an access control decision is performed against the wrong subject or scope. Community discussion of the defect is captured in the AppFlowy Issue Tracker Discussion.
Attack Vector
An attacker registers or uses any valid AppFlowy-Cloud account. They open a WebSocket to /ws/v2 and complete the upgrade using their own bearer token while specifying the victim workspace identifier. After the socket is bound, they transmit a sync Manifest frame that references a known collaboration object identifier (a document or database oid) belonging to the target workspace. The server streams the requested collaboration state back over the socket. No victim action, click, or session is required.
No verified proof-of-concept code has been published; refer to the VulnCheck Advisory for AppFlowy and the vulnerable handler in ws.rs for technical details.
Detection Methods for CVE-2026-85622
Indicators of Compromise
- WebSocket upgrade requests to /ws/v2 where the authenticated user identifier does not appear in the workspace membership table for the requested workspace_id.
- Sync Manifest messages referencing collaboration object identifiers (oid) that the connecting user has never accessed through the REST API.
- Bursts of collaboration reads from a single account spanning multiple distinct workspace identifiers within a short window.
Detection Strategies
- Correlate WebSocket handshake logs with the workspace membership database and alert on any session bound to a workspace where the caller is not a member.
- Baseline per-user WebSocket workspace access patterns and flag deviations, particularly access to previously unseen workspaces.
- Inspect application logs for high-volume Manifest requests that return large collaboration payloads to accounts with minimal legitimate activity.
Monitoring Recommendations
- Enable verbose logging on the establish_ws_connection_v2 handler to capture caller identity, requested workspace ID, and source address.
- Forward AppFlowy-Cloud application and reverse-proxy logs to a centralized analytics platform for cross-workspace correlation.
- Track outbound data volume per authenticated WebSocket session and alert on sessions that exceed normal collaboration transfer sizes.
How to Mitigate CVE-2026-85622
Immediate Actions Required
- Upgrade AppFlowy-Cloud to a release later than 0.9.64 once the maintainers publish a fixed version; monitor the AppFlowy GitHub Repository for updates.
- Restrict network access to the AppFlowy-Cloud WebSocket endpoint to trusted tenants using a reverse proxy or service mesh policy.
- Audit collaboration access logs from all vulnerable deployments to identify unauthorized cross-workspace reads.
Patch Information
At the time of publication, no fixed release is referenced in the NVD entry. Track the AppFlowy Issue Tracker Discussion and the VulnCheck Advisory for AppFlowy for the patched version. Operators running self-hosted deployments should plan for an out-of-band upgrade as soon as a fix ships.
Workarounds
- Place the AppFlowy-Cloud WebSocket endpoint behind an authenticating proxy that validates workspace membership before forwarding upgrade requests.
- Disable public registration on shared instances to shrink the pool of accounts that can abuse the missing authorization check.
- Segment tenants across separate AppFlowy-Cloud deployments where feasible so a cross-workspace read cannot escape a single-tenant boundary.
# Example reverse proxy restriction (NGINX) limiting /ws/v2 to internal networks
location /ws/v2 {
allow 10.0.0.0/8;
deny all;
proxy_pass http://appflowy_cloud_upstream;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.