Skip to main content

Obsidian Desktop CVE-2026-104078

| EUVDEUVD-2026-95101 HIGH
Cross-site Scripting (XSS) (CWE-79)
2026-10-08 VulnCheck GHSA-4pcg-gm3h-3m4r
8.4
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Deliver malicious note to victim vault
  2. Delivery
    Craft MathJax \href with TAB in scheme
  3. Exploit
    filterURL emits empty protocol, bypasses safeProtocols
  4. Execution
    Renders as javascript: anchor in Live Preview
  5. Persist
    Victim clicks link in Node-enabled renderer
  6. Impact
    Execute OS commands as desktop user

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

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

Exploitation Conditions

Requires a vulnerable Obsidian Desktop build (per description, before 1.14.0) with its default Node-integration-enabled renderer, and the victim must open an attacker-controlled note in Live Preview mode and then actively click the rendered malicious anchor. The payload specifically depends on the bundled MathJax 3.2.2 Safe component's filterURL mishandling a TAB byte in the \href URL scheme to emit an empty protocol that evades the configured safeProtocols allowlist. Limiting factors that reduce real-world risk: the attacker cannot execute code without the victim's click (UI:A), the malicious note must first be delivered into or opened within the victim's vault (local vector, typically via a shared/synced/downloaded vault or social engineering), and users on patched versions or with Node integration disabled are not exploitable.

Impact

This is a genuine but conditionally-gated code-execution flaw rather than a drive-by remote compromise. The vendor-supplied CVSS 4.0 vector (AV:L/AC:L/AT:N/PR:N/UI:A) is internally consistent with the description: exploitation is unauthenticated (PR:N) but requires the victim to open an attacker-supplied note AND actively click a rendered link (UI:A), and the attack vector is Local (AV:L) because the malicious payload must already be present in the victim's vault/note rather than delivered over a live network protocol. Impact is high across confidentiality, integrity and availability (VC:H/VI:H/VA:H) because successful exploitation yields arbitrary OS command execution as the desktop user via Node integration - the practical ceiling of a non-privilege-escalation client compromise. No EPSS score, KEV listing, or public POC was provided in the intelligence, so there is no public exploit identified at time of analysis and no evidence of active exploitation; the 8.4 score is driven by impact severity, not by observed in-the-wild activity. Net: a real patch-worthy priority for Obsidian Desktop users who open shared/untrusted vaults, but the mandatory user-interaction and local-note prerequisites make mass, unattended exploitation unlikely. Note a version discrepancy in the source data - the description states 'before 1.14.0' while the only reference is the 1.14.4 changelog - which should be verified against the vendor before asserting a definitive fixed version.

Exploit ScenarioDerived

An attacker shares or plants a Markdown note (e.g., in a synced/shared vault, a downloaded community vault, or a repo) containing a crafted MathJax \href whose URL scheme includes a TAB byte, causing filterURL to emit an empty protocol that bypasses safeProtocols and renders as a javascript: anchor. When the victim views the note in Live Preview and clicks the link, the javascript: URL executes in the Node-integration-enabled renderer and calls require('child_process') to run arbitrary OS commands as the desktop user. No public exploit code was identified at time of analysis, and success depends on the victim both opening the note and clicking the link.

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

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

Alert me

AnalysisAIv1 – Oct 08, 2026

Arbitrary operating-system command execution on Obsidian Desktop builds prior to 1.14.0 is possible when a victim opens an attacker-supplied note in Live Preview and clicks a malicious MathJax-rendered anchor. The flaw lives in the bundled MathJax 3.2.2 Safe component, whose filterURL mishandles a TAB byte embedded in a \href URL scheme, yielding an empty protocol that slips past the configured safeProtocols allowlist and renders a javascript: link; clicking it executes in the Node-integration-enabled renderer through require('child_process'), running commands as the desktop user. Exploitation is conditionally gated rather than a drive-by remote compromise: the attacker cannot act without the victim's click (UI:A / UI:R), the hostile note must first be delivered into the victim's vault (typically via a shared, synced, or downloaded vault or social engineering), and patched users or those with Node integration disabled are not affected; confirmed actively exploited status is not established - no public exploit identified at time of analysis - and the vendor patch is referenced in the desktop v1.14.4 changelog.

RemediationAI

Upgrade Obsidian Desktop to a vendor-patched release - the input records patch availability from the vendor with the changelog reference https://obsidian.md/changelog/2026-10-05-desktop-v1.14.4/ (desktop v1.14.4), which supersedes the vulnerable pre-1.14.0 range described in the advisory; administrators and users should move to at least that release so the bundled MathJax Safe filterURL handling of TAB bytes in \href schemes is corrected. Until upgrading, the most effective compensating control is disabling Node integration / enabling the restricted or safe mode for the renderer, which removes the require('child_process') bridge the payload depends on and downgrades the issue from command execution to a contained script-rendering bug - with the trade-off that plugins and workflows relying on Node APIs will stop functioning. Additional hardening: avoid opening notes, vaults, or synced content from untrusted sources (the delivery precondition for this local-vector flaw), exercise caution with Live Preview while reviewing untrusted Markdown, and consider disabling or restricting third-party vault sync so malicious notes cannot be injected automatically. Because exploitation requires a user click on the rendered anchor and a locally present malicious note, endpoint-level controls that block or sandbox Obsidian's ability to spawn child processes (for example, application allowlisting or EDR rules on process creation from the Obsidian binary) provide meaningful defense in depth for environments that cannot patch immediately, though they may break legitimate plugin functionality.

Affected VersionsENISA

Obsidian Desktop 0 <1.14.0

Affected Packages

euvd obsidian_desktop fix: 1.14.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The vulnerability class is CWE-79 (improper neutralization of input during web page generation, i.e., cross-site scripting) manifesting inside Obsidian's Markdown rendering pipeline, specifically the bundled MathJax 3.2.2 Safe extension. MathJax Safe enforces a safeProtocols allowlist by passing candidate URLs through filterURL; when a crafted \href value places a TAB byte in the URL scheme, the parser produces an empty protocol string, which is treated as allowed and consequently emits an anchor whose effective scheme resolves to javascript:. Obsidian Desktop is an Electron application, and its renderer is configured with Node integration enabled by default, so script executing in the renderer context is not sandboxed from the host: the payload can invoke require('child_process') and spawn operating-system commands with the privileges of the logged-in desktop user. The affected product is captured by the CPE cpe:2.3:a:obsidian:obsidian_desktop:*:*:*:*:*:*:*:*, i.e., the Obsidian Desktop application across the unpatched version range described as before 1.14.0; the flaw is not in a standalone MathJax deployment but in the copy shipped with Obsidian, so remediation follows Obsidian's release cadence rather than an upstream MathJax update. The provided CVSS 4.0 vector (AV:L/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N) and the independent assessment (CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H) both agree on a local attack vector, no privileges required, high confidentiality, integrity, and availability impact confined to the user's own environment (subsequent-system metrics are None), which matches the requirement that the victim open a malicious note and actively click the rendered link.

Know when Obsidian 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 (VulnCheck) PRIMARY 8.4 HIGH
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
vuln.today AI 7.8 HIGH

Malicious note is local content (AV:L) and victim must click the rendered link (UI:R); no auth needed (PR:N); Node-integration RCE as desktop user yields full C/I/A impact.

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

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

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

DescriptionCVE.org

Obsidian Desktop before 1.14.0 contains a filter bypass vulnerability in the bundled MathJax 3.2.2 Safe component that allows attackers to execute arbitrary code by embedding a crafted \href value with a TAB byte in the URL scheme, causing filterURL to produce an empty protocol that bypasses the configured safeProtocols restrictions. Attackers can craft a note containing a malicious MathJax formula that renders as a javascript: URL anchor, which when clicked by the victim in Live Preview executes in the Node-integration-enabled vault renderer via require('child_process'), achieving arbitrary operating system command execution as the desktop user.

Executive ViewAI

Why It Matters

Obsidian Desktop installations running versions earlier than 1.14.0 are exposed to a code-execution flaw in which an attacker-supplied note can run arbitrary operating-system commands under the logged-in employee's account after the victim clicks a crafted link while viewing the note in Live Preview. Because Obsidian is widely deployed on knowledge-worker endpoints and commonly points at synced, shared, or downloaded vaults, a successful attack yields the attacker the same access as the employee - including local credentials, business documents, and any connected network or cloud resources. Exploitation requires the hostile note to be delivered into the vault and the victim to click, so risk is concentrated in teams that routinely open vault content from external sources.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 80% exploitable
Prevalence
Medium
popular cross-platform note-taking app, broad but not enterprise-ubiquitous
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High

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.3%
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
Scheduled
Exploitation
None
System Exposure· derived
Small
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

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

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

CVE-2022-36450 CRITICAL POC
9.8 Jul 25

Obsidian 0.14.x and 0.15.x before 0.15.5 allows obsidian://hook-get-address remote code execution because window.open is

CVE-2026-54618 CRITICAL POC
9.4 Sep 17

Unauthenticated OAuth handling in Obsidian Web MCP (obsidian-web-mcp) prior to 0.2.0 lets any remote caller who can reac

CVE-2021-42057 HIGH POC
7.8 Nov 04

Obsidian Dataview through 0.4.12-hotfix1 allows eval injection. Rated high severity (CVSS 7.8), this vulnerability is no

CVE-2023-27035 HIGH POC
7.5 May 01

An issue discovered in Obsidian Canvas 1.1.9 allows remote attackers to send desktop notifications, record user audio an

CVE-2023-2110 HIGH POC
7.1 Aug 19

Improper path handling in Obsidian desktop before 1.2.8 on Windows, Linux and macOS allows a crafted webpage to access l

CVE-2022-45130 MEDIUM POC
6.5 Nov 10

Plesk Obsidian allows a CSRF attack, e.g., via the /api/v2/cli/commands REST API to change an Admin password. Rated medi

CVE-2023-24044 MEDIUM POC
6.1 Jan 22

A Host Header Injection issue on the Login page of Plesk Obsidian through 18.0.49 allows attackers to redirect users to

CVE-2021-35976 MEDIUM POC
6.1 Sep 10

The feature to preview a website in Plesk Obsidian 18.0.0 through 18.0.32 on Linux is vulnerable to reflected XSS via th

CVE-2021-38148 CRITICAL
9.8 Aug 07

Obsidian before 0.12.12 does not require user confirmation for non-http/https URLs. Rated critical severity (CVSS 9.8),

CVE-2026-104077 HIGH
8.5 Oct 08

Arbitrary code execution in Obsidian Desktop builds prior to 1.14.0 is possible when a user opens an attacker-supplied M

CVE-2023-33244 HIGH
8.2 May 20

Obsidian before 1.2.2 allows calls to unintended APIs (for microphone access, camera access, and desktop notification) v

CVE-2020-11583 MEDIUM
6.1 Aug 03

A GET-based XSS reflected vulnerability in Plesk Obsidian 18.0.17 allows remote unauthenticated users to inject arbitrar

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