T09 · Insecure Skill Coding Practices
- Location
setup.js:31- Finding
Command Injection Through the YUKETANG_SECRET Environment Variable
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly matches a Rain Classroom MCP setup and teaching-data helper, but its installer performs an undisclosed silent reporting call and handles credentials/local configuration in ways users should review first.
Install only if you trust this Rain Classroom MCP endpoint and are comfortable giving it your YUKETANG_SECRET. Treat the secret like a password, avoid pasting it into shared logs or shell history, and review setup.sh before use because it silently reports an install event; prefer a safer installer that avoids shell interpolation and makes telemetry opt-in.
setup.js:31Command Injection Through the YUKETANG_SECRET Environment Variable
setup.js:35Runtime Download and Execution of an Unverified npm Package
setup.sh:102Undisclosed Silent Installation Telemetry
The declared purpose presents the skill as a data-query helper, but the instructions also cover secret handling, environment-variable management, local MCP registration, command execution, and immediate validation. This mismatch can mislead users and higher-level policy systems about the real privileges and side effects, increasing the chance of unintended local modification or secret exposure.
The skill uses sensitive local capabilities around environment variables (YUKETANG_SECRET) but does not declare any explicit tool scope or permission boundary. That creates an authorization gap where an agent may read or influence secrets/configuration without the user seeing a clear capability declaration, which is especially risky because the skill also instructs local setup and verification flows.
The skill instructs users to place a personal secret in environment variables but provides no warning that this is sensitive credential material or that shell history, logs, screenshots, process inheritance, or shared environments may expose it. In a skill that relies on local setup and agent-mediated execution, omission of credential-safety guidance raises the risk of accidental disclosure or misuse.
The skill directs the agent to directly update the user's environment variable after receiving the secret, without clear consent, scoping, or warning about modifying local configuration. This creates a high-risk path for persistent local changes involving credentials, potentially overwriting existing settings, leaking secrets into profiles/config files, or normalizing unsafe secret-handling by the agent.
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 documentation exposes cube_lesson_reservation, which performs a state-changing scheduling action, while the skill description says it provides account and class query services. This scope mismatch can mislead an agent into invoking a write-capable tool in contexts where only read-only behavior is expected, increasing the risk of unauthorized or unintended class creation or modification.
Comments and all user-facing console messages are written in Chinese, and the final usage example instructs the user to speak in Chinese. This imposes a language expectation without any opt-in or explanation that the skill is intentionally Chinese-only for a specific audience.
The script reads a secret from an environment variable and interpolates it directly into a shell command passed to execSync. This can expose the credential through process listings, shell history/logging, CI logs, or shell metacharacter injection if the secret contains unexpected characters, making the setup flow riskier than necessary.
This shell script reads the sensitive YUKETANG_SECRET environment variable and injects it into an Authorization header for the mcporter registration call. Although the script logs setup progress, it does not explicitly disclose to the user that their secret will be sent to a remote MCP endpoint during registration.
The script performs an additional install-time reporting action (claw_report) that is not necessary for configuring the advertised query service and is executed silently with all output suppressed. Undisclosed telemetry during setup violates user expectations, creates unnecessary outbound communication, and can become a privacy/security issue if the receiving service logs identifiers, timing, or other metadata.
The code includes a silent telemetry capability unrelated to the stated purpose of providing Yuketang account/class queries. Because it is hidden behind /dev/null 2>&1 || true, users receive no indication that installation metadata is being transmitted, which increases the risk of covert tracking and weakens informed consent.
The script makes a silent network reporting call during installation without any user-facing disclosure, and suppresses all output and failures. In a setup script for a classroom query skill, hidden outbound telemetry is not justified by core functionality and may expose usage metadata or facilitate tracking without consent.
This line forces a specific locale/timezone rule for all users by interpreting dates relative to Beijing time. That is a language/locale policy concern because it does not offer user choice or clearly limit the skill to a region-specific context in this instruction.
This markdown file presents all user-facing instructions, examples, and prompts exclusively in Chinese, including required interaction text. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation unless the locale constraint is clearly documented and justified.
The script invokes an external package through execSync and npx, which executes code and modifies project-scoped configuration. Although the script's purpose is setup, there is no explicit warning that it will run external tooling and change local MCP config, beyond success/failure logs after the fact.