{"id":"GHSA-98fx-66cf-fc7c","revision":"1b830c48c9244ad7b4e9680d213e4e3a","records":[{"revision":"1b830c48c9244ad7b4e9680d213e4e3a","observedAt":"2026-10-24T13:19:54.901+00:00","statement":{"source":"osv","id":"GHSA-98fx-66cf-fc7c","aliases":["CVE-2026-63755"],"title":"SurrealDB: Scraping a TABLE with no available PERMISSIONS to current auth level","description":"A vulnerability was discovered where the user-supplied `WHERE` clause in a `SELECT` statement is evaluated against the full record data before `PERMISSIONS FOR SELECT WHERE` determines whether the principal is authorised to access that record. A side-effecting expression in the `WHERE` clause can exfiltrate record contents before the permission check runs. The same ordering bug affects the `SET`, `MERGE`, `CONTENT` and `PATCH` clauses of update-variant statements (`UPDATE`, `UPSERT-update`, `INSERT ON DUPLICATE KEY UPDATE`, `RELATE-update`).\n\nThis vulnerability is confined to the attacker's current database. It does not cross namespace or database isolation boundaries.\n\n### Impact\n\nAn authenticated user — including Record and Scope users — can read the full contents of any table in the database they are authenticated against, bypassing `PERMISSIONS FOR SELECT WHERE` restrictions on those tables.\n\nThe most direct exfiltration method requires scripting functions to be enabled (`--allow-scripting` / `-A`). However, exfiltration via SurrealQL's `THROW` statement is also feasible without scripting functions, and timing-based side-channel extraction is possible in all configurations.\n\nAll tables within the attacker's current database, regardless of table-level `PERMISSIONS FOR SELECT WHERE` restrictions on those tables, are vulnerable to this attack. Tables in other databases within the same namespace, or within other namespaces, are not vulnerable.\n\n### Patches\n\nA patch has been introduced that runs `check_permissions_table` before any user-supplied expression is evaluated against the record. A new `check_pre_update` helper centralises this ordering on every update-variant code path. Regression tests covering `WHERE`, `SET`, `MERGE`, `CONTENT`, `INSERT ON DUPLICATE KEY UPDATE`, and `RELATE` with `THROW` side-effects are included.\n\n- Versions 3.1.0 and later are not affected by this issue.\n\n### Workarounds\n\nAffected users who are unable to update may want to:\n\n- **Disable scripting functions** if not required — remove the `-A` / `--allow-scripting` flag. This blocks the most direct exfiltration method but does not fully mitigate the vulnerability, as `THROW`-based and timing-based exfiltration remain possible.\n- **Limit query access** — restrict the ability of untrusted principals to run arbitrary `SELECT` queries with user-controlled `WHERE` clauses.\n- **Use namespace/database isolation** instead of table-level permissions as the primary security boundary where feasible, since the vulnerability is in table-level permission enforcement, not namespace or database isolation.","state":0,"publishedAt":"2026-07-01T20:06:08+00:00","modifiedAt":"2026-09-04T20:40:32.892364+00:00","affected":[{"ecosystem":"crates.io","name":"surrealdb","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"3.1.0"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"MODERATE"}],"references":["https://github.com/surrealdb/surrealdb/security/advisories/GHSA-98fx-66cf-fc7c","https://nvd.nist.gov/vuln/detail/CVE-2026-63755","https://github.com/surrealdb/surrealdb/commit/500f4060349580b9cbb9c07b8112a487551c4616","https://github.com/surrealdb/surrealdb","https://www.vulncheck.com/advisories/surrealdb-before-permission-bypass-via-where-clause"],"sourceUrl":"https://github.com/advisories/GHSA-98fx-66cf-fc7c","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-98fx-66cf-fc7c","identifiers":["GHSA-98fx-66cf-fc7c","CVE-2026-63755"]},"retained":false,"historicalAffected":[]}],"coverage":[]}