Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Network GraphQL endpoint with a legitimate low-privilege workspace member (PR:L), trivial to trigger (AC:L), and read-only disclosure of history data yields C:H with I:N/A:N.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
1DescriptionCVE.org
AFFiNE's histories GraphQL field fails to validate Doc.Read permission before exposing document edit history, allowing authenticated workspace members to retrieve restricted content timelines. Attackers can supply arbitrary document GUIDs to access full edit histories including user names, emails, and timestamps of private pages they lack access to.
AnalysisAI
Broken access control in AFFiNE (toeverything/AFFiNE monorepo) lets any authenticated workspace member read the edit history of documents they should not access by querying the GraphQL 'histories' field with an arbitrary document GUID. Because the resolver never checks Doc.Read permission, an attacker can enumerate private page timelines and harvest contributor user names, emails, and edit timestamps. No public exploit has been identified at time of analysis, but exploitation is trivial for any low-privileged member.
Technical ContextAI
AFFiNE is an open-source knowledge-base / workspace collaboration platform (a Notion-style docs and whiteboard tool) built as a monorepo with a GraphQL API backend. The flaw is a CWE-862 Missing Authorization: the server-side GraphQL resolver for the 'histories' field returns a document's versioned edit history (a change timeline that Yjs/CRDT-style collaborative editors retain) without first evaluating the workspace's Doc.Read access-control check that gates the document itself. The CPE cpe:2.3:a:affine:monorepo identifies the AFFiNE application codebase as the affected component. Because authorization is enforced only on the primary document-fetch path and not on the history sub-resource, supplying a known or guessed document GUID bypasses the intended per-document permission model while still requiring a valid workspace session.
RemediationAI
Patch available per vendor advisory: apply the upstream fix commit https://github.com/toeverything/AFFiNE/commit/1f0bcd01a37a522393fc1b288395e3a72a79ccad, which adds the missing Doc.Read permission check to the GraphQL histories resolver; a released patched version was not independently confirmed from the provided data, so self-hosters should build from a revision including this commit or track the referenced issue (https://github.com/toeverything/AFFiNE/issues/15179) for a tagged release. As a compensating control until patched, restrict who can join sensitive workspaces and minimize low-trust members (this reduces the pool of accounts able to abuse PR:L access but does not close the hole), and if feasible place the GraphQL API behind an authorizing proxy or WAF rule that blocks or logs 'histories' queries against document GUIDs (trade-off: may break legitimate history/version-restore features for all users). Monitor GraphQL logs for anomalous enumeration of document GUIDs on the histories field as a detective control.
Authorization bypass in AFFiNE up to version 0.26.3 allows remote unauthenticated attackers to access restricted documen
Remote code execution in AFFiNE workspace application (versions prior to 0.25.4) allows unauthenticated attackers to exe
all-in-one workspace and an operating system. versions up to 0.26.0 is affected by url redirection to untrusted site (op
Same weakness CWE-862 – Missing Authorization
View allSame technique Authentication Bypass
View allVendor StatusVendor
Share
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-42314
GHSA-m4gp-5xh5-xhq4