{"answers":{"affected":"2 open source packages ship an affected version, including obsidian-tc.","exploited":"There is no known exploitation of CVE-2026-115478 in the wild and no public exploit code.","fix":"Upgrade obsidian-tc to 1.31.4 or later.","what":"CVE-2026-115478 is a high-severity vulnerability in The-40-Thieves obsidian-tc, published on 23 Oct 2026."},"fix_prompt":"Check this codebase for CVE-2026-115478 and fix it if it is affected.\n\nWhat it is: CVE-2026-115478 is a high-severity vulnerability in The-40-Thieves obsidian-tc, published on 23 Oct 2026. \nExploitation: There is no known exploitation of CVE-2026-115478 in the wild and no public exploit code.\n\nAffected packages and fixed versions:\n- obsidian-tc (npm): affected from 1.0.1; fixed in 1.31.4\n- obsidian-tc (npm): affected from 1.0.1; fixed in 1.31.4\n\nTask:\n1. Search the dependency manifests and lockfiles (for example package.json, package-lock.json, requirements.txt, poetry.lock, uv.lock, pom.xml, build.gradle, go.mod, Cargo.lock, Gemfile.lock) and any Dockerfiles for the affected packages, including transitive dependencies.\n2. If an affected version is in use, upgrade it to the fixed version for its release line with the project's package manager, so the lockfile is regenerated. Prefer the smallest upgrade that fixes it.\n3. If there is no fix, or the upgrade would break the build, do not guess: explain the risk and the safest workaround instead.\n4. Run the tests and summarise what changed and why.\n5. If nothing in the project is affected, say so and change nothing.\n\nReference: https://insights.sbomify.com/CVE-2026-115478/ (Markdown: https://insights.sbomify.com/CVE-2026-115478/index.md)","id":"CVE-2026-115478","markdown":"https://insights.sbomify.com/CVE-2026-115478/index.md","name":"CVE-2026-115478","record":{"aliases":["GHSA-r3g7-r4hr-m258"],"analysis":null,"analysis_generated_by":null,"assigner":"GitHub_M","cpe":[],"cvss":{"score":7.1,"severity":"high","source":"cna","vector":"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","version":"4.0"},"cwes":[{"id":"CWE-863","name":"Incorrect Authorization"},{"id":"CWE-459","name":"Incomplete Cleanup"}],"description":"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/\u003ctype\u003e/\u003cname\u003e.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.","ecosystems":["npm"],"exploits":{"exploitdb":0,"first_seen":null,"github_poc":0,"max_poc_stars":null,"metasploit":0,"nuclei":0,"refs":[],"tier":"none_known"},"has_fix":true,"headline":"obsidian-tc: Memory-lifecycle tools overwrite unowned notes or partially commit lifecycle changes","id":"CVE-2026-115478","indexable":true,"kev":null,"kind":"cve","links":{"ecosystem":"npm","product":null,"products":[],"type":null,"year":"2026"},"n_packages":2,"n_references":5,"next":{"headline":"baserCMS: Mail-form auto-replies accept multiple visitor-controlled recipients","id":"CVE-2026-115479"},"packages":[{"ecosystem":"npm","fixed":["1.31.4"],"introduced":["1.0.1"],"last_affected":[],"package":"obsidian-tc","purl":null,"source":"GHSA-r3g7-r4hr-m258"},{"ecosystem":"npm","fixed":["1.31.4"],"introduced":["1.0.1"],"last_affected":[],"package":"obsidian-tc","purl":"pkg:npm/obsidian-tc","source":"GHSA-r3g7-r4hr-m258"}],"prev":{"headline":"obsidian-tc: Declined human-in-the-loop confirmations can permit destructive calls over HTTP","id":"CVE-2026-115477"},"products":["obsidian-tc"],"published":"2026-10-23","related":[],"sources":[{"class":"attribution","licence":"CVE Terms of Use (MITRE)","name":"CVE List","prefix":"CVE"},{"class":"attribution","licence":"CC BY 4.0","name":"GitHub Advisory Database","prefix":"GHSA"},{"class":"attribution","licence":"CWE Terms of Use","name":"CWE (MITRE)"},{"class":"attribution","licence":"FIRST CVSS licence","name":"CVSS (FIRST)"}],"ssvc":{"automatable":null,"exploitation":null,"technical_impact":null},"state":"PUBLISHED","updated":"2026-10-23","vendors":["The-40-Thieves"]},"summary":null,"url":"https://insights.sbomify.com/CVE-2026-115478/"}