Declined confirmations in obsidian-tc permit destructive tool calls
Key facts
- Attack vector
- Network
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- Low
- Attack requirements
- None
- Impact type
- Security bypass
- Confidentiality · integrity · availability
- None · High · Low
- Fix status
- Fixed
Attack profile from CVSS 4.0 · CNA. Fix status from CNA and GitHub. Impact type from CWE-285.
Summary
obsidian-tc from 1.13.0 before 1.31.4 is an Obsidian vault server for the Model Context Protocol. It accepts an authentic request state as approval, so a tool call can complete even after the human declines or cancels the confirmation (CWE-285). A client that misbehaves or is attacker-controlled can run destructive vault operations over Streamable HTTP without approval, if it has the caller's ordinary tool permissions.
Written with Claude Haiku 5.5 from the sources below · 2026-10-29
Description from the CNA
obsidian-tc is a governed, agent-ready Model Context Protocol server for Obsidian vaults. From 1.13.0 until 1.31.4, on a Streamable HTTP deployment with `auth.jwtSecret` configured and a 2026-07-28-era client declaring `elicitation.form` support, a dispatch-gated tool call offered an `inputRequired` confirmation could still complete after the human declined or cancelled, or the elicitation response was omitted or malformed, provided the client echoed the validly bound `requestState` on resubmission. The server trusted an authentic, call-bound state as proof of approval even though that state was minted before the `elicitation/create` leg was asked and proved only that the resubmission belonged to the same call. A client behaving incorrectly or under an attacker's control could therefore execute dispatch-gated destructive vault operations without the human's approval, while still requiring the caller's ordinary tool permissions. Only tools marked `destructive: true` or requiring a scope with a human-in-the-loop floor were reachable through this bypass. The sixteen handler-side conditionally gated tools, including `write_note` overwrite and `move_note`, did not read elicitation state on the modern wire and let neither approval nor decline through that path. Affected deployments using stdio or leaving `auth.jwtSecret` unset instead used the CLI `elicit_token` fallback and did not offer this `requestState` round trip. The fix does not prevent a malicious client from reporting a fabricated approval, because the server cannot verify that the client displayed the form or that a human saw it. This issue is fixed in version 1.31.4.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- Poc
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| The-40-Thieves | obsidian-tc | 1.13.0 to before 1.31.4 | 1.31.4 | Patch available | CNA |
| — | obsidian-tc (npm) | 1.13.0 to before 1.31.4 | 1.31.4 | Patch available | GHSA-737x-cwfr-5vvc |
- obsidian-tc VendorThe-40-Thieves Affected 1.13.0 to before 1.31.4 Fixed in 1.31.4 Patch available CNA
- obsidian-tc (npm) Vendor— Affected 1.13.0 to before 1.31.4 Fixed in 1.31.4 Patch available GHSA-737x-cwfr-5vvc
Remediation
Upgrade obsidian-tc to version 1.31.4, the fixed version listed for the npm package.
Written with Claude Haiku 5.5 from the sources below · 2026-10-29
- Fix · CNA obsidian-tc (The-40-Thieves) Fixed in 1.31.4
- Fix · GHSA-737x-cwfr-5vvc obsidian-tc (npm) Fixed in 1.31.4 Advisory →
Timeline
- 2026-10-23 Threatist record created from CVE-2026-115477
- 2026-10-23 Alias added: GHSA-737x-cwfr-5vvc
- 2026-10-23 Fix available: npm/[email protected] · GHSA-737x-cwfr-5vvc
- 2026-10-23 CVSS score added · GHSA-737x-cwfr-5vvc
- 2026-10-23 Weakness changed · GHSA-737x-cwfr-5vvc
- 2026-10-23 8 new references · GHSA-737x-cwfr-5vvc
- 2026-10-24 Priority changed: MEDIUM → LOW
- 2026-10-29 CISA SSVC decision points changed
- 2026-10-29 Priority changed: LOW → MEDIUM
References
Other 7
- https://github.com/The-40-Thieves/obsidian-tc/security/advisories/GHSA-737x-cwfr-5vvc
- https://github.com/The-40-Thieves/obsidian-tc/issues/967
- https://github.com/The-40-Thieves/obsidian-tc/pull/969
- https://github.com/The-40-Thieves/obsidian-tc/commit/101c91c656e2c2b88bcf3696a5da035f8c032c71
- https://github.com/The-40-Thieves/obsidian-tc/blob/v1.31.4/CHANGELOG.md
- https://github.com/The-40-Thieves/obsidian-tc/releases/tag/v1.31.4
- https://github.com/The-40-Thieves/obsidian-tc
More The-40-Thieves vulnerabilities
- TI-2026-71222 Authorization bypass in obsidian-tc lets tokens access other vaults CVSS 3.1CRITICAL 9.9
- TI-2026-71220 Missing origin checks in obsidian-tc expose local vault to web pages CVSS 3.1HIGH 8.8
- TI-2026-79946 Memory tools in obsidian-tc overwrite unowned notes on disk CVSS 4.0HIGH 7.1
- TI-2026-71221 Default ACL in obsidian-tc exposes Obsidian control-directory secrets CVSS 3.1MEDIUM 6.5
- TI-2026-71748 Symlink path mismatch in obsidian-tc bypasses read ACL restrictions CVSS 3.1MEDIUM 4.7
- TI-2026-71798 Missing read ACL checks in obsidian-tc expose note data CVSS 3.1MEDIUM 4.3
Sources
- CVE-2026-115477 · CVE Program
- CVE-2026-115477 · NVD
- FIRST EPSS
- GHSA-737x-cwfr-5vvc · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences