the-40-thieves/obsidian-tc · Security
obsidian-tc tokens can access arbitrary configured vaults
- GHSA ID
- GHSA-84c9-qqpq-2pq5
- CVE ID
- CVE-2026-77366
- Severity
- critical
- Published
- Updated
- CVSS
- 9.9 · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
- CVSS v3
- 9.9 · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Description
Impact
Tool dispatch did not check the caller-supplied input.vault against the caller's bound vault (ctx.vaultId); the folder ACL was a single global instance and the JWT carried no vault claim. As a result, any valid token could read, write, or delete any configured vault by passing input.vault, defeating multi-tenant isolation across ~90 tool sites. (resources/read was the only surface that already guarded this.)
Patches
Fixed in 1.3.1 (the fix was developed on the v1.3.0 tag, which never published to npm; 1.3.1 is the first published release with the fix). Upgrade to >= 1.3.1.
Workarounds
Run a single vault per server process, or isolate each tenant on a separate process/credential.
Fix
A central input.vault === ctx.vaultId guard was added in dispatch before the scope check.
CWEs
- CWE-639 · Authorization Bypass Through User-Controlled Key
- CWE-863 · Incorrect Authorization
References
- https://github.com/The-40-Thieves/obsidian-tc/security/advisories/GHSA-84c9-qqpq-2pq5 ↗
- https://github.com/The-40-Thieves/obsidian-tc/pull/72 ↗
- https://github.com/The-40-Thieves/obsidian-tc/commit/38b4992e87dc2715564236e1a42d005ab05a0194 ↗
- https://github.com/The-40-Thieves/obsidian-tc/releases/tag/v1.3.1 ↗
- https://nvd.nist.gov/vuln/detail/cve-2026-77366 ↗
- https://github.com/advisories/GHSA-84c9-qqpq-2pq5 ↗