T06 · System Persistence
- Location
install.mjs:62- Finding
Persistent startup hook overwrites existing Agent boot instructions
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This repair skill has a plausible purpose, but it installs persistent silent automation, changes OpenClaw configuration, and can send diagnostics using the user’s AI credentials without enough control.
Review carefully before installing. Back up BOOT.md and openclaw.json first, and install only if you accept automatic startup execution, automatic configuration changes, model-account usage, and possible diagnostic data transmission to the configured provider endpoint.
install.mjs:62Persistent startup hook overwrites existing Agent boot instructions
check.mjs:167Shell command injection through untrusted diagnostic output
run.mjs:10Provider credential and diagnostic data sent to an unrestricted configured endpoint
check.mjs:23Background health check destructively rewrites the primary OpenClaw configuration
The stated purpose is an OpenClaw health-check and auto-repair tool, but the implementation is actually a generic prompt relay that forwards arbitrary user input to the configured LLM provider using the user's existing credentials. This mismatch is dangerous because it hides broad model-access capability behind a benign-sounding repair-tool description, increasing the chance users will authorize or run it without realizing it can exfiltrate prompts and consume their paid API access.
The skill explicitly states it will automatically check and repair issues after restart, but the documentation does not clearly disclose that this may modify OpenClaw configuration or runtime state. Silent or poorly disclosed automatic changes can lead users to authorize behavior they do not fully understand, increasing the risk of unintended configuration drift, service disruption, or unsafe repairs.
The script automatically rewrites the user's ~/.openclaw/openclaw.json in autoFixConfig() and persists changes with writeFileSync() without prompting, previewing diffs, or creating a backup. Even if the fixes are well-intentioned, silent mutation of security- and connectivity-related configuration can break service, weaken policy settings, or overwrite user intent, especially in an upgrade-repair tool that users may run with trust.
The script constructs a problemReport containing diagnostic output, version info, status output, issue details, and the local configuration file path, then forwards it to another script advertised as contacting Claude AI for analysis. This can disclose sensitive operational metadata or secrets embedded in status/error output without informed consent or redaction, and the skill context explicitly says unknown issues are sent to an AI, which increases the likelihood of external transmission.
The installer modifies startup behavior by writing a BOOT.md workflow that automatically executes shell commands and a skill script on every gateway start after version changes. This exceeds a simple file-copy install and creates persistent command-executing automation, which is risky because future changes to the installed skill or environment can cause code to run without fresh user approval.
The script unconditionally overwrites BOOT.md with new startup instructions, changing global agent behavior without preserving existing content or clearly warning the user. This can silently remove prior safeguards or custom startup logic and cause unexpected automated execution in a sensitive control plane file.
The installer both enables the boot-md hook and configures silent automatic execution ('NO_REPLY') without a clear safety notice or user consent. This reduces transparency and establishes persistence, making it easier for unexpected or unsafe behavior to occur unnoticed on future starts.
The script exposes a general-purpose LLM invocation interface by accepting arbitrary command-line text and sending it directly to the configured provider. In the context of a supposed repair utility, that capability is unnecessary and expands the tool into a covert wrapper around the user's API account, enabling unauthorized usage, hidden data transfer, and abuse of provider billing.
The code silently reads API credentials from the user's local OpenClaw configuration file without any up-front disclosure or consent prompt. Even if the file access is local, this is risky because users invoking a repair skill would not reasonably expect their provider credentials to be harvested and reused by a generic script.
The script sends the user's task outbound and authenticates the request with the user's API key, yet gives no user-facing warning that data will leave the machine or that their account will be charged. In this skill context, that omission is more dangerous because the manifest frames the tool as a local repair utility, so users are less likely to anticipate remote transmission of potentially sensitive operational details.
Natural-language policy checks apply to all file types. The file consistently forces a specific language for description and user instructions, and there is no indication that users can opt into another language or that the skill is intentionally limited to a Chinese-speaking audience for a documented reason.
User-facing comments and console output consistently assume Chinese as the interaction language, and the repair prompt sent to CC is also hardcoded in Chinese. There is no indication that users may choose another language or locale, which can violate language-choice policy absent justification.
The file's human-readable title and usage instructions are presented in Chinese only, and the script's console messages are likewise Chinese-only. This can constitute a language policy violation when a skill imposes a specific language without user opt-in or documented locale scoping.
The embedded instruction '不需要回复用户,静默完成即可(NO_REPLY)' directs the system to hide the automated action from the user. This is a natural-language behavior directive that reduces transparency and can conflict with policies requiring user awareness of automated actions.
All visible usage and error messages in the script are written in Chinese, and there is no option for the user to select another language. This can violate language or locale policy when no explicit opt-in or documented locale restriction is provided.