Skip to main content

obsidian-tc CVE-2026-115477

| EUVDEUVD-2026-109082 HIGH
Improper Authorization (CWE-285)
2026-10-23 GitHub_M GHSA-737x-cwfr-5vvc
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 to HTTP MCP server with JWT
  2. Delivery
    Invoke dispatch-gated destructive tool
  3. Exploit
    Server offers inputRequired confirmation
  4. Execution
    Echo call-bound requestState after human declines
  5. Impact
    Destructive vault operation executes without approval

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization verification
MITRE ATT&CK

1 technique across 1 tactic: Defense Evasion

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitable only when ALL hold: the server runs the Streamable HTTP transport; auth.jwtSecret is configured (this is what enables the requestState codec and the inputRequired round trip); the connected client is a 2026-07-28-era client that declared elicitation.form support; and the called tool is dispatch-gated (destructive:true or a scope carrying an HITL floor). The acting client must be malicious, attacker-controlled, or behaving incorrectly, and must echo the validly-bound requestState on resubmission after the human declined, cancelled, or omitted/malformed the response. Limiting factors that exclude many deployments: stdio deployments or any deployment leaving auth.jwtSecret unset are NOT affected (they fall back to the CLI elicit_token path and never offer this requestState round trip); the sixteen handler-side conditionally gated tools (write_note overwrite, move_note, etc.) are NOT reachable via this bypass; and the caller still needs its ordinary JWT-authenticated tool permissions. Only versions 1.13.0 through 1.31.3 are vulnerable.

Impact

This is CWE-285/CWE-863 authorization-bypass of a human-in-the-loop (HITL) confirmation gate, scored CVSS 4.0 7.1 (CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:L). The signals are internally consistent: network vector over Streamable HTTP, low complexity, VI:H reflecting destructive vault operations (delete, cross-folder move, frontmatter/link rewrite), and PR:L because the caller still needs its ordinary JWT-authenticated tool permissions. No EPSS score was supplied in the input, and the CVE is NOT on CISA KEV, so there is no evidence of active exploitation - exploitation status is best described as a maintainer-reproduced defect rather than in-the-wild abuse. The vuln.today decision label is 'this_week' (not act_now/emergency), which matches a serious-but-not-crisis posture. The key nuance that lowers real-world risk below what AV:N/AC:L suggests is the trust model: the bypass is only reachable by a client that is itself malicious or under attacker control (or a compliant client misbehaving); it is not a classic remote-unauthenticated internet exploit against arbitrary victims - the attacker must already be the agent/client talking to the server with valid credentials. Critically, the advisory states the fix does NOT fully close the problem: a malicious or non-compliant client can still answer its own elicitation/create leg with a fabricated approval, because the server cannot verify a human ever saw the form - this residual is inherent to the client-driven 2026-07-28 protocol. Scope is further bounded: only dispatch-gated tools (destructive:true or an HITL-floored scope) were reachable; the sixteen handler-side conditionally gated tools (write_note overwrite, move_note) never read elicitation state on the modern wire and were not bypassable this way.

Exploit ScenarioDerived

An Obsidian-vault MCP server is deployed over Streamable HTTP with auth.jwtSecret set, and an AI agent (a 2026-07-28-era client declaring elicitation.form support) that is attacker-controlled or misbehaving calls a destructive, dispatch-gated tool. The server offers an inputRequired confirmation; the human declines or cancels, but the client resubmits the same call echoing the validly-bound requestState, which the pre-1.31.4 server trusted as proof of approval, so the destructive vault operation completes anyway. The defect was reproduced directly by the maintainer (decline on the elicitation/create leg still wrote), but no standalone weaponized exploit is published.

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

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

Alert me

AnalysisAIv1 – Oct 23, 2026

obsidian-tc 1.13.0 through 1.31.3 lets an authenticated client complete destructive, dispatch-gated Obsidian vault operations (delete, cross-folder move, frontmatter replace, link rewrite) even after the human explicitly declined or cancelled the human-in-the-loop confirmation, or after the elicitation response was omitted or malformed. The server treats a validly bound requestState echoed on resubmission as proof of approval, but that state is minted before the elicitation leg is ever asked, so it only proves the resubmission belongs to the same call; exploitation requires a Streamable HTTP deployment with auth.jwtSecret configured, a 2026-07-28-era client declaring elicitation.form support, and a tool marked destructive:true or carrying a human-in-the-loop scope floor. Only client-driven HTTP deployments are affected - stdio or jwtSecret-unset installs fall back to the CLI elicit_token path and never offer the round trip - and there is no public exploit identified at time of analysis (no CISA KEV listing), though the advisory notes the underlying construction was reproduced directly by the maintainers.

RemediationAI

Upgrade to obsidian-tc 1.31.4, which requires the confirmation leg's own inputResponse to be {action: "accept", content: {approve: true}} before an echoed requestState is trusted, per advisory GHSA-737x-cwfr-5vvc, PR #969, commit 101c91c, and the v1.31.4 release notes. If immediate upgrade is not possible, the vendor-documented workarounds are to run the deployment over stdio or to leave auth.jwtSecret unset so the requestState codec, and therefore inputRequired, is never offered and the CLI elicit_token path is used instead; both reduce exposure by removing the client-driven confirmation round trip, at the cost of losing the JWT-authenticated HTTP deployment model. Note that even after upgrading, a malicious or non-compliant client can still fabricate an approval on its own elicitation leg, so dispatch-gated destructive tools should only be exposed to clients you trust.

Affected VersionsENISA

obsidian-tc 1.13.0, < 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, agent-ready Model Context Protocol server for Obsidian vaults, built on @modelcontextprotocol/server 2.0.0. The flaw is classified CWE-285 (Improper Authorization) and CWE-863 (Incorrect Authorization) in the tools/call handler of packages/server/src/mcp/server.ts together with vault/hitl.ts. Under the 2026-07-28 protocol round trip (SEP-2260/2322), the server offers an inputRequired confirmation and binds a requestState to the specific call; the defect is that authenticity and call-binding were accepted as sufficient authorization. The requestState codec depends on auth.jwtSecret, which is why only Streamable HTTP deployments with that secret configured reach the vulnerable path. The fix adds a check on the confirmation leg's own inputResponse, requiring {action: "accept", content: {approve: true}} before the echoed state is trusted, and never offers a second round for the same declined confirmation. The advisory explicitly notes a residual, by-design limitation: a malicious or non-compliant client can still answer its own elicitation/create leg with a fabricated approval because the server cannot verify the form was rendered or seen by a human; the server-owned legacy shim does not share this gap.

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

Network HTTP vector with low complexity; PR:L since the caller needs ordinary JWT tool permissions; UI:N as the bypass defeats the human gate; I:H for destructive vault writes, A:L for data loss, 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:04 cve.org
HIGH 7.1

DescriptionCVE.org

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.

Technical POC Analysis

CWE-285 (Improper Authorization), also tagged CWE-863 in 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 high-severity authorization flaw in obsidian-tc (versions 1.13.0 through 1.31.3) allows authenticated users on Streamable HTTP deployments to bypass human confirmation and perform destructive vault operations such as deletion, cross-folder moves, and link rewrites, despite explicit rejection. This undermines the core human-in-the-loop control, exposing organizations to data loss, integrity compromise, and audit failures; only JWT-secret-configured HTTP deployments with elicitation-capable clients and destructive tools are affected.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: disable Streamable HTTP deployments with auth.jwtSecret configured; remove destructive tool flags or human-in-the-loop scope floors; enforce additional server-side authorization checks for destructive operations; use stdio transports or jwtSecret-unset configurations; monitor and log all vault modifications for anomalies.

Threat Intelligence Overview

EPSS Score
0.5%
Top 58% exploitable
Prevalence
Low
niche Obsidian-vault MCP server from a small project, limited deployment
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.5%
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