CVE-2026-115478
HighCVSS 7.1Summary
In obsidian-tc from 1.0.1 until 1.31.4, the create_entity, link_entities, rename_entity, unlink_entities and delete_entity tools regenerate memory notes from SQLite at the computed memory/<type>/<name>.md path without reliably preserving note ownership, so a hand-authored note or an orphan from another entity sanitizing to the same path could have its entire body overwritten. Additionally, several tools mutate SQLite before fallible filesystem work, so a later filesystem failure can leave the memory graph inconsistent with notes on disk even when the operation failed.
Risk Assessment
An authorized caller with memory-tool permissions could unintentionally destroy the body of a vault note outside the entity being written; delete_entity additionally requires its deletion permission and destructive confirmation, which this flaw does not bypass. Snapshots-before-write via restore_note mitigate the overwrite only where snapshots are enabled and the note was previously written through obsidian-tc.
Recommendation
Update obsidian-tc to version 1.31.4 or later, which fixes this issue. Until then, restrict memory-tool permissions and enable snapshots to allow restoring overwritten notes.
Other vulnerabilities in obsidian-tc
See all- CVE-2026-115477High
In obsidian-tc from 1.13.0 until 1.31.4, a Streamable HTTP deployment with `auth.jwtSecret` configured allowed bypassing human confirmation for dispatch-gated destructive tool calls. The server trusted a validly bound `requestState` as proof of approval even though that state was minted before the `elicitation/create` leg and only proved the resubmission belonged to the same call. A misbehaving or attacker-controlled client could therefore execute destructive vault operations without human approval while still requiring the caller's ordinary tool permissions.
- CVE-2026-77366Critical
In obsidian-tc prior to 1.3.1, tool dispatch does not compare the caller-controlled input.vault value with the vault bound to the caller, the JWT has no vault claim, and the folder access-control list is shared globally. Any valid token can therefore select another configured vault and read, write, or delete its contents through affected tools.
- CVE-2026-77362Medium
obsidian-tc prior to 1.3.1 does not consistently apply the read access-control list (ACL) to every returned field. The tasks_filter tool exposes group counts derived from denied notes, makemd_query passes unfiltered sibling result fields through, and list_templates exposes template paths and parsed user-function bodies without a read-whitelist check. An authenticated caller can consequently infer or read data from notes outside the caller's read ACL.
- CVE-2026-77361Medium
obsidian-tc prior to 1.3.1, read access-control list (ACL) checks use a lexical vault-relative path while containment checks use the resolved path. An in-vault symlink under an allowed glob that resolves into a denied folder can therefore bypass the read ACL and expose files in the denied folder. Exploitation requires an out-of-band-planted symlink and does not permit an escape from the vault root.
- CVE-2026-77364Medium
obsidian-tc is a governed, agent-ready Model Context Protocol server for Obsidian vaults. Prior to 1.3.1, undefined readPaths and writePaths settings allow all paths, strictReadDefault does not protect direct requests, and the .obsidian, .git, and .trash control directories are excluded only during enumeration. An authenticated caller can directly read sensitive files such as .obsidian/plugins/*/data.json.
- CVE-2026-77363High
A vulnerability in obsidian-tc, a Model Context Protocol server for Obsidian vaults, before version 1.3.1, does not validate Host or Origin headers or enable DNS-rebinding protection in the Streamable HTTP transport. With loopback configuration using auth.mode set to none, a malicious web page can send requests to the local MCP endpoint and gain unrestricted vault access via the http-local caller. Version 1.3.1 fixes the issue by enabling host, origin, and DNS-rebinding validation.
Original NVD description (English source)
obsidian-tc is a governed, agent-ready Model Context Protocol server for Obsidian vaults. From 1.0.1 until 1.31.4, `create_entity`, `link_entities`, `rename_entity`, `unlink_entities` and `delete_entity` regenerate memory notes from SQLite at the computed `memory/<type>/<name>.md` path without reliably preserving note ownership or the consistency of a failed lifecycle operation. During shared materialization, a hand-authored note or an orphan left by a different entity whose name sanitized to the same path could have its entire body overwritten on the next write naming that type and name, with non-owned frontmatter preserved. `rename_entity` also seeded the destination path with a direct atomic write without validating ownership and could overwrite a foreign note there. Separately, several tools mutated SQLite before fallible filesystem work: `create_entity` and `link_entities` inserted the row or relation before materialization; `rename_entity` updated the entity, including a retired status, before updating its note; `unlink_entities` removed a relation before rematerializing the source note; and `delete_entity`'s cascade removed the target and its relations before rematerializing neighbouring notes. A later filesystem failure could therefore leave a row or relation changed and the memory graph inconsistent with the notes on disk even when the operation failed. An authorized caller with the required memory-tool permissions could, without intending to, destroy the body of a vault note outside the entity being written; `delete_entity` additionally requires its deletion permission and destructive confirmation, which this memory flaw does not bypass. Snapshots-before-write through `restore_note` mitigate the overwrite only where snapshots are enabled and the note had previously been written through obsidian-tc. This issue is fixed in version 1.31.4.
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

