Back to skill

Security audit

FTTR Copilot

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its FTTR device-management purpose, but it needs Review because it can send a customer bearer token to any configured HTTP or HTTPS endpoint while exposing cloud device data and operations.

Install only if you trust the publisher and the FTTRAI token scope. Keep FTTRAI_RPC_URL on the official HTTPS endpoint unless you have separately verified a custom endpoint, because this skill will send the bearer token and request data there. Be aware that it can read customer-bound device details, alerts, topology, metrics, and raw backend responses, and it can update device aliases and issue the documented real-time information commands.

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

Error
Location
src/config.js:4
Finding

Bearer Token Exposure Through Arbitrary or Plaintext RPC Endpoints

Content
View full analysis
0) { const err = new Error(`缺少必要环境变量: ${missing.join(", ")}`); err.code = "missing_config"; throw err; } let parsedUrl; try { parsedUrl = new URL(baseUrl); } catch { const err = new Error("FTTRAI_RPC_URL 不是有效 URL"); err.code = "invalid_config"; throw err; } if (!["http:", "https:"].includes(parsedUrl.protocol)) { const err = new Error("FTTRAI_RPC_URL 只支持 http 或 https"); err.code = "invalid_config"; throw err; } ``` From `src/connect.js:8-25`: ```js async unary(procedure, body = {}) { const url = `${this.config.baseUrl}${procedure}`; let lastError; for (let attempt = 0; attempt <= this.config.maxRetries; attempt += 1) { const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), this.config.timeoutMs); try { const response = await fetch(url, { method: "POST", headers: { "Authorization": `Bearer ${this.config.token}`, "Content-Type": "application/json", "Accept": "application/json", }, body: JSON.stringify(body), signal: controller.signal, }); ``` ### Technical Analysis The configurable `FTTRAI_RPC_URL` accepts both HTTP and HTTPS URLs and does n ...[truncated 2965 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (25)

Tp4

High
Category
MCP Tool Poisoning
Confidence
89% confidence
Finding

The declared description emphasizes lookup, triage, diagnostics, and operations, but the documented toolset also includes a state-changing action, update_device_alias, without clearly signaling that the skill can modify remote device-related state. This mismatch can mislead users and reviewers into authorizing a skill they believe is read-only, increasing the risk of unintended changes in a customer environment.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description emphasizes lookup, triage, diagnostics, and operations, but the documented toolset also includes a state-changing action, update_device_alias, without clearly signaling that the skill can modify remote device-related state. This mismatch can mislead users and reviewers into authorizing a skill they believe is read-only, increasing the risk of unintended changes in a customer environment.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill declares access to environment variables and clearly depends on outbound network access to a cloud backend, but it does not declare any explicit tool scope such as permissions or allowed-tools. That weakens least-privilege controls and makes it harder for operators to understand or constrain what the skill can access, especially because it handles a bearer token and performs remote API calls.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The instruction "Keep answers in Chinese unless the user asks otherwise" imposes a specific language by default. This is a natural-language locale policy issue because it does not first offer the user a language choice or require explicit opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code includes user-facing natural-language strings in Chinese, such as the unknown-tool error and argument validation message, and the CLI help is entirely presented in Chinese/Chinese-context wording. Because the file provides no user opt-in, language selection, or documented regional justification, it creates a language/locale policy concern under the rule.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This code performs an HTTP POST using a bearer token and serializes the provided body for transmission, which may include user or system data. There is no confirmation prompt, user-facing log, or warning comment/docstring in this file explaining that data and credentials are sent over the network.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The string literals used for error messages are hard-coded in Chinese, which imposes a specific language regardless of user preference. The file does not offer language selection or document a justified locale restriction, so this is a natural-language policy issue.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The tool returns the full backend response in data.raw, which may expose more alert metadata than the formatted view intends, including device identifiers or other sensitive fields from the cloud-control API. In a device-management context, this increases data exposure risk because downstream consumers or logs may receive internal response contents without minimization or explicit disclosure.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The returned title, summary, suggestions, and error message are hardcoded in Chinese, which imposes a specific language on users without opt-in. This is a natural-language locale policy issue because the skill does not offer a language choice or explain that it is intentionally limited to a Chinese-speaking context.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

User-facing titles, summaries, and suggestions in this file are written exclusively in Chinese, indicating the skill is effectively constrained to a specific language. There is no evidence in this file that the user can choose the language or that the locale restriction is explicitly justified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This code issues a remote device command via ExecuteCMD and then polls for completion, but there is no visible confirmation, warning, or safety gating in this file before performing the action. In a cloud-control/network-operations skill, silently triggering commands against managed devices can cause unintended operational changes or create an abuse path if higher layers invoke this tool automatically from user input.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The file returns titles, summaries, suggestions, and error messages exclusively in Chinese, with no indication that the user can choose language or that the skill is intentionally limited to a Chinese locale. This is a natural-language policy concern because it enforces a specific language in user-visible output without opt-in or documented justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The function performs a state-changing cloud operation (UpdateDeviceAlias) directly from user-supplied input and returns success without any visible confirmation, warning, or secondary authorization step in this layer. In an agent skill context, this increases the risk of accidental or prompt-induced modification of customer device metadata, especially because the tool is explicitly intended for operational control of FTTR devices.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

This JavaScript file contains multiple user-facing titles, summaries, suggestions, examples, and error messages exclusively in Chinese. The policy for SQP-3 flags language/locale constraints when a skill forces a specific language without offering a user choice or documenting a justified regional limitation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The file returns user-facing titles, summaries, suggestions, and error strings exclusively in Chinese, for example at L014-L015 and elsewhere throughout the module. This imposes a specific language on users without any visible opt-in, selection mechanism, or justification that the skill is intended only for a Chinese-speaking environment.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file compares status labels against Chinese values like "在线" and "离线" and returns user-facing titles and summaries in Chinese. This creates a language/locale policy issue because the skill behavior is fixed to a specific language with no opt-in or documented regional justification in this file.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The assertions require summaries and titles in Chinese string literals such as "设备离线诊断", "缺少设备标识", and "排查离线", which indicates the skill behavior is fixed to a specific language. Under the stated policy, forcing a specific language without user opt-in or clear justification is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This JavaScript test file contains natural-language expectations that require Chinese output, such as the summary matching '1 个网关和 1 个下挂设备'. Under the policy, forcing a specific language without user opt-in is a locale policy violation, and the file does not indicate that the skill is region-specific or offers language selection.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The test asserts that missing station MAC errors must match the Chinese phrase 'sta_mac 不能为空', which enforces a single-language user-facing error. Because there is no indication of user opt-in or a justified locale restriction, this is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This markdown file includes example command arguments such as "客厅主网关" and other Chinese-language strings, which suggests a language-specific usage pattern. Because the document does not state that the skill is region-specific or that users may supply values in their preferred language, it may violate the language/locale policy requiring opt-in or justified constraints.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
98% confidence
Finding

The file contains user-facing error strings in Chinese only, such as at L13, L22, and L28. This imposes a specific language on users without offering a language choice or documenting that the skill is intentionally region-specific, which matches the locale-policy concern for natural-language content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The default error message uses the Chinese string "未知错误" with no indication that language selection is configurable or user-driven. This creates a locale policy issue because the skill emits a fixed language response instead of offering a language choice or documenting a justified locale constraint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This JavaScript test file includes a natural-language string literal that requires the unsupported event type error to match a Chinese-only message. That creates a locale-specific expectation in the skill behavior without offering language choice or documenting a justified regional constraint, which fits the language/locale policy violation category.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

This JavaScript test file contains a natural-language assertion for the fallback title "网络拓扑", which implies the skill behavior may force Chinese output. The policy for this audit flags language or locale constraints when a specific language is imposed without offering user choice or documenting a justified region-specific requirement.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This test file hard-codes Chinese titles, summaries, aliases, and validation messages such as "绑定设备列表", "没有绑定设备", and "不能超过 20 个字符", which indicates the skill behavior is expected to always respond in Chinese. Under the natural-language policy rule, forcing a specific language without offering a user choice or documenting a justified locale constraint is a policy concern.

Content

No source excerpt is available for this finding.