Back to skill

Security audit

kreadoai-skills

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly behaves like a legitimate KreadoAI API wrapper, but its credential handling and sensitive media workflows deserve review before installation.

Review this before installing if you will use real account credentials or sensitive media. Prefer KREADO_API_TOKEN from a controlled environment over --import-token, avoid entering tokens where they may be logged or visible, rotate any token previously pasted into shell history, and only submit text, photos, videos, or watermark-removal jobs that you are authorized to send to KreadoAI for processing.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/account.mjs:61
Finding
API Token Exposure Through Command-Line Arguments## Vulnerability Details **File Location**: `scripts/account.mjs:61-67` **Vulnerability Type**: API credential disclosure through process arguments and shell history **Risk Level**: Medium ### Vulnerable Code ```js if (args['import-token']) { const token = typeof args['import-token'] === 'string' ? args['import-token'] : ''; if (!token) { console.error('错误:--import-token 需要提供 Token 值'); process.exit(1); } const savePath = writeToken(token); ``` The insecure invocation method is also explicitly documented in `SKILL.md:59`: ```text | `--import-token <token>` | 直接保存 Token(无需交互)。 | ``` ### Technical Analysis The `--import-token` option requires the user to place a KreadoAI API token directly in the command line. Command-line arguments are not an appropriate secret-input channel because they may be: - Retained in shell history files. - Visible to local process-inspection utilities while the process is running. - Collected by process monitoring, audit, telemetry, or diagnostic systems. - Preserved in automation logs or command transcripts. The application subsequently masks the token in its own output, but this does not protect the original command line. The exposure is avoidable because the Skill already supports interactive credential entry and the `KREADO_API_TOKEN` environment variable. ### Attack Path 1. A user configures the Skill using the documented command form: ```bash node scripts/kreado.mjs account --import-token REAL_API_TOKEN ``` 2. The shell records the complete command, including the token, in its history, or a local process-monitoring utility captures the process arguments. 3. A local user, monitoring agent, support bundle, or log reader with access to that data retrieves the token. 4. The exposed token is reused against the KreadoAI API. 5. The attacker can perform operations authorized for the affected KreadoAI account until the token is revoke ...[truncated 534 chars]
Remediation
## Remediation Suggestions 1. Remove the `--import-token <token>` option and its examples from `SKILL.md` and command help. 2. Prefer hidden interactive entry that disables terminal echo. The current `readline.question` configuration visibly echoes input, so it should be replaced with a secret-input implementation. 3. For non-interactive use, accept the token through a protected file descriptor, standard input, operating-system credential store, or secret manager rather than a command-line value. 4. If file-based import is required, accept only a path to a permission-restricted secret file and validate its ownership and permissions before reading it. 5. Warn existing users to remove commands containing tokens from shell histories and automation logs, then rotate any token previously supplied through `--import-token`. 6. Continue storing the credential file with restrictive permissions and fail securely if those permissions cannot be applied.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (12)

Missing User Warnings

Medium
Confidence
88% confidence
Finding
This markdown file advertises '视频字幕/水印去除' as a capability but provides no user-facing warning about the potentially sensitive or integrity-impacting nature of modifying media content. Under the markdown-specific warning criterion, descriptions of behaviors that can affect user data or system integrity should disclose such effects.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill exposes workflows for uploading photos/videos for avatar cloning and performing subtitle/watermark removal, but it does not warn users about privacy, consent, ownership, or the potentially irreversible and policy-sensitive nature of those operations. In this context, omission is security-relevant because users may be induced to upload sensitive biometric media or remove provenance marks without understanding legal, ethical, or data-handling risks.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The user-facing description, help text, errors, and examples are presented entirely in Chinese, which imposes a specific language on users. The file does not offer any language selection or explain that the skill is intentionally limited to a Chinese-speaking audience or region-specific workflow.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This code presents all user-facing messages, prompts, and errors in Chinese, including credential setup instructions and interactive prompts. Because the file provides no opt-in, fallback language, or justification that the skill is intended only for Chinese-speaking users, it conflicts with the language/locale policy criteria.

Missing User Warnings

Medium
Confidence
85% confidence
Finding
This code performs outbound POST and GET requests to an external API and includes an API token in request headers, which is a safety-relevant network operation. While there are developer comments, there is no user-facing confirmation, warning, or disclosure in the code indicating that request bodies and credentials will be sent to a remote service.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The --synthesize flow accepts arbitrary text via --content and transmits it to the KreadoAI text-to-speech endpoint, but the help text only describes parameters and examples. There is no explicit warning that supplied text will be sent to an external service, which is relevant to user privacy and data handling.

Natural-Language Policy Violations

Low
Confidence
91% confidence
Finding
All user-facing instructions in the file are presented only in Chinese, with no indication that other languages are available or that Chinese is required for a justified region-specific purpose. This matches the locale/language policy concern for natural-language content that implicitly forces a language without user choice.

Natural-Language Policy Violations

Low
Confidence
91% confidence
Finding
This file presents the usage, subcommands, examples, and environment-variable guidance only in Chinese. Under the policy rule for language or locale constraints, forcing a specific language without user opt-in is a natural-language policy concern.

Natural-Language Policy Violations

Low
Confidence
83% confidence
Finding
This file uses Chinese-only natural-language text in comments and CLI error/output strings, including setup instructions and status messages. Under the policy, forcing a specific language without user opt-in can be a locale policy violation when no alternative language choice or justification is provided.

Natural-Language Policy Violations

Low
Confidence
92% confidence
Finding
All user-visible strings and comments describing operation are in Chinese, including runtime error messages such as network and API errors, with no indication that the user can choose another language. This may violate a language/locale policy when the skill is used in broader contexts without explicit user opt-in.

Natural-Language Policy Violations

Low
Confidence
89% confidence
Finding
The CLI help, usage instructions, parameter descriptions, and completion message are all presented only in Chinese. This imposes a specific language on users without any visible opt-in, fallback, or explanation that the tool is intended solely for a Chinese-speaking audience.

Natural-Language Policy Violations

Low
Confidence
97% confidence
Finding
This code file contains natural-language help and status messages entirely in Chinese, including the primary CLI usage instructions. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is clearly documented and justified, which is not present here.

Static analysis

No suspicious patterns detected.