CVE-2026-63733: SurrealDB: Writes in a PERMISSIONS clause bypass table permissions
A PERMISSIONS ... WHERE clause is evaluated with permission enforcement disabled, so it can’t recurse into its own checks. But the clause could also contain data-modifying statements, and these ran with enforcement still off — so evaluating a permission check could write to tables the caller cannot write.
For example:
DEFINE TABLE post PERMISSIONS FOR update
WHERE (CREATE log SET at = time::now()) OR true;
Any user allowed to update a post now also creates a log record, even with no permission on log. The clause is evaluated once per matched record, so one statement can cause several writes.
References
- github.com/advisories/GHSA-66r2-5gwj-gxm2
- github.com/surrealdb/surrealdb/commit/1e4c3d743e1591f14f340cb627e56d98b6bd7fd7
- github.com/surrealdb/surrealdb/commit/afea699dfb3c8f274ab36861f8a95f5e98d82f1b
- github.com/surrealdb/surrealdb/releases/tag/v3.2.0
- github.com/surrealdb/surrealdb/security/advisories/GHSA-66r2-5gwj-gxm2
- nvd.nist.gov/vuln/detail/CVE-2026-63733
- www.vulncheck.com/advisories/surrealdb-before-permissions-bypass-via-permissions-clause
Code Behaviors & Features
Detect and mitigate CVE-2026-63733 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →