Listen to this Post
How the CVE Works:
This vulnerability occurs in SpiceDB when evaluating caveated permissions across arrow’ed relations. Due to incorrect branch resolution logic, CheckPermission requests may wrongly return `NO_PERMISSION` even when access should be granted. The issue arises when multiple caveated paths exist, and the evaluator fails to aggregate valid permission branches. In the example schema, `user:maria` should get `HAS_PERMISSION` for `document:budgetread` via office:headofficemanager, but the caveat on `group:admins` causes premature termination. The flaw lies in the traversal logic, which doesn’t properly reconcile caveat conditions across indirect relations.
DailyCVE Form:
Platform: SpiceDB
Version: <1.44.2
Vulnerability: Permission bypass
Severity: Critical
Date: 2024-06-07
Prediction: Patch expected by 2024-06-14
What Undercode Say:
Analytics:
- Affects schemas with recursive caveats.
- Exploitable via multi-hop relations.
- False negatives dominate impact.
Exploit Command:
curl -X POST http://spicedb:50051/v1/permissions/check \
-d '{"object": "document:budget", "permission": "read", "subject": "user:maria"}'
Mitigation Code:
Temp workaround: Remove caveats from arrow’ed relations
from spicedb_api import update_schema
update_schema("""
definition document {
relation owner: group Removed caveat
permission read = owner->read
}
""")
Patch Verification:
spicedb version | grep "1.44.2"
Debug Query:
package debug
default has_permission = false
has_permission {
input.permission = "read"
input.object.relation = "owner"
input.subject.id = "maria"
}
Log Monitor:
grep "CheckPermission" /var/log/spicedb.log | grep "NO_PERMISSION"
Schema Audit:
spicedb validate-schema --fail-on-caveats
Network Rule:
location /v1/permissions/check {
deny all; Temporary block if vulnerable
}
Env Var Protection:
export SPICEDB_DISABLE_CAVEATS=true
Sources:
Reported By: github.com
Extra Source Hub:
Undercode

