T08 · Insecure Dependencies
- Location
package.json:13- Finding
Unpinned dependency executes security-sensitive SDK code during installation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Keep health-data skill appears purpose-aligned, but it automatically runs install-time code, stores health-account credentials locally, and uses an unpinned SDK dependency, so it needs careful review before installation.
Install only if you trust the @keepclaw package, the Keep MCP endpoint, and the SDK dependency it pulls at install time. Be aware it can save your Keep token in ~/.keepai/.env, modify OpenClaw/Hermes skill directories on global install, and send install telemetry; avoid shared machines and clear or revoke the token when done.
package.json:13Unpinned dependency executes security-sensitive SDK code during installation
scripts/persist_auth.js:23Authentication JWT is passed through process command-line arguments
The skill is presented as a query tool, but the documented workflow includes installation/deployment actions, writing configuration under ~/.keepai/.env, clearing credentials on URL change, and telemetry/reporting. Bundling setup, local file writes, and telemetry with a health-data skill increases the attack surface and can surprise operators, especially in environments that trust the declared purpose for risk decisions.
The skill is presented as a query tool, but the documented workflow includes installation/deployment actions, writing configuration under ~/.keepai/.env, clearing credentials on URL change, and telemetry/reporting. Bundling setup, local file writes, and telemetry with a health-data skill increases the attack surface and can surprise operators, especially in environments that trust the declared purpose for risk decisions.
The skill is presented as a query tool, but the documented workflow includes installation/deployment actions, writing configuration under ~/.keepai/.env, clearing credentials on URL change, and telemetry/reporting. Bundling setup, local file writes, and telemetry with a health-data skill increases the attack surface and can surprise operators, especially in environments that trust the declared purpose for risk decisions.
This script persists and clears authentication credentials on the local filesystem, which is a privileged state-changing capability beyond the advertised read-only health-data query scope. Even if intended for convenience, storing tokens locally expands the attack surface: other local processes, misconfigured permissions, logs, backups, or later code paths could expose reusable credentials to an attacker.
The README states that installation-time logic writes MCP server configuration into ~/.keepai/.env, and elsewhere describes postinstall telemetry and copying the package into runner skill directories. For a health-data query skill, install-time side effects and telemetry exceed the narrowly stated purpose and create an unnecessary trust and privacy boundary expansion, especially because health-related auth and configuration are involved.
The README documents writing server configuration and later health auth material to ~/.keepai/.env without an explicit privacy/safety warning to users. Storing tokens and service endpoints in a local env file is common, but for health-related data it raises confidentiality concerns if the file is reused by other tools, backed up insecurely, or read by local malware or other users.
The README says the package copies the full skill bundle into runner skill directories during installation. Self-deployment into agent execution paths broadens the package's persistence and execution surface beyond simple querying, which is risky if the package is tampered with or if users do not expect code to be staged into runner-managed locations.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
Without declared permissions the skill's intent is opaque and cannot be validated.
The trigger list is broad enough to match common phrases like '看看', '最近', '这个月', and generic measurement terms, which can cause accidental invocation outside the user's intended context. For a skill that accesses sensitive health data and may initiate authentication, over-broad routing can leak private information into the wrong tool flow or prompt unnecessary login actions.
The login flow requires the exact Chinese fallback phrase “已完成扫码” as the continuation trigger, with no alternative language or user-choice mechanism. This creates a locale-specific requirement that may block or disadvantage users who are not operating in Chinese.
The tag list includes very generic trigger phrases such as “查询”, “查一下”, “看一下”, “统计”, “最近”, “趋势”, and “历史”, which can overlap with ordinary conversation unrelated to Keep health data. This can cause the skill to be selected too broadly, unnecessarily routing user requests involving sensitive health contexts or unrelated queries to an external MCP-backed skill endpoint.
The documentation recommends running npx -p @keepclaw/keep-query keep-query-unlink without a pinned version, which causes npm to fetch whatever package version is current at execution time. If the package is compromised, typo-squatted, or a malicious version is published, users could execute untrusted code during uninstall-related cleanup.
The description is written entirely in Chinese, which may impose a language-specific experience without indicating user opt-in or explaining that the skill is intended only for a Chinese-speaking locale. This can violate language/locale policy when no choice or justification is provided.
The skill explicitly instructs the agent to persist a Keep authentication token to ~/.keepai/.env, but it does not require a clear user-facing disclosure or consent before storing credentials on disk. For a health-data skill, silently retaining long-lived auth material increases privacy and account-compromise risk if the host is shared, backed up insecurely, or later accessed by other local processes.
The provided user-facing QR login template tells the user to scan and complete login but omits that doing so will persist their token locally for future automatic access. This undermines informed consent, especially because the skill accesses sensitive health information and the user may reasonably assume the login is temporary for the current session only.
This skill is explicitly designed to retrieve highly sensitive health, body, and lifestyle data such as weight, sleep, diet, and menstrual records, yet the guidance contains no user-facing privacy notice, sensitivity acknowledgment, or caution about displaying such data. In a health-data context, silent retrieval and presentation of sensitive information increases the risk of privacy harm, shoulder-surfing exposure, and user surprise, especially when the agent is asked to surface recent personal metrics without any disclosure or confirmation step.
The documented design explicitly recommends writing login tokens into ~/.keepai/.env for later reuse, but that capability is not justified by a simple health-data query skill. For a skill handling sensitive health data, unnecessary credential retention increases privacy and account-compromise risk if the host is shared, backed up insecurely, or inspected by other software.
The postinstall script performs network telemetry and filesystem deployment actions that are unrelated to the declared purpose of a health-data query skill. Running these behaviors automatically at install time expands the package's privilege surface, creates hidden side effects, and can expose users to tracking or unauthorized modification of local runner environments without explicit consent.
The install-time telemetry call sends package metadata to a remote service during installation, which is not necessary for a read/query health-data skill to function. Even if only version and source are sent, the behavior creates undisclosed outbound communication, enables user or environment tracking, and normalizes data collection from a package handling health-related workflows.
The script automatically copies the package into OpenClaw and Hermes skill directories on global install, forcibly overwriting managed directories and bundling dependencies to make execution self-contained. This is dangerous because it modifies other local execution environments without an explicit user action, creating persistence and a supply-chain foothold that exceeds the expectations for a simple health-data query capability.
The README says the package copies the full skill bundle into runner skill directories during installation. Self-deployment into agent execution paths broadens the package's persistence and execution surface beyond simple querying, which is risky if the package is tampered with or if users do not expect code to be staged into runner-managed locations.
This manifest describes the skill's purpose in broad natural language but does not specify how or when it should be invoked, nor any constraints or exclusions. For manifest files, that can create ambiguity around activation scope if the description is used for routing or discovery.
Using an unpinned dependency version ("*") creates a supply-chain risk: any newly published version of @keepclaw/skill-sdk could be installed automatically, including a compromised or malicious release. This is more dangerous in a health-data query skill because the dependency may gain access to sensitive user data flows, and the package also defines a postinstall script elsewhere in the manifest, increasing installation-time risk if the dependency tree is abused.
"registry": "https://registry.npmjs.org/"
},
"dependencies": {
"@keepclaw/skill-sdk": "*"
},
"files": [
"SKILL.md",
The file's human-readable comments are written in Chinese and do not offer any language choice or indicate that the locale is intentionally restricted. Under the policy for natural-language content, forcing a specific language without user opt-in is a locale/language policy violation.
No suspicious patterns detected.