obsidian-tc, an MCP server that lets AI agents operate on Obsidian vaults, trusted a validly bound requestState as proof that a human approved a destructive action, so a client could run dispatch-gated destructive tools after the human declined, cancelled, or never answered the confirmation prompt. This defeats the human-in-the-loop control that many organizations rely on to keep agents from deleting or overwriting data. It is limited to Streamable HTTP deployments with auth.jwtSecret set (versions 1.13.0 to before 1.31.4), and the caller still needs ordinary tool permissions. There is no KEV listing, public exploit, or EPSS score yet, and the package has no tracked dependents, so exposure is likely narrow but worth checking for anyone running agent-managed knowledge bases. Upgrade to 1.31.4 and treat client-side elicitation as advisory, not a security boundary: the fix cannot stop a malicious client from reporting a fabricated approval, so keep backups and restrict destructive scopes.
What is the risk?
High severity per the vendor advisory (no CVSS vector published), mapping to CWE-285 and CWE-863 (improper and incorrect authorization). Exploitation needs network access to the Streamable HTTP endpoint, a valid JWT, and tool permissions for the targeted operation. It also needs a client that replays the bound requestState without a real approval, which is trivial for a custom or compromised client or an agent harness that mishandles elicitation. No active exploitation, KEV listing, public exploit, or scanner template is known. Residual risk remains after patching because the server cannot verify that a human actually saw the approval form.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| Cline | npm | >= 1.13.0, <= 1.31.3 | 1.31.4 |
| obsidian-tc | — | — | No patch |
How severe is it?
What should I do?
1 step1) Upgrade obsidian-tc to 1.31.4 or later. 2) Until patched, remove destructive scopes from agent and client credentials, or switch to stdio or a deployment without jwtSecret that uses the elicit_token fallback. 3) Take versioned backups or snapshots of Obsidian vaults (git or filesystem snapshots) so destructive operations can be rolled back. 4) Audit server logs for destructive tool calls that lack a matching elicitation/create response with an accept action. 5) Apply least privilege to JWT scopes and restrict network access to the MCP endpoint. 6) Do not rely on client-reported approval for high-impact actions; add an out-of-band approval or server-side policy where possible.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-115477?
obsidian-tc, an MCP server that lets AI agents operate on Obsidian vaults, trusted a validly bound requestState as proof that a human approved a destructive action, so a client could run dispatch-gated destructive tools after the human declined, cancelled, or never answered the confirmation prompt. This defeats the human-in-the-loop control that many organizations rely on to keep agents from deleting or overwriting data. It is limited to Streamable HTTP deployments with auth.jwtSecret set (versions 1.13.0 to before 1.31.4), and the caller still needs ordinary tool permissions. There is no KEV listing, public exploit, or EPSS score yet, and the package has no tracked dependents, so exposure is likely narrow but worth checking for anyone running agent-managed knowledge bases. Upgrade to 1.31.4 and treat client-side elicitation as advisory, not a security boundary: the fix cannot stop a malicious client from reporting a fabricated approval, so keep backups and restrict destructive scopes.
Is CVE-2026-115477 actively exploited?
No confirmed active exploitation of CVE-2026-115477 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-115477?
1) Upgrade obsidian-tc to 1.31.4 or later. 2) Until patched, remove destructive scopes from agent and client credentials, or switch to stdio or a deployment without jwtSecret that uses the elicit_token fallback. 3) Take versioned backups or snapshots of Obsidian vaults (git or filesystem snapshots) so destructive operations can be rolled back. 4) Audit server logs for destructive tool calls that lack a matching elicitation/create response with an accept action. 5) Apply least privilege to JWT scopes and restrict network access to the MCP endpoint. 6) Do not rely on client-reported approval for high-impact actions; add an out-of-band approval or server-side policy where possible.
What systems are affected by CVE-2026-115477?
This vulnerability affects the following AI/ML architecture patterns: agent frameworks, MCP servers, human-in-the-loop approval workflows, knowledge base / note-taking integrations.
What is the CVSS score for CVE-2026-115477?
No CVSS score has been assigned yet.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0049Exploit Public-Facing ApplicationAML.T0053AI Agent Tool InvocationAML.T0101Data Destruction via AI Agent Tool InvocationCompliance Controls Affected
What are the technical details?
Original Advisory
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.
Exploitation Scenario
An attacker controls, or has tampered with, an MCP client or agent harness that talks to a shared obsidian-tc server over Streamable HTTP. The client calls a destructive tool, receives the inputRequired response with a bound requestState, and then resubmits with the state, either without showing the confirmation form or after the user declines. The server treats the authentic state as proof of approval and runs the destructive operation. The attacker can also combine this with a prompt injection that steers an agent into a destructive tool call, since the human decline no longer blocks execution. The result is deletion or corruption of notes in the vault without the required human consent.
Weaknesses (CWE)
CWE-285Improper AuthorizationPrimaryCWE-863Incorrect AuthorizationPrimaryCWE-285Improper AuthorizationCWE-863Incorrect AuthorizationCWE-285 — Improper Authorization: The product does not perform or incorrectly performs an authorization check when an actor attempts to access a resource or perform an action.
- [Architecture and Design] Divide the product into anonymous, normal, privileged, and administrative areas. Reduce the attack surface by carefully mapping roles with data and functionality. Use role-based access control (RBAC) to enforce the roles at the appropriate boundaries. Note that this approach may not protect against horizontal authorization, i.e., it will not protect a user from attacking others with the same role.
- [Architecture and Design] Ensure that you perform access control checks related to your business logic. These checks may be different than the access control checks that you apply to more generic resources such as files, connections, processes, memory, and database records. For example, a database may restrict access for medical records to a specific database user, but each record might only be intended to be accessible to the patient and the patient's doctor.
Source: MITRE CWE corpus.
References
- github.com/The-40-Thieves/obsidian-tc/blob/v1.31.4/CHANGELOG.mdx_refsource_MISC
- github.com/The-40-Thieves/obsidian-tc/commit/101c91c656e2c2b88bcf3696a5da035f8c032c71x_refsource_MISC
- github.com/The-40-Thieves/obsidian-tc/issues/967x_refsource_MISC
- github.com/The-40-Thieves/obsidian-tc/pull/969x_refsource_MISC
- github.com/The-40-Thieves/obsidian-tc/releases/tag/v1.31.4x_refsource_MISC
- github.com/The-40-Thieves/obsidian-tc/security/advisories/GHSA-737x-cwfr-5vvcx_refsource_CONFIRM
- github.com/advisories/GHSA-737x-cwfr-5vvc
- nvd.nist.gov/vuln/detail/cve-2026-115477
Timeline
Related Vulnerabilities
CVE-2026-442119.6cline: WebSocket auth bypass enables terminal RCE
Same package: clineCVE-2026-597238.8Cline: missing Origin check on Hub enables RCE
Same package: clineCVE-2026-786827.5NLTK: SSRF bypass via proxy-handler downgrade
Same package: clineCVE-2026-768456.5adm-zip: arbitrary file overwrite via symlink extraction
Same package: clineGHSA-wx3m-whqv-xv47skillctl: path traversal enables credential exfiltration
Same package: cline