Back to skill

Security audit

Language Coach

Security checks for vulnerabilities and agentic risk

Overview

This is a straightforward language-correction skill with no runtime code, no requested permissions, and only minor installation and trigger-scope cautions.

Install from the ClawHub/OpenClaw package path when possible. If installing from GitHub, use a reviewed tag or commit and verify the source first. Use the explicit //en, //cn, //es, //fr, or //ja commands when you want correction behavior.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:27
Finding
Unpinned Remote Skill Installation Without Integrity Verification## Vulnerability Details **File Location**: `SKILL.md:27-36` **Additional Location**: `README.md:19-22` **Vulnerability Type**: `T08: Insecure Dependencies` **Risk Level**: Medium ### Vulnerable Code ```bash ### Option 2: From GitHub ```bash # Clone the repo git clone https://github.com/KaigeGao1110/language-coach.git ~/.openclaw/skills/language-coach # Or download directly curl -L https://github.com/KaigeGao1110/language-coach/archive/refs/heads/main.zip -o /tmp/language-coach.zip unzip /tmp/language-coach.zip -d ~/.openclaw/skills/ mv ~/.openclaw/skills/language-coach-main ~/.openclaw/skills/language-coach ``` ``` The README presents a similar unpinned installation method: ```bash # Via Git git clone https://github.com/KaigeGao1110/language-coach ~/.openclaw/workspace/skills/language-coach ``` ### Technical Analysis The documented installation procedures retrieve the current state of a mutable repository branch without pinning a reviewed commit or immutable release. Neither procedure verifies a cryptographic checksum or digital signature before placing the downloaded content into an Agent skills directory. The ZIP file is an archive rather than an executable binary, and the audited package contains no scripts or direct execution mechanism. The download URL also matches the homepage declared by the Skill, so the reviewed content does not establish typosquatting or intentional payload substitution. Nevertheless, installing mutable remote content means that the effective Skill loaded by a user may differ from the version that was audited. Use of `curl -L` additionally follows redirects without checking that the final destination remains on an expected host. If the repository, hosting account, release process, or redirect destination is compromised, an attacker could replace the Skill instructions or add new files before a subsequent installation. The optional remote installation workflow is not requi ...[truncated 1744 chars]
Remediation
## Remediation Suggestions 1. Replace references to the mutable default branch with an immutable, reviewed release tag and preferably a full commit hash. 2. Publish a SHA-256 checksum for each release archive and verify it before extraction: ```bash curl --fail --show-error --location \ https://github.com/KaigeGao1110/language-coach/archive/refs/tags/v2.0.2.zip \ -o /tmp/language-coach-v2.0.2.zip echo "<EXPECTED_SHA256> /tmp/language-coach-v2.0.2.zip" | sha256sum --check - ``` 3. Sign releases and verify the signature against a documented, trusted maintainer key. 4. When using Git, check out and verify a specific commit or signed tag rather than accepting the repository's current default branch. 5. Validate the final URL after redirects, or avoid unrestricted redirects, to ensure the download remains on an approved HTTPS host. 6. Download and extract into a newly created private temporary directory rather than directly into the active skills directory. 7. Inspect the extracted archive for unexpected paths and reject symbolic links, absolute paths, and path-traversal entries before installation. 8. Install atomically only after integrity and content validation succeeds. 9. Keep the version declarations consistent: `SKILL.md` declares version `2.0.2`, while the README badge identifies `2.0.0`.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (7)

External Transmission

Medium
Category
Data Exfiltration
Content
git clone https://github.com/KaigeGao1110/language-coach.git ~/.openclaw/skills/language-coach

# Or download directly
curl -L https://github.com/KaigeGao1110/language-coach/archive/refs/heads/main.zip -o /tmp/language-coach.zip
unzip /tmp/language-coach.zip -d ~/.openclaw/skills/
mv ~/.openclaw/skills/language-coach-main ~/.openclaw/skills/language-coach
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The alternative trigger phrase "check my [language]:" / "review this [language]:" is broad natural-language activation that can overlap with ordinary conversation. That can cause unintended skill invocation and processing of user text when the user did not explicitly intend to activate the coaching behavior, which is especially risky in a conversational environment where prompts may quote or discuss those phrases.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The description and instructions require the skill to review Chinese text and respond in Chinese, which imposes a specific language/locale behavior. Under the policy, forcing a language without user opt-in is a natural-language policy violation unless the locale restriction is clearly documented and justified as region-specific.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
The file explicitly instructs the skill to 'Explica en español' and all subsequent guidance is written to constrain output to Spanish. This is a natural-language locale policy issue because the skill does not offer opt-in or a language choice, and the constraint is not justified as a region-specific requirement.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
The description and instructions require the assistant to explain concisely in Japanese, which imposes a specific language/locale behavior. The file does not offer an opt-in choice or document a justification that this is a region-specific or language-specific compliance tool.

Natural-Language Policy Violations

Low
Confidence
93% confidence
Finding
The description and instructions explicitly require explanations and corrections to be provided in English. This imposes a language choice on the user without any opt-in or alternative, which matches the locale/language policy violation criteria.

Natural-Language Policy Violations

Low
Confidence
96% confidence
Finding
The description and instructions explicitly require responses and explanations in French ("Explique en français" / "Why: [explication brève en français]") without offering the user a language choice. This is a natural-language locale policy issue because it forces a specific language by default rather than making it optional or clearly documenting a justified regional constraint.

Static analysis

No suspicious patterns detected.