Back to skill

Security audit

JoyIn Robot Control

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent JoyIn robot-control skill, but it can move a physical robot, access camera/speech data, and change network or AI settings without enforced safety checks or strong secret protections.

Install only if you trust the publisher and can supervise the robot physically. Use limited JoyIn and LLM credentials, keep the API base on a trusted HTTPS JoyIn endpoint, avoid putting real WiFi passwords or API keys in command lines, get consent before camera or speech-result access, and manually run preflight before any movement because the CLI will not enforce it.

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 (4)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/robot_cmd.py:35
Finding

Credentials Can Be Redirected to an Untrusted or Cleartext API Endpoint

Content
View full analysis
dict: return { "base_url": _env("JOYIN_API_BASE", "https://api-open-test.joyin-ai.com").rstrip("/"), "auth_key": _env("JOYIN_AUTH_KEY"), "device_sn": _env("JOYIN_DEVICE_SN"), "device_type_id": _env("JOYIN_DEVICE_TYPE_ID", "3"), } def _headers(cfg: dict) -> dict: return { "Content-Type": "application/json", "Authorization": cfg["auth_key"], "Device-Sn": cfg["device_sn"], "Device-Type-Id": str(cfg["device_type_id"]), } ``` The command-line override is applied without validation: ```python if args.base_url: cfg["base_url"] = args.base_url.rstrip("/") ``` ### Technical Analysis The API destination can be supplied through `JOYIN_API_BASE` or the global `--base-url` option. The implementation does not require HTTPS, validate the hostname, reject embedded credentials, or restrict the destination to an approved JoyIn domain. All API requests use `_headers()`, which attaches the JoyIn authorization key, device serial number, and device type identifier. Consequently, any command can disclose these values to the configured host. If an attacker can influence the environment or command arguments, authenticated requests can be redirected to an attacker-controlled server. A cleartext `http://` endpoint would also expose credentials and request contents to network observers. This behavior exceeds the minimum privilege necessary for robot control because the official functionality only requires communication with a trusted JoyIn API endpoint. There is no evidence that the default JoyIn URL is malicious, but the missing destination and transport controls create an exploitable credential-disclosure path. ### Attac ...[truncated 1108 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/robot_cmd.py:474
Finding

Sensitive Credentials Are Accepted Through Observable Command-Line Arguments

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/robot_cmd.py:323
Finding

Wi-Fi Password Is Only Base64-Encoded Before Network Transmission

Content
View full analysis
Remediation
View remediation

other

Warning
Location
scripts/robot_cmd.py:542
Finding

Documented Physical Safety Preflight Checks Are Not Enforced by the CLI

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • 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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (9)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill exposes meaningful capabilities via environment variables and networked robot control, but it does not declare any explicit tool scope such as permissions or allowed-tools. That weakens policy enforcement and increases the chance an agent can invoke networked actions or access secrets without clear least-privilege boundaries.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill includes live video streaming and ASR-related capabilities without an explicit privacy notice, consent requirement, or warning about capturing people, surroundings, or speech. In a robot-control context, these features can enable covert surveillance or unexpected collection/transmission of sensitive data if triggered casually by an agent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The WiFi and LLM configuration commands handle highly sensitive secrets such as wireless credentials and third-party API keys, but the skill does not warn against exposing them in command history, logs, or downstream services. Because these values may be transmitted to the robot vendor API or external model providers, accidental credential leakage could compromise networks or cloud accounts.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 270)May include surrounding context.

bash
# Register a custom LLM
python3 {baseDir}/scripts/robot_cmd.py llm_register --name "My GPT" --base-url "https://api.openai.com/v1" --api-key "sk-xxx" --model "gpt-4"

# List registered LLMs
python3 {baseDir}/scripts/robot_cmd.py llm_list

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The CLI exposes commands that directly cause physical movement and operational state changes, including remote control, arm/head motion, charging behavior, and emergency stop, without any built-in confirmation, safety interlock, or operator warning. In a robot-control context this is materially dangerous because accidental, scripted, or unauthorized invocation can cause physical harm, collisions, or equipment misuse.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The code can retrieve the robot's latest ASR result, which may contain sensitive user speech content, but this capability is not disclosed in the skill description. Undisclosed access to recognized speech is privacy-relevant because users may not expect a robot-control skill to expose conversation transcripts or recent utterances.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill implements WiFi SSID/password configuration but the advertised skill description does not disclose that it can change network settings or transmit WiFi credentials. This creates a consent and transparency problem: a user may invoke a seemingly robot-control skill without realizing it can alter connectivity or handle sensitive credentials, increasing the risk of unsafe or unauthorized reconfiguration.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill can transmit sensitive WiFi credentials and third-party LLM API keys to remote endpoints, yet there is no explicit disclosure or confirmation at invocation time. This is dangerous because users may unknowingly send highly sensitive secrets or alter the robot's network/AI backend configuration, leading to credential exposure, service hijacking, or persistent compromise of device behavior.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The TTS example and several command annotations are presented only in Chinese, and the skill does not indicate that language is configurable or user-selectable. Under the policy, forcing a specific language without user opt-in can be a locale/language policy violation.

Content

No source excerpt is available for this finding.