T08 · Insecure Dependencies
- 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: Mediummarkdown | obsidian-cli | Tool | Required | `npm install -g obsidian-cli` |Technical Analysis
The Skill instructs users or an executing Agent to install
obsidian-cliglobally 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-cliis currently malicious. The risk arises from trusting mutable, unpinned supply-chain content without integrity verification or execution isolation.Attack Path
- An attacker compromises the npm publisher account, package distribution process, or a transitive dependency used by
obsidian-cli. - The attacker publishes a malicious release containing harmful package content or lifecycle scripts.
- A user or Agent follows the instruction in
SKILL.mdand executesnpm install -g obsidian-cli. - npm resolves the mutable package name to the compromised release and downloads it.
- Malicious lifecycle logic executes with the invoking user's privileges, or the installed command later performs attacker-controlled behavior when used.
- 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]
- An attacker compromises the npm publisher account, package distribution process, or a transitive dependency used by
- Remediation
View remediation
Remediation Suggestions
- Pin
obsidian-clito a specific version that has been reviewed, for example:bash npm install --global obsidian-cli@<reviewed-version> - Verify the package name, publisher identity, provenance, release history, and expected registry before installation.
- Record and verify the package archive integrity hash rather than relying only on a mutable package name and version.
- 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 - Review the dependency tree and package lifecycle scripts before approving the dependency.
- Use
--ignore-scriptsif the reviewed package does not require installation scripts:bash npm install --save-exact --ignore-scripts obsidian-cli@<reviewed-version> - Run the tool with the minimum required filesystem permissions and restrict its access to the intended Obsidian vault.
- Establish an update process that reviews new versions before changing the pinned dependency.
- Pin
