T09 · Insecure Skill Coding Practices
- Location
SKILL.md:18- Finding
Hardcoded Privileged Credentials and Service Secrets
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill appears to be a remote OpenClaw deployment guide, but it publishes live-looking root credentials and service secrets with broad remote-control configuration.
Do not install or publish this skill as-is. Treat the SSH password, gateway token, model API key, Tavily key, and Feishu secret as compromised and rotate them first. Replace real secrets with placeholders, disable root password login, restrict gateway binding/origins, pin packages and container images, and add explicit warnings or confirmations around destructive admin commands.
SKILL.md:18Hardcoded Privileged Credentials and Service Secrets
remote_config.json:42LAN-Exposed Gateway Permits Requests from Arbitrary Browser Origins
SKILL.md:47Unpinned npm Packages Are Installed and Executed in the Runtime Container
SKILL.md:133Mutable Latest Container Image Is Deployed with Sensitive Persistent Mounts
The document exposes live-looking SSH credentials, a gateway token, and an API key directly in the skill. Anyone with access to the skill can use these secrets to access the remote server, gateway, and model provider account, enabling unauthorized administration, data exposure, service abuse, and lateral movement.
The skill instructs execution of a destructive shell command that deletes pairing state inside the container. In the context of a remote admin skill with hardcoded root access, this increases risk because operators or automated agents could reset trust relationships without sufficient safeguards, disrupting access control and potentially enabling re-pairing abuse.
# 清除旧配对(谨慎使用)
docker exec openclaw sh -c 'rm -f /home/node/.openclaw/devices.json'
docker restart openclaw
The document directly embeds a live public IP, root username, plaintext SSH password, and a gateway token. Exposing active credentials in documentation enables unauthorized access to infrastructure and browser-control services, and the skill context makes this more dangerous because it gives an attacker everything needed to authenticate and operate the environment immediately.
These instructions enable remote root administration over SSH, including package installation inside a container, process execution, and service management. In context, this is especially dangerous because the same document also exposes the credentials needed to perform those actions, turning the guide into an actionable path for full remote control.
The file is presented as a skill document, but it operationalizes full remote administration: package installation, detached process startup, Docker lifecycle management, remote file sync, and deletion of pairing state. With no manifest-defined purpose or scope boundaries, these capabilities are broader than can be justified from an unknown-purpose skill context.
The skill instructs use of npx @openclaw/browser-relay without pinning an exact package version. This creates a supply-chain risk because a future malicious or compromised package release could be fetched and executed on the remote server with elevated privileges.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
ssh root@47.115.54.84
# 2. 创建配置目录
mkdir -p /opt/openclaw/{config,workspace,memory,skills,logs}
# 3. 上传配置文件 (从本地)
scp ~/.openclaw/workspace/skills/aliyun_openclaw/remote_config.json root@47.115.54.84:/opt/openclaw/config/openclaw.json
The deployment uses a mutable container reference ending in :latest, which static analysis summarized at the docker run -d line. Pulling or running mutable images allows unreviewed upstream changes to enter production, increasing the risk of compromised or breaking images being deployed to a root-managed remote host.
The documented commands stop and remove the container without an explicit warning immediately adjacent to the commands about service downtime and potential operational impact. In an automation-oriented skill, users may execute these commands quickly, causing avoidable interruption or accidental removal of a running service.
The command explicitly pulls openclaw:latest, a mutable tag. This exposes the environment to supply-chain compromise or unexpected behavior changes because the artifact retrieved in the future may differ from the one originally tested.
The skill documents deletion of devices.json, which irreversibly clears pairing state, but the warning is too minimal for a destructive action affecting authentication relationships. This can force re-pairing, disrupt connected clients, and potentially create opportunities for unintended or unauthorized re-enrollment workflows.
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.
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.
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.
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.
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.
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.
The guide instructs users to kill processes and restart the relay without warning about disruption, terminated sessions, or potential interference with other users. In an operational environment this can cause avoidable denial of service or accidental interruption, especially since the actions are performed remotely against a shared service.
The guide encourages screenshots, page interaction, and browser control without warning that page contents, authentication state, or personal data may be captured or manipulated. Because this skill is specifically about remote browser control, the omission is more dangerous than usual: it normalizes actions that can directly expose sensitive user information and active sessions.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
检查 SSH 隧道:
ps aux | grep "ssh.*18792"
curl -s -o /dev/null -w "%{http_code}" http://localhost:18792/
重新建立隧道:
The skill documentation is entirely written in Chinese and does not indicate any language choice or opt-in. Under the policy, forcing a specific language without user choice can be a natural-language policy violation unless the locale restriction is clearly documented and justified.
All headings, instructions, and user command examples are written exclusively in Chinese, including the chat prompts the user is expected to send. Because no language option, translation note, or documented locale constraint is provided, this can be a language/locale policy issue under the natural-language policy rule.
The config fixes the channel domain to "feishu", which implies a platform and locale-specific deployment context, but the file provides no indication that users can opt into or change that language/locale environment. Under the policy rule, locale-specific constraints should be optional or clearly documented and justified.
After reviewing the JSON manifest, there is no natural-language instruction, comment, or config value that forces a specific language or locale. Because SQP-3 is limited to natural-language policy violations such as forced language without opt-in, this file does not present a confident violation.
Detected: suspicious.exposed_secret_literal