🇰🇷 한글 설명
obsidian-tc은 Obsidian 볼트를 위한 거버넌스 기반 MCP 서버입니다. 1.0.1부터 1.31.4 이전 버전에서는 엔티티 생성·링크·이름변경·삭제 시 메모리 노트를 SQLite에서 재생성하면서 노트 소유권과 실패한 작업의 일관성을 보장하지 못합니다. 이로 인해 같은 경로로 정규화되는 다른 노트의 본문이 덮어써지고, 실패 시 DB와 파일 시스템 상태가 불일치할 수 있습니다.
💡 쉬운 설명
옵시디언 노트 관리 도구의 버그로, 같은 이름으로 변환되는 다른 노트의 내용이 의도치 않게 지워질 수 있습니다. 작업이 중간에 실패하면 데이터베이스와 실제 노트 파일의 내용이 서로 맞지 않게 됩니다.
🇺🇸 원문 (English)
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.
📍 영향받는 시스템
obsidian-tc 1.0.1 ~ 1.31.3 (1.31.4 미만)
⚔️ 공격 벡터
권한이 있는 사용자/에이전트가 정상적인 메모리 도구를 호출할 때, 이름이 충돌하는 엔티티로 인해 볼트의 다른 노트 본문이 의도치 않게 덮어써짐
🛡️ 대응 방법
obsidian-tc를 1.31.4 이상으로 업그레이드하고, 업그레이드 전 중요한 볼트 노트를 백업하거나 스냅샷(restore_note)을 활성화하세요.
🔧 검증 코드
출력된 버전이 1.31.4 이상이면 패치 적용됨, 1.31.4 미만이거나 설치 결과가 없으면 취약 가능성이 있으므로 업그레이드가 필요합니다.
npm ls obsidian-tc 2>/dev/null | grep obsidian-tc