🇰🇷 한글 설명
obsidian-tc는 Obsidian 볼트용 거버넌스 기반 MCP 서버입니다. 1.13.0부터 1.31.4 이전 버전에서 Streamable HTTP 배포 시 auth.jwtSecret이 설정되고 클라이언트가 elicitation.form을 지원하면, 사용자가 거부하거나 취소해도 requestState가 올바르게 바인딩되어 재제출되면 dispatch-gated 도구 호출이 완료될 수 있었습니다. 이로 인해 사용자 승인 없이 파괴적인 볼트 작업이 실행될 수 있었습니다. 이 문제는 1.31.4 버전에서 수정되었습니다.
💡 쉬운 설명
사용자가 위험한 작업을 거부했어도 특정 조건에서 서버가 이를 승인으로 잘못 처리해 작업이 실행될 수 있었습니다. 최신 버전으로 업데이트하면 이 문제가 해결됩니다.
🇺🇸 원문 (English)
obsidian-tc is a governed, agent-ready Model Context Protocol server for Obsidian vaults. From 1.13.0 until 1.31.4, on a Streamable HTTP deployment with `auth.jwtSecret` configured and a 2026-07-28-era client declaring `elicitation.form` support, a dispatch-gated tool call offered an `inputRequired` confirmation could still complete after the human declined or cancelled, or the elicitation response was omitted or malformed, provided the client echoed the validly bound `requestState` on resubmission. The server trusted an authentic, call-bound state as proof of approval even though that state was minted before the `elicitation/create` leg was asked and proved only that the resubmission belonged to the same call. A client behaving incorrectly or under an attacker's control could therefore execute dispatch-gated destructive vault operations without the human's approval, while still requiring the caller's ordinary tool permissions. Only tools marked `destructive: true` or requiring a scope with a human-in-the-loop floor were reachable through this bypass. The sixteen handler-side conditionally gated tools, including `write_note` overwrite and `move_note`, did not read elicitation state on the modern wire and let neither approval nor decline through that path. Affected deployments using stdio or leaving `auth.jwtSecret` unset instead used the CLI `elicit_token` fallback and did not offer this `requestState` round trip. The fix does not prevent a malicious client from reporting a fabricated approval, because the server cannot verify that the client displayed the form or that a human saw it. This issue is fixed in version 1.31.4.
📍 영향받는 시스템
obsidian-tc 1.13.0 ~ 1.31.4 미만 (Streamable HTTP + auth.jwtSecret 설정 환경)
⚔️ 공격 벡터
비정상적이거나 공격자가 통제하는 MCP 클라이언트가 거부 후에도 유효한 requestState를 재제출하여 파괴적 도구 호출을 승인 없이 실행
🛡️ 대응 방법
obsidian-tc를 1.31.4 이상으로 업그레이드
🔧 검증 코드
출력된 버전이 1.31.4 미만이면 취약하며, 1.31.4 이상이면 수정된 버전입니다. 설치되지 않았으면 결과가 없습니다.
npm list -g obsidian-tc 2>/dev/null | grep obsidian-tc