Back to skill

Security audit

向日葵远程控制

Security checks for vulnerabilities and agentic risk

Overview

The skill is a real remote-control integration, but it gives broad device-control power with weak local scoping, plaintext token configuration, and no confirmation layer for high-impact actions.

Install only if you trust the AweSun MCP server and intend to let the agent control authorized devices. Keep the API token out of shared workspaces and source control, pin the mcp dependency before installation, and require human review before command execution, desktop input, screenshots, port forwarding, shutdown, wake, or device removal.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (3)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
executor.py:76
Finding
Unrestricted Dispatch of MCP Tools Beyond the Declared Skill Interface<![CDATA[ ## Vulnerability Details **File Location**: `executor.py:76-77` and `executor.py:130-134` **Vulnerability Type**: Missing authorization and tool allowlist enforcement **Risk Level**: Medium ### Complete Code Snippet ```python async def call_tool(self, tool_name: str, arguments: dict): """Execute a tool call.""" if not self.session: await self.connect() response = await self.session.call_tool(tool_name, arguments) return response.content ``` ```python elif args.call: call_data = json.loads(args.call) result = await executor.call_tool( call_data["tool"], call_data.get("arguments", {}) ) ``` ### Technical Analysis The executor accepts an arbitrary tool name from the JSON supplied through `--call` and forwards it directly to the connected MCP server. It does not verify that the requested tool belongs to the 22-tool interface declared in `SKILL.md`. Consequently, the documented Skill interface is not an enforced security boundary. If the locally installed MCP server exposes additional tools—whether through a server update, configuration change, or another implementation at the configured executable path—those tools can be invoked through this executor. The executor also does not apply local confirmation or authorization controls to sensitive declared operations such as remote command execution, port forwarding, device shutdown, and remote desktop input. Although the MCP server may independently enforce access controls, no such guarantee is implemented by this project. ### Attack Path 1. An attacker influences an agent instruction or otherwise causes a crafted `--call` JSON value to be passed to `executor.py`. 2. The crafted value names an undeclared or unexpectedly privileged tool exposed by the installed MCP server. 3. `executor.py` parses the attacker-influenced tool name without checking it against an allowlist. 4. `MCPExecutor.call_tool()` forwards the name and arguments directly through `ses ...[truncated 971 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Define an explicit immutable allowlist containing only the tools documented and approved for this Skill. 2. Reject tool names not present in that allowlist before calling `session.call_tool()`. 3. Validate every arguments object against a locally maintained JSON Schema, including types, bounds, enumerations, and required fields. 4. Add mandatory interactive confirmation for high-impact operations, including: - Remote command execution - Port-forwarding changes - Device shutdown or removal - Clipboard and keyboard input - Remote desktop control 5. Consider separating read-only and state-changing capabilities into different execution modes. 6. Log the requested tool, target device or session, confirmation result, and outcome without recording credentials or sensitive command output. 7. Treat server-side authorization as defense in depth rather than a replacement for client-side least-privilege enforcement. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
mcp-config.json:4
Finding
AweSun API Token Is Intended to Be Stored in a Plaintext Skill Configuration File<![CDATA[ ## Vulnerability Details **File Location**: `mcp-config.json:4-7`, `README.md:42-45`, and `executor.py:27-31` **Vulnerability Type**: Plaintext sensitive credential storage **Risk Level**: Medium ### Complete Code Snippet From `mcp-config.json`: ```json "env": { "AWESUN_API_URL": "http://127.0.0.1:8908", "AWESUN_API_TOKEN": "your-mcp-server-token" } ``` From `executor.py`: ```python server_params = StdioServerParameters( command=self.server_config["command"], args=self.server_config.get("args", []), env=self.server_config.get("env") ) ``` The installation instructions direct the user to replace the placeholder in `mcp-config.json` with the actual `AWESUN_API_TOKEN`. ### Technical Analysis The distributed file contains only a placeholder, so no live credential is committed in the audited artifact. However, the documented configuration workflow instructs users to put the real AweSun MCP token directly into a plaintext file inside the Skill directory. The executor then reads that value and supplies it to the MCP child process as an environment variable. Skill directories may be copied into global agent directories or workspace-local directories. A workspace copy may subsequently be committed to source control, synchronized, archived, included in backups, or exposed to other local users through permissive file permissions. Any party able to read the resulting configuration file can recover the token. The use of the environment to pass the token to the child process is reasonable, but persisting the source value in a project configuration file creates unnecessary credential exposure. ### Attack Path 1. A user follows the README and replaces `your-mcp-server-token` with a valid token. 2. The modified `mcp-config.json` remains in a global Skill directory or is copied into a workspace. 3. The directory is accidentally committed, uploaded, backed up, synchronized, or read by another local account or process. 4. The attacker extracts ...[truncated 977 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the token field from the tracked Skill configuration. 2. Read `AWESUN_API_TOKEN` from the parent process environment at runtime rather than storing it in `mcp-config.json`. 3. Alternatively, retrieve the token from an operating-system credential manager or secret-management service. 4. Keep only non-sensitive settings, such as the executable path and local API URL, in the configuration file. 5. If file-based storage is unavoidable: - Store the secret outside the project and Skill directories. - Restrict permissions to the owning user. - Exclude the secret file from source control and backups. - Avoid copying it into workspace-local Skill installations. 6. Add a startup check that rejects the placeholder and provides secure configuration guidance without echoing the token. 7. Document token revocation and rotation procedures, and rotate any token suspected of having entered source control or shared storage. ]]>

T08 · Insecure Dependencies

Note
Location
package.json:5
Finding
Unpinned MCP Dependency Produces a Mutable and Unverified Installation<![CDATA[ ## Vulnerability Details **File Location**: `package.json:5-6` and `README.md:23-24` **Vulnerability Type**: Unpinned third-party dependency **Risk Level**: Low ### Complete Code Snippet From `package.json`: ```json "scripts": { "setup": "pip install mcp" } ``` From `README.md`: ```bash # Install the Python MCP dependency pip install mcp ``` ### Technical Analysis The installation command requests `mcp` without a version constraint or integrity hash. The version installed therefore depends on the package index and resolver state at installation time. This makes installations non-reproducible and allows future package releases to change the code executed by the Skill without changes to this repository. The audited evidence does not establish that the current `mcp` package is malicious. The vulnerability is the absence of dependency pinning and integrity verification. Risk increases when users have configured additional or untrusted Python package indexes, because the selected artifact may differ from the one reviewed by the project maintainers. The dependency is imported directly by `executor.py` and participates in starting a local process and exchanging MCP messages. A compromised dependency would execute Python code with the privileges of the user running the Skill. ### Attack Path 1. A user invokes `npm run setup` or manually runs the command from the README. 2. `pip` resolves `mcp` from the active package index configuration without a fixed version or hash. 3. A future compromised release, compromised index, or otherwise unsafe resolved artifact is downloaded. 4. The package is installed into the active Python environment. 5. When `executor.py` imports `mcp`, code from the installed package executes with the user's privileges. 6. A malicious package could access local files, credentials, agent data, or process execution capabilities available to that user. ### Impact Assessment A compromised dependency could execute arbitrary code wi ...[truncated 449 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin `mcp` to a specific version that has been reviewed and tested. 2. Generate and maintain a Python lock file using an appropriate dependency-management tool. 3. Require cryptographic hashes for downloaded artifacts, for example through a hash-locked requirements file and `pip --require-hashes`. 4. Use an explicitly approved HTTPS package index and disable untrusted supplemental indexes. 5. Test dependency updates separately and update the pin only after security review. 6. Run the Skill in an isolated virtual environment with minimum filesystem and network privileges. 7. Add automated dependency vulnerability and provenance checks to the release process. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (16)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The declared behavior is narrowly framed as Awesun remote-control operations, but the implementation reportedly supports generic MCP tool discovery and dynamic invocation from an external mcp-config.json. That creates a capability gap where the skill may execute arbitrary tools exposed by configured MCP servers, far beyond the user-visible description and expected trust boundary.

Missing User Warnings

High
Confidence
95% confidence
Finding
The skill documents remote command execution but does not warn that commands can immediately alter system state, destroy data, disable security controls, or establish persistence on the target. Given this is a remote-control skill, command execution is one of the most dangerous capabilities and should not be presented as routine without safeguards.

Skill Enumeration

Medium
Category
Agent Snooping
Content
cp -r awesun-remote-control ~/.claude/skills/

# 安装到指定workspace(特定项目生效),下面用 /your/path/of/workspace 为示例
mkdir -p /your/path/of/workspace/.claude/skills # 确保存在可跳过
cp -r awesun-remote-control /your/path/of/workspace/.claude/skills
```
Confidence
85% confidence
Finding
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Session Persistence

Medium
Category
Rogue Agent
Content
cp -r awesun-remote-control ~/.claude/skills/

# 安装到指定workspace(特定项目生效),下面用 /your/path/of/workspace 为示例
mkdir -p /your/path/of/workspace/.claude/skills # 确保存在可跳过
cp -r awesun-remote-control /your/path/of/workspace/.claude/skills
```
Confidence
60% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Session Persistence

Medium
Category
Rogue Agent
Content
cp -r awesun-remote-control ~/.claude/skills/

# 安装到指定workspace(特定项目生效),下面用 /your/path/of/workspace 为示例
mkdir -p /your/path/of/workspace/.claude/skills # 确保存在可跳过
cp -r awesun-remote-control /your/path/of/workspace/.claude/skills
```
Confidence
60% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
This skill enables remote desktop control, screenshots, command execution, and power management, yet the README does not prominently warn about privacy, consent, or system-impact risks. In a remote-control skill, missing safety guidance increases the chance of unsafe or unauthorized use, including surveillance of screens or disruptive control of endpoints.

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill exposes executable MCP-backed capabilities but does not declare a restrictive tool scope such as permissions or allowed-tools. That omission weakens least-privilege controls and makes it harder for a host or reviewer to verify what the skill is actually allowed to invoke, especially for a remote-control integration.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The skill advertises high-impact remote actions such as device removal, shutdown, wake, session control, and remote desktop manipulation without an explicit warning about operational or data-loss consequences. In a remote-control context, users may trigger destructive actions on real devices without appreciating the impact or confirming authorization.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
Documenting remote screenshot capture without a privacy warning understates the sensitivity of on-screen data such as credentials, personal information, or confidential business content. In a remote-admin skill, screenshot features materially increase surveillance and data-exposure risk if used improperly or unexpectedly.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
Mouse, keyboard, paste, and shortcut injection on a remote desktop can trigger installs, configuration changes, data deletion, or credential entry just as if a local user performed them. Without a warning about irreversible actions and authorization requirements, the documentation normalizes a highly sensitive capability in a way that can mislead users about risk.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The executor accepts arbitrary JSON input, selects any advertised MCP tool by name, and invokes it with caller-supplied arguments without any confirmation, allowlist, or policy enforcement. In the context of an awesun remote-control skill, this is especially dangerous because the available tools can plausibly perform remote desktop control, command execution, disconnection, and power operations, so a single call can trigger high-impact actions on managed devices.

Natural-Language Policy Violations

Low
Confidence
75% confidence
Finding
The README presents all operational instructions in Chinese and does not indicate any user language choice, opt-in, or documented reason that the skill is limited to Chinese-language usage. Per the policy criteria, forcing a specific language without user opt-in can be a natural-language policy violation.

Rp1

Low
Category
MCP Rug Pull
Confidence
60% confidence
Finding
pip install without ==version installs the latest release, which could include malicious changes.

Rp1

Low
Category
MCP Rug Pull
Confidence
60% confidence
Finding
pip install without ==version installs the latest release, which could include malicious changes.

Rp1

Low
Category
MCP Rug Pull
Confidence
60% confidence
Finding
pip install without ==version installs the latest release, which could include malicious changes.

Rp1

Low
Category
MCP Rug Pull
Confidence
95% confidence
Finding
The setup script installs the Python package 'mcp' without pinning a specific version, which makes builds non-reproducible and exposes consumers to unexpected upstream changes or a compromised future release. In a remote-control skill, dependency trust matters more because the installed package may participate in control-plane behavior or tool execution paths.

Static analysis

Detected: suspicious.install_untrusted_source

Install source points to URL shortener or raw IP.

Warn
Code
suspicious.install_untrusted_source
Location
mcp-config.json:5