{"id":"CVE-2026-77364","kind":"vulnerability","aliases":["CVE-2026-77364","GHSA-cvp8-vvgf-69q4"],"related":[],"title":"obsidian-tc: Default folder ACL is fail-open; .obsidian plugin secrets are readable by default","description":"### Impact\nWith a default configuration, an undefined `readPaths`/`writePaths` meant allow-all, the `strictReadDefault` flag was inert, and the `.obsidian`/`.git`/`.trash` control directories were denied only during enumeration — not on the direct request path. A caller could read `.obsidian/plugins/*/data.json`, exfiltrating **plugin API keys and Obsidian Sync passwords** (live-reproduced), as well as any other in-vault file by path.\n\n### Patches\nFixed in **1.3.1**. Upgrade to `>= 1.3.1`. The default now denies `.obsidian`/`.git`/`.trash` on read/write/delete and honors `strictReadDefault` on the request path.\n\n### Workarounds\nSet an explicit `readPaths`/`writePaths` whitelist that excludes the control directories.","summary":"obsidian-tc is an npm package whose default folder access rules fail open, so with default configuration any caller can read files by path, including .obsidian/plugins/*/data.json. An attacker can read plugin API keys and Obsidian Sync passwords, plus any other file in the vault.","severity":"medium","cvss":6.5,"epss":0.0023799999617040157,"exploited":false,"exploited_at":null,"products":[{"name":"obsidian-tc","fixed":["1.3.1"],"affected":"< 1.3.1","ecosystem":"npm"}],"ecosystems":["npm"],"tags":["cwe-200","cwe-276","node","npm","obsidian","obsidian-tc","package"],"not_affected_if":["explicit-readpaths-writepaths-excluding-control-dirs","version-1.3.1-or-later"],"how_to_check":"Run npm ls obsidian-tc to see the installed version; below 1.3.1 is affected.\nIf below 1.3.1, check whether readPaths and writePaths are explicitly set and exclude .obsidian, .git and .trash.","fix":"Upgrade obsidian-tc to 1.3.1 or later.\nWorkaround: set explicit readPaths and writePaths allowlists that exclude .obsidian, .git and .trash.","status":"open","published_at":"2026-10-12T18:17:23+00:00","first_seen_at":"2026-10-23T19:11:31+00:00","triaged_at":"2026-10-23T19:56:29+00:00","updated_at":"2026-10-23T23:44:52+00:00","category":"package","confidence":0.85,"triage":{"at":"2026-10-23T19:56:29Z","model":"claude-haiku-5-5","output":{"fix":"Upgrade obsidian-tc to 1.3.1 or later.\nWorkaround: set explicit readPaths and writePaths allowlists that exclude .obsidian, .git and .trash.","summary":"obsidian-tc is an npm package whose default folder access rules fail open, so with default configuration any caller can read files by path, including .obsidian/plugins/*/data.json. An attacker can read plugin API keys and Obsidian Sync passwords, plus any other file in the vault.","category":"package","who_cares":["obsidian-tc","npm","node","obsidian"],"confidence":0.85,"analyst_note":"","how_to_check":"Run npm ls obsidian-tc to see the installed version; below 1.3.1 is affected.\nIf below 1.3.1, check whether readPaths and writePaths are explicitly set and exclude .obsidian, .git and .trash.","needs_analyst":false,"not_affected_if":["version-1.3.1-or-later","explicit-readpaths-writepaths-excluding-control-dirs"],"severity_if_unknown":"medium"},"cost_usd":0.000771,"input_tokens":2270,"output_tokens":1089,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-200':33B '-2026':19A,27A '-276':35B '-77364':20A,28A '/data.json':70B,130C '1.3.1':156C,159C '69q4':25A 'access':53B 'acl':6A 'allow':100C 'allow-al':99C 'api':76B,133C 'attack':72B 'caller':62B,126C 'configur':60B,93C 'control':112C,186C 'could':127C 'cve':18A,26A 'cvp8':23A 'cwe':32B,34B 'default':4A,17A,51B,59B,92C,161C 'deni':115C,163C 'direct':122C 'directori':113C,187C 'enumer':118C 'exclud':184C 'exfiltr':131C 'explicit':179C 'fail':9A,55B 'fail-open':8A 'file':65B,85B,150C 'fix':154C 'flag':104C 'folder':5A,52B 'ghsa':22A 'ghsa-cvp8-vvgf-69q4':21A 'git':110C,165C 'honor':170C 'impact':89C 'in-vault':147C 'includ':68B 'inert':106C 'key':77B,134C 'live':140C 'live-reproduc':139C 'meant':98C 'node':36B 'npm':37B,48B 'obsidian':2A,11A,30A,38B,40B,44B,79B,109C,136C,164C 'obsidian-tc':1A,29A,39B,43B 'obsidian/plugins':69B,129C 'open':10A,56B 'packag':42B,49B 'password':81B,138C 'patch':153C 'path':67B,124C,152C,175C 'plugin':12A,75B,132C 'plus':82B 'read':64B,74B,128C 'read/write/delete':168C 'readabl':15A 'readpath':96C,180C 'reproduc':141C 'request':123C,174C 'rule':54B 'secret':13A 'set':177C 'strictreaddefault':103C,171C 'sync':80B,137C 'tc':3A,31A,41B,45B 'trash':111C,166C 'undefin':95C 'upgrad':157C 'vault':88B,149C 'vvgf':24A 'well':143C 'whitelist':182C 'whose':50B 'workaround':176C 'writepath':97C,181C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-12T18:17:23+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","cvss_by":"GitHub","poc_count":0,"sources":[{"source":"ghsa","external_id":"GHSA-cvp8-vvgf-69q4","url":"https://github.com/advisories/GHSA-cvp8-vvgf-69q4","severity":"medium","published_at":"2026-10-23T17:28:40+00:00","modified_at":"2026-10-23T17:28:42+00:00","first_seen_at":"2026-10-23T19:11:31+00:00","fetched_at":"2026-10-23T19:11:31+00:00","note":null},{"source":"nvd","external_id":"CVE-2026-77364","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-77364","severity":null,"published_at":"2026-10-12T18:17:23+00:00","modified_at":"2026-10-16T16:00:33+00:00","first_seen_at":"2026-10-23T23:44:52+00:00","fetched_at":"2026-10-23T23:44:52+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}