Back to skill

Security audit

LifeOS

Security checks for vulnerabilities and agentic risk

Overview

This skill is for managing a personal LifeOS/Obsidian vault, but it routinely runs an unpinned remote npm CLI that can read and modify that vault.

Review carefully before installing. Use this only if you trust the `@life-os/cli` npm publisher and are comfortable letting it read and modify your LifeOS/Obsidian vault. Prefer pinning a known CLI version, keeping vault backups or version control, and avoiding `skill install` or overwrite operations without explicit review.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T03 · Remote Payload Retrieval and Execution

Error
Location
:<n> ``` `SKILL.md:212`: ```bash npx -y @life-os/cli skill install ``` `references/commands.md:8-11`: ```markdown - **Invocation**: run via `npx -y @life-os/cli <command> …` (npx fetches the published package on first use; `-y` skips the prompt). The command names below (`config`, `tasks`, …) are the `<command>` argument, e.g. `npx -y @life-os/cli tasks due=today`. ``` ### Technical Analysis The Skill directs the agent to retrieve and execute `@life-os/cli` from the npm registry without specifyi ...[truncated 3270 chars]:66
Finding

Unpinned npm Package Is Retrieved and Executed Non-Interactively with Vault Access

Content
View full analysis
`. 2. `npx -y @life-os/cli help` is the authoritative command list. ``` `SKILL.md:100-112`: ```bash # every command is invoked as: npx -y @life-os/cli npx -y @life-os/cli config npx -y @life-os/cli tasks [todo|done|all] npx -y @life-os/cli search query= npx -y @life-os/cli read file=|path=

npx -y @life-os/cli daily|weekly|monthly|quarterly|yearly npx -y @life-os/cli :read npx -y @life-os/cli :create npx -y @life-os/cli :append content= npx -y @life-os/cli theme:create type=project|area|resource|archive|theme tag= path=

npx -y @life-os/cli append path=

content= npx -y @life-os/cli create path=

[content=] npx -y @life-os/cli task done|todo ref=: ``` `SKILL.md:212`: ```bash npx -y @life-os/cli skill install ``` `references/commands.md:8-11`: ```markdown - **Invocation**: run via `npx -y @life-os/cli …` (npx fetches the published package on first use; `-y` skips the prompt). The command names below (`config`, `tasks`, …) are the `` argument, e.g. `npx -y @life-os/cli tasks due=today`. ``` ### Technical Analysis The Skill directs the agent to retrieve and execute `@life-os/cli` from the npm registry ...[truncated 3143 chars]

Remediation
View remediation
``` Do not use version ranges or distribution tags such as `latest`. 2. **Enforce dependency integrity** Install through a committed lockfile with npm integrity hashes, or distribute a reviewed binary/package artifact whose checksum or signature is verified before execution. 3. **Avoid automatic confirmation suppression** Remove `-y` from the default instructions. Require explicit user approval before the first package download, after a version change, and before any package-driven Skill update. 4. **Separate installation from routine execution** Install and review the pinned CLI once, then invoke the fixed local executable for normal vault operations. Routine task and note requests should not trigger package resolution from the network. 5. **Protect Skill updates** Require explicit confirmation before running `skill install`. Back up existing Skill files, display the package version and affected paths, and review changes before replacing `SKILL.md` or `references/`. 6. **Apply process-level containment** Run the CLI with access limited to the intended vault rather than the user’s broader filesystem. Restrict outbound network access during vault reads and writes when package retrieval is not required. 7. **Document the trust boundary** Clearly warn that the npm package executes local code and can access vault contents. Document the exact approved version, publisher identity, verification procedure, and update-review process. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (64)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README emphasizes that the skill can append to and update a user's real LifeOS/Obsidian vault but does not clearly warn that it will modify local user files. In agent-driven workflows, lack of explicit modification warnings and confirmation guidance can lead to unintended destructive or privacy-impacting edits, especially because the vault contains personal notes, tasks, and synthesized AI pages.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The README instructs agents to execute npx -y @life-os/cli without pinning a version, which means each run may fetch and execute whatever package version is currently published. In an agent skill that reads and writes a user's vault, a compromised maintainer account, malicious update, or dependency-chain attack could immediately lead to arbitrary code execution and data modification on the user's machine.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding

npx skills add quanru/lifeos-skill references a remotely fetched package/tooling path without version pinning, so installation behavior can change over time and may pull updated code that has not been reviewed. While this line is for skill installation rather than direct vault access, it still expands the supply-chain attack surface for users and agents consuming the skill.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding

The Codex-local install command also uses npx skills add without an immutable version, creating the same supply-chain risk as the general install path. An attacker who can alter the resolved package or referenced skill source could deliver different code to future installs than what was originally reviewed.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The prerequisites reiterate that the skill invokes npx -y @life-os/cli, reinforcing that runtime execution depends on the latest published package rather than a vetted fixed build. Because this CLI is intended to manipulate user notes, tasks, and AI Wiki files, compromise of the package can directly affect confidentiality and integrity of the user's local vault.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The skill repeatedly instructs the agent to execute npx -y @life-os/cli, which fetches the latest published npm package at runtime with no version pinning or integrity lock. That creates a supply-chain execution risk: if the package is compromised, typo-squatted, or a malicious version is published, the agent will run attacker-controlled code on the user's system and against the user's vault.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This line directs use of npx -y @life-os/cli without an exact version, causing runtime retrieval and execution of whatever package version is current in the registry. In a skill that edits a personal knowledge vault, that gives any compromised upstream release immediate code-execution and data-access potential.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
99% confidence
Finding

The invocation guidance explicitly standardizes on npx -y @life-os/cli, and the surrounding text notes that npx fetches the published package on first use. This means the skill's normal operating model depends on downloading and executing code from npm at runtime, which is a classic supply-chain exposure.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
99% confidence
Finding

The invocation guidance explicitly standardizes on npx -y @life-os/cli, and the surrounding text notes that npx fetches the published package on first use. This means the skill's normal operating model depends on downloading and executing code from npm at runtime, which is a classic supply-chain exposure.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The skill's first operational step is to run an unpinned npm package with npx -y @life-os/cli config. Because the command fetches the package at runtime, a compromised release could execute before any safety checks and gain access to filesystem paths, vault contents, and environment data.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This instruction again tells the agent to run npx -y @life-os/cli help without a pinned version, so the help path itself can trigger arbitrary package download and execution. Any attacker controlling the upstream package could leverage even innocuous-seeming commands as an execution foothold.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This command reference uses npx -y @life-os/cli config without version pinning, preserving the same supply-chain risk. Because config reveals vault and settings information, exploitation could combine code execution with sensitive metadata exposure.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The tasks example executes an unpinned npm package, allowing arbitrary upstream code to run before task data is queried. In context, the package would gain access to potentially sensitive task contents and note structure.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The search example relies on npx -y @life-os/cli with no version constraint, which means a registry compromise can turn a read-only lookup into arbitrary code execution. Since this skill searches user notes, the resulting blast radius includes sensitive content exfiltration.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This read command is another unpinned runtime package execution point. A malicious package version could read arbitrary files accessible to the agent, not just the intended note, and exfiltrate them.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The periodic note path command uses the same unpinned npx invocation, so even path resolution requires trusting the latest npm release. This is dangerous because the skill normalizes frequent execution of remote code in a context with user data access.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This :read example executes an unpinned npm package and can expose note contents to any compromised upstream version. The risk is amplified because the skill is explicitly designed to operate on a real user vault.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

Creating a period note via npx -y @life-os/cli <period>:create without pinning gives an attacker both code execution and a write primitive into the user's vault if the npm package is compromised. This changes the issue from mere information disclosure to integrity compromise as well.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The append command uses unpinned runtime package execution while writing attacker-influenced content into notes. A malicious upstream package could alter content, insert hidden payloads into markdown, or modify unrelated files in the vault.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This theme:create example relies on an unpinned npm package while creating structured notes and frontmatter. A compromised package could poison metadata, create unexpected files, or exfiltrate note contents and paths.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The plain append command again fetches and runs the latest package version from npm. In this skill, that grants a compromised dependency direct write access to personal notes, making integrity attacks practical.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The create command executes an unpinned package and gives it authority to create or overwrite notes depending on flags. If the package is malicious, it could create deceptive notes, alter knowledge base state, or pivot to other filesystem targets accessible to the agent.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

Task state toggling through an unpinned npm package is still arbitrary code execution with access to vault contents. Though the documented action is small, the actual executed code can perform any action available to the runtime user.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This line continues the pattern of normalizing npx -y @life-os/cli for all operations without version pinning. Because the skill is meant for repeated interactive use, the attack surface is broad and recurring rather than incidental.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The morning review recipe instructs the agent to run an unpinned tasks command, creating an execution path during routine use. This is dangerous because frequent day-to-day operations are the most likely path for silent exploitation of a compromised dependency.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.