{"id":"CVE-2026-63748","aliases":["GHSA-6g9v-7gq3-p2c6"],"title":"SurrealDB: Authenticated callers can read fields hidden by field-level SELECT permissions via error messages","summary":"SurrealDB: Authenticated callers can read fields hidden by field-level SELECT permissions via error messages","severity":"medium","cvss":4.3,"cvssVector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N","vendor":"surrealdb","product":"surrealdb","ecosystem":"rust","affected":["surrealdb < 3.1.0"],"patched":["surrealdb 3.1.0"],"published":"2026-07-01","updated":"2026-09-04","source":"OSV","sourceUrl":"https://osv.dev/vulnerability/GHSA-6g9v-7gq3-p2c6","references":[{"url":"https://github.com/surrealdb/surrealdb/security/advisories/GHSA-6g9v-7gq3-p2c6"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-63748"},{"url":"https://github.com/surrealdb/surrealdb/commit/0aaa332c79195e4c40275eb5224aed3d52f5cf90"},{"url":"https://github.com/surrealdb/surrealdb"},{"url":"https://www.vulncheck.com/advisories/surrealdb-before-information-disclosure-via-error-messages"}],"tags":["osv","rust"],"epss":0.00326,"epssPercentile":0.22976,"ingestedAt":"2026-09-05T19:33:49.583Z","slug":"CVE-2026-63748","body":"## Overview\n\nA record user with UPDATE access could read field values that field-level SELECT permissions hid from them. Arithmetic operators and `extend` embedded the raw operand into their error messages, and UPDATE permission checks evaluate against the unreduced document — so triggering such an error against a hidden field returned its value in the resulting error.\n\n### Impact\n\nA record user issues an UPDATE that performs an incompatible operation against a hidden field — e.g. `UPDATE person:me SET probe = email + 1` when `email` is a string — and reads the value from the returned error (`Tried to compute \"alice@example.com\" + 1 …`). One field per operation, but the attacker can repeat against any field on any record they can UPDATE.\n\n### Patches\n\nA patch has been introduced that replaces the raw operand in every `try_*` operator and in `extend` with the operand's type name (`\"string\"`, `\"int\"`, `\"array\"`, etc.).\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 should not grant UPDATE permission on records whose field-level SELECT permissions are expected to hide values from the same caller.\n\n## Affected packages\n\n- `surrealdb < 3.1.0`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `surrealdb 3.1.0`","depth":"sunlit","depthScore":24,"depthScoreParts":{"impact":23.7,"likelihood":0.1,"exploitation":0,"ransomware":0},"changes":[]}