Skip to main content

obsidian-tc CVE-2026-115478

| EUVDEUVD-2026-109083 HIGH
Incomplete Cleanup (CWE-459)
2026-10-23 GitHub_M GHSA-r3g7-r4hr-m258
7.1
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate with memory-write scope
  2. Delivery
    Invoke lifecycle tool naming colliding (type,name)
  3. Exploit
    Materialization regenerates note body from SQLite
  4. Execution
    Overwrite foreign note body, keep only frontmatter
  5. Impact
    Vault 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/write:memory scope via the M5 memory tools), with high integrity impact (VI:H), low availability impact (VA:L, from a graph left inconsistent with disk), and no confidentiality impact (VC:N). The CWE pairing (CWE-459 incomplete cleanup plus the advisory's CWE-863 improper authorization) matches the mechanism: a missing ownership check lets a legitimate operation clobber a note it does not own, and SQLite-before-filesystem ordering leaves half-committed lifecycle state. Crucially, the GHSA frames the actor as an authorized caller acting 'without intending to' - this is closer to an agent-safety/data-corruption defect than an adversary-driven RCE. Decision label is this_week, consistent with a prompt-but-not-critical fix. No CISA KEV listing, no EPSS score supplied, and no public exploit or PoC reference is present (the GitHub links are the advisory, fix PR #978, fix commit, changelog, and release - not exploit code). Signals are therefore internally consistent: no evidence of active or widespread exploitation, and the practical trigger (a colliding pre-existing note, or a refused filesystem write) depends on environment state as much as attacker intent.

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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

obsidian-tc 1.0.1, < 1.31.4

Affected Packages

npm obsidian-tc fix: 1.31.4

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

Vendor (GitHub_M) PRIMARY 7.1 HIGH
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
vuln.today AI 7.1 HIGH

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.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Oct 23, 2026 - 15:02 EUVD
CVE Published
Oct 23, 2026 - 14:06 cve.org
HIGH 7.1

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.4%
Top 62% exploitable
Prevalence
Low
niche MCP server for Obsidian vaults, small developer/agent footprint
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
4 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy