← All advisories
CVE-2026-115477highAgent hijacking2026-10-23

CVE-2026-115477: obsidian-tc MCP server could run destructive vault actions after you declined them

On Streamable HTTP deployments with auth.jwtSecret set, the obsidian-tc MCP server for Obsidian vaults treated an echoed request state as proof of approval, so a destructive tool call could still complete after the human declined or cancelled the confirmation. Affects 1.13.0 through 1.31.3. Version 1.31.4 fixes it and a second bug, CVE-2026-115478, where memory tools could overwrite notes they didn't own.

01.

What it is

Dispatch-gated tools (marked destructive, or in a scope with a human-in-the-loop floor) ask for confirmation through an MCP elicitation form. The server minted the call-bound requestState before asking, then accepted any resubmission that echoed it, whatever the human answered.

The maintainer reproduced a destructive call answered with decline that still wrote. Reachable actions include deleting notes, cross-folder moves, frontmatter replacement and link rewrites. The client has to echo the state after a decline, so it needs a buggy or attacker-controlled client.

CVE-2026-115478 (1.0.1 through 1.31.3): create_entity, link_entities, rename_entity, unlink_entities and delete_entity could overwrite the body of a hand-written or orphaned note at the same memory path, and could leave the memory database half-changed when a note write was refused.

02.

How to check

  1. Affected: obsidian-tc (npm) 1.13.0 through 1.31.3 for the confirmation bypass, and 1.0.1 through 1.31.3 for the memory note overwrite.
  2. The confirmation bypass only applies to Streamable HTTP deployments with auth.jwtSecret configured and a client that declares elicitation.form support. The overwrite affects any agent given the write:memory scope.
03.

How to fix

  1. Upgrade obsidian-tc to 1.31.4 or later. The server now requires the confirmation response itself to be an accept with approve: true.
  2. Until you can upgrade, run the server over stdio or leave auth.jwtSecret unset as the advisory suggests, and remove the write:memory scope from agents that don't need it.
  3. The advisory notes a limit no server can fix: a malicious client can still approve its own confirmation forms, so only connect clients you trust.
npm ls obsidian-tc
04.

Sources

More advisories for this tool
The weekly email

One email a week. Only what changed.

Every new security hole in AI coding tools, MCP servers, app builders and the stacks they generate (Next.js, Supabase, Node, PHP), each with how to check your app and the fix. No roundups of things you already read.

Free, one email a week. Read the latest issue first if you like. One-click unsubscribe in every email. We never sell or share addresses.