Back to skill

Security audit

Obsidian Toolkit Free

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a coherent Obsidian note-management helper, but it can run commands that modify or delete local notes and recommends an unpinned global npm install without enough guardrails.

Install only if you are comfortable letting the agent run Obsidian CLI commands against your vault. Review every move/delete target before execution, prefer archiving over deletion, and install obsidian-cli with a reviewed pinned version or isolated local setup rather than a mutable global npm install. Treat the local/cloud statement cautiously if your agent platform sends tool context or note contents to an LLM service.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:424
Finding

Unpinned Global Installation of a Third-Party npm Package

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:424
Vulnerability Type: Unpinned and globally installed third-party dependency
Risk Level: Medium

markdown
| obsidian-cli | Tool | Required | `npm install -g obsidian-cli` |

Technical Analysis

The Skill instructs users or an executing Agent to install obsidian-cli globally from the npm registry without specifying a reviewed version or verifying package integrity. Consequently, the package content installed depends on whichever release the registry resolves at execution time.

A global npm installation may also run package lifecycle scripts with the permissions of the invoking user. If the package, its publisher account, or one of its transitive dependencies is compromised, malicious installation logic could execute on the local system. The global installation scope additionally exposes shared user tooling to unexpected or malicious changes.

The project does not demonstrate that obsidian-cli is currently malicious. The risk arises from trusting mutable, unpinned supply-chain content without integrity verification or execution isolation.

Attack Path

  1. An attacker compromises the npm publisher account, package distribution process, or a transitive dependency used by obsidian-cli.
  2. The attacker publishes a malicious release containing harmful package content or lifecycle scripts.
  3. A user or Agent follows the instruction in SKILL.md and executes npm install -g obsidian-cli.
  4. npm resolves the mutable package name to the compromised release and downloads it.
  5. Malicious lifecycle logic executes with the invoking user's privileges, or the installed command later performs attacker-controlled behavior when used.
  6. Because the package is installed globally, the compromised executable can affect subsequent operations that invoke obsidian-cli.

Impact Assessment

Successful exploitation could execute arbitrary code with the privileges of the user performing the ins ...[truncated 477 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin obsidian-cli to a specific version that has been reviewed, for example:
    bash
    npm install --global obsidian-cli@<reviewed-version>
    
  2. Verify the package name, publisher identity, provenance, release history, and expected registry before installation.
  3. Record and verify the package archive integrity hash rather than relying only on a mutable package name and version.
  4. Prefer a project-local installation with a committed lockfile over a global installation:
    bash
    npm install --save-exact obsidian-cli@<reviewed-version>
    npx obsidian-cli --help
    
  5. Review the dependency tree and package lifecycle scripts before approving the dependency.
  6. Use --ignore-scripts if the reviewed package does not require installation scripts:
    bash
    npm install --save-exact --ignore-scripts obsidian-cli@<reviewed-version>
    
  7. Run the tool with the minimum required filesystem permissions and restrict its access to the intended Obsidian vault.
  8. Establish an update process that reviews new versions before changing the pinned dependency.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (7)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill includes destructive delete operations via exec-enabled tooling without requiring an explicit confirmation step at the point of action. In an agent setting, ambiguous or maliciously phrased user input could cause irreversible note deletion or loss of linked knowledge before the user realizes the impact.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file claims the skill covers a long list of broad keywords such as 'Agent', 'LLM', 'Use', 'when', and '智能对话', which overlap with ordinary conversation and do not clearly define when the skill should or should not activate. This creates ambiguous trigger scope and increases the risk of unintended invocation.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Lines describing dependencies and model routing say an LLM API is required and that the free/pro versions use GPT model routing. Immediately after, the API Key section says the skill is based on a local obsidian-cli tool and '不涉及云端调用', which directly conflicts with the stated LLM API dependency and routing.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document explicitly states '完全中文化表达,适配中文用户工作流', indicating a fixed language/locale orientation. There is no opt-in language choice or clear statement that the skill is intentionally limited to a Chinese-region use case.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The skill instructs the agent to read the user's Obsidian configuration file to discover vault paths, but does not warn that this may expose personal directory names, work/personal vault structure, or other sensitive local metadata. In a tool-using agent context, undisclosed inspection of local config reduces transparency and can surprise users about what files are being accessed.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The skill markets the free edition as restricting bulk note operations such as batch move/rename/delete. Yet the documented scenarios show repeated creation and management of multiple project notes in one workflow, undermining the stated product boundary and contradicting the claimed limitation in intent/documentation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The manifest and main body describe a local Obsidian toolkit centered on vault discovery, note management, templates, and plugin guidance, and explicitly state that it does not involve cloud calls. However, the error-handling section introduces '网络错误' handling with ping/firewall/proxy troubleshooting and domestic alternatives, which is behavior outside the described local-only scope.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.