{"id":"CVE-2026-55866","aliases":["GHSA-4vrg-r928-h5vv","GO-2026-5133"],"url":"https://o3.security/vulnerability/CVE-2026-55866","summary":"SpiceDBChecks involving relations with caveats can result in unconditional permission when conditional permission is expected","details":"### Impact\n Under concurrency, `CheckPermission` and `CheckBulkPermissions` can return `PERMISSIONSHIP_HAS_PERMISSION` for a (resource, permission, subject) whose correct answer is   `PERMISSIONSHIP_CONDITIONAL_PERMISSION`. \n\n You are impacted if **all** of the following hold:\n\n  1. Your schema has a permission combining relations with an intersection or exclusion, where a subject reaches it through a caveated branch and a non-caveated branch. For example:\n\n```zed\n  definition user {}\n\n  caveat some_caveat(somecondition int) { somecondition == 42 }\n\n  definition document {\n    relation reader: user | user with some_caveat\n    relation writer: user\n    relation banned: user\n    permission has_permission = (reader & writer) - banned\n  }\n```\n\n  2. A subject reaches the permission via the caveated edge:\n\n```\n  document:firstdoc#reader@user:caveatedreader[some_caveat]\n  document:firstdoc#writer@user:caveatedreader\n```\n  3. Your workload issues `LookupResources` with a `context` request parameter, concurrently with `CheckPermission/CheckBulkPermissions` for the same subject/resource, and\n  4. The dispatch result cache is enabled.\n  \nWhen all of the above are true, there is an intermittent window in which:\n\n`CheckPermission(document:firstdoc, has_permission, user:caveatedreader)` → HAS_PERMISSION (incorrect; should be CONDITIONAL_PERMISSION)\n\n`CheckPermission(document:firstdoc, has_permission, user:caveatedreader, context = {\"somecondition\": 41})` → HAS_PERMISSION (incorrect; should be NO_PERMISSION)\n\n### Patches\n\nv1.54.0\n\n### Workarounds\nDisable the dispatch result cache (`ClusterDispatchCacheConfig` and `DispatchCacheConfig`)","published":"2026-09-14T17:23:56.428Z","modified":"2026-10-28T02:30:50.186689694Z","cvss":{"score":3.7,"severity":"LOW","vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N"},"epss":null,"cisaKev":null,"exploitsKnown":null,"affectedPackages":[{"ecosystem":"Go","name":"github.com/authzed/spicedb","fixedVersion":"1.54.0"}],"fix":{"url":"https://github.com/authzed/spicedb/commit/44a1c9f266bd8a884bfebfc27181210302541b9b","label":"authzed/spicedb@44a1c9f"},"references":[{"type":"WEB","url":"https://github.com/authzed/spicedb/releases/tag/v1.54.0"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/55xxx/CVE-2026-55866.json"},{"type":"ADVISORY","url":"https://github.com/authzed/spicedb/security/advisories/GHSA-4vrg-r928-h5vv"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-55866"},{"type":"FIX","url":"https://github.com/authzed/spicedb/commit/44a1c9f266bd8a884bfebfc27181210302541b9b"},{"type":"FIX","url":"https://github.com/authzed/spicedb/commit/ccde792fc48750740d025d4286d5c2c88614cd30"},{"type":"FIX","url":"https://github.com/authzed/spicedb/pull/3188"},{"type":"PACKAGE","url":"https://github.com/authzed/spicedb"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-10-28T02:30:50.186689694Z"}}