Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with memory-write scope
-
DeliveryInvoke lifecycle tool naming colliding (type,name)
-
ExploitMaterialization regenerates note body from SQLite
-
ExecutionOverwrite foreign note body, keep only frontmatter
-
ImpactVault note destroyed and memory graph left inconsistent
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Incomplete cleanup
|
| Exploitation Conditions | Requires an authorized caller holding memory-write scope (write:memory) using the M5 memory lifecycle tools create_entity, link_entities, rename_entity, unlink_entities or delete_entity. The overwrite triggers only when a note already exists at the computed memory/<type>/<name>.md path that is NOT owned by the entity being written - a hand-authored note, or an orphan left by a different entity whose name sanitized to the same path - in which case the next write naming that (type, name) regenerates the body from SQLite and overwrites it, keeping only frontmatter; rename_entity can also overwrite a foreign note at the destination because its seeding atomic write bypassed the ownership check. The half-committed-state variant triggers when the SQLite mutation succeeds but the subsequent filesystem materialization is refused. Limiting factors: exploitation needs the memory-write permission (PR:L, not unauthenticated); delete_entity additionally requires its own deletion permission and destructive confirmation, which this flaw does not bypass; and restore_note snapshots mitigate the overwrite only where snapshots are enabled and the note had previously been written through obsidian-tc. The only workaround that fully prevents the write path is disabling write:memory for callers; otherwise updating to 1.31.4 is the fix. |
| Impact | This is a genuine but bounded integrity/data-loss issue rather than a high-CVSS, low-real-risk inflation - yet also not an emergency. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:L) scores 7.1: network-reachable, but gated behind PR:L (the caller must already hold memory-write/ |
| Exploit ScenarioDerived | An agent or client already holding memory-write scope calls create_entity, link_entities, rename_entity or unlink_entities for a (type, name) whose sanitized path, memory/<type>/<name>.md, collides with a hand-authored note or an orphan left by a different entity; materialization regenerates the body from SQLite and overwrites the foreign note's entire body, keeping only its frontmatter. A filesystem write refused after the SQLite row/relation was already mutated additionally leaves the memory graph inconsistent with the notes on disk. No public exploit code or PoC reference is identified at time of analysis; exploitation requires the AV:N/PR:L memory-write permission. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 23, 2026
Memory-note lifecycle tooling in obsidian-tc 1.0.1 through 1.31.3 can overwrite the entire body of an Obsidian vault note it does not own, and can leave the SQLite memory graph half-committed when a filesystem step is refused. An authenticated caller holding memory-write scope (write:memory) that invokes create_entity, link_entities, rename_entity, unlink_entities or delete_entity on a (type, name) pair whose computed memory/<type>/<name>.md path is already occupied by a hand-authored note or a foreign orphan will have that note's body regenerated from SQLite, with only its frontmatter preserved; delete_entity still requires its own deletion permission and destructive confirmation, which this flaw does not bypass. The maintainer found and fixed the class in 1.31.4 (PR #978, GHSA-r3g7-r4hr-m258); no public exploit identified at time of analysis, and the issue is rated this_week priority rather than an emergency because exploitation depends on already-granted memory-write permissions.
RemediationAI
Upgrade to obsidian-tc 1.31.4, which is the vendor-released patch and the only complete fix: it installs the ownership refusal inside materializeEntity, adds an assertNoteOwnership pre-check before any SQLite mutation in create_entity, rename_entity and the other lifecycle tools, and rolls back rows inserted by create_entity and link_entities, with regression coverage in test/m5-memory-ownership.test.ts. The advisory states there are no workarounds that preserve the tools other than disabling the write:memory scope for callers, which prevents the write path entirely at the cost of making the memory tools unusable for those callers. Snapshots-before-write via restore_note mitigate the overwrite only where snapshots are enabled and the affected note had previously been written through obsidian-tc, so they do not protect hand-authored notes or notes never written by the server. Confirm the fix by reviewing CHANGELOG 1.31.4, the merged PR #978 (commit 99f7914ca0fbeed92e7c4d39cc8c3e5830dab133) and advisory https://github.com/The-40-Thieves/obsidian-tc/security/advisories/GHSA-r3g7-r4hr-m258, and audit any vault where agents held memory-write scope while running an affected version for note bodies that were replaced while their frontmatter survived.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
obsidian-tc is a governed Model Context Protocol server that exposes a vault to agents, with a SQLite cache acting as the authoritative memory graph for entities, observations and relations. Materialization (packages/server/src/memory/materialize.ts, present since v1.0.1) regenerates a note's body from SQLite at a path computed as memory/<type>/<name>.md, preserving only the note's frontmatter, and ownership is tracked by an obsidian_tc_id frontmatter key. Because the computed path derives from sanitized names, a hand-authored note or an orphan left by a different entity whose name sanitized to the same path occupies the same file the materializer targets, and the ownership marker was not enforced on the write path - an improper authorization of a resource (CWE-863) alongside incomplete handling of an aborted operation (CWE-459). Five call sites in packages/server/src/tools/m5/memory-lifecycle-tools.ts reached this: create_entity and link_entities inserted the SQL row or relation before materialization, rename_entity seeded the destination with a direct atomic write that bypassed ownership checking and could commit a retired status while the note write was refused, unlink_entities removed a relation before rematerializing the source note, and delete_entity's cascade removed the target and its relations before a neighbour's note was found to be foreign. The 1.31.4 fix moves enforcement to the shared primitive: materializeEntity refuses to write over a note whose obsidian_tc_id is missing or belongs to another entity, a new assertNoteOwnership pre-check runs before any SQLite mutation in the three lifecycle tools so a refusal is a no-op, and the two insert paths roll back their row. Trigger conditions are documented by the advisory and the changelog; coverage is provided by test/m5-memory-ownership.test.ts across all five call sites and the rollback. The supplied CVSS 4.0 vector (7.1, PR:L, VC:N/VI:H/VA:L) and the independently assessed CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L) agree on the shape of the impact: high integrity loss, limited availability, no confidentiality exposure.
Know when Obsidian Tc gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N
Exploitation requires the memory-write permission so PR:L; integrity loss destroys vault note bodies (I:H); a half-committed graph gives limited A:L; no data is disclosed so C:N.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
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.
Technical POC Analysis
CWE-459 (Incomplete Cleanup), with a secondary CWE-863 (Incorrect Authorization) component per the advisory.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A vulnerability in the obsidian-tc memory-note tooling (versions 1.0.1-1.31.3) allows users with memory-write permissions to inadvertently overwrite hand-authored notes in Obsidian vaults and leave the memory graph in an inconsistent state. Leadership should care because this can lead to data loss in critical knowledge repositories and operational disruptions for teams relying on these notes for decision-making, though exploitation requires existing write access.
Apply vendor patch: upgrade to obsidian-tc 1.31.4. If patch cannot be applied immediately, restrict memory-write permissions to trusted users, maintain regular backups of Obsidian vaults, and implement file integrity monitoring to detect unauthorized note changes.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
More in Obsidian Tc
View allImproper authorization in obsidian-tc prior to 1.3.1 lets any holder of a valid JWT reach beyond its own vault and read,
Cross-origin requests to the obsidian-tc Model Context Protocol HTTP transport let any web page a victim visits read fro
obsidian-tc 1.13.0 through 1.31.3 lets an authenticated client complete destructive, dispatch-gated Obsidian vault opera
obsidian-tc versions prior to 1.3.1 fail to enforce folder access controls on direct file requests, allowing an authenti
Read access-control bypass in obsidian-tc before version 1.3.1 allows an authenticated MCP client to read files inside a
Information disclosure in obsidian-tc (versions prior to 1.3.1) allows an authenticated caller of the MCP server to infe
EUVD-2026-109083
GHSA-r3g7-r4hr-m258
NVD
CVE.org
EPSS
Exploit-DB