Back to skill

Security audit

MediaSync-Claw

Security checks for vulnerabilities and agentic risk

Overview

This skill is a remote media server, but it automatically opens an unauthenticated public tunnel and runs a downloaded native binary, so it needs manual review before installation.

Install only if you deliberately want a local media server reachable from the public internet. Use an isolated machine or VM, put only non-sensitive media in the videos folder, avoid broad antivirus exceptions, verify frpc manually, and prefer adding authentication, HTTPS, locked dependencies, explicit opt-in for the tunnel, and rate limits before use.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
Findings (4)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
media_server_flask.py:51
Finding

Unauthenticated Public Enumeration and Download of Local Media

Content
View full analysis
0: for media_file in media_files: media_file_name = os.path.basename(media_file) # WebRTC player URL — browser opens this to start P2P streaming media_file_url = f"http://{frp_domain}/{media_file_name}" media_file_url_with_query = "videourl=" + media_file_url media_file_url_with_cs = f"&cks={generate_md5_checksum(media_file_url_with_query)}" aiplayer_url = f"https://yun-hub.chat/link/?app=aipollo&clickid=12345&dplink={quote(media_file_url_with_query + media_file_url_with_cs, safe='')}" txt += f"{media_file_name}: {aiplayer_url}\n" else: txt += "No media files found." return jsonify({"text": txt}), 200 except Exception as e: print(f"ERROR in handle_ ...[truncated 4938 chars]
Remediation
View remediation
`; do not rely only on the signaling connection. 5. Add expiration, audience, filename, and nonce claims to media grants. Use HMAC-SHA-256 or an authenticated token format rather than MD5. 6. Apply per-IP and per-account rate limits, maximum concurrent WebRTC sessions, stream timeouts, file-size limits, and bandwidth quotas. 7. Reject unauthenticated Socket.IO connections before allocating `RTCPeerConnection` resources. 8. Do not print complete media lists or public domains to logs unless debug logging is explicitly enabled. 9. Preserve the existing canonical-path and basename validation as defense in depth. ]]>

T03 · Remote Payload Retrieval and Execution

Error
Location
media_frp_util.py:78
Finding

Automatic Retrieval and Execution of a Native FRP Binary

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
media_server_flask.py:64
Finding

Media Metadata and Signaling Exposed Through Plaintext HTTP and Third-Party Services

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Unpinned Python Dependencies and Non-Reproducible Installation

Content
View full analysis
=3.1.3 requests>=2.32.4 jinja2>=3.1.6 aiortc aiofiles flask-socketio ``` The Skill metadata repeats the same unconstrained dependency model: ```yaml python: - "flask>=3.1.3" - "requests>=2.32.4" - "jinja2>=3.1.6" - "aiortc" - "aiofiles" - "flask-socketio" ``` No lockfile, complete transitive dependency resolution, package hashes, or signed provenance data is included. Consequently, installation at different times may retrieve materially different code than was evaluated during this audit. This is particularly significant because `aiortc`, Flask-SocketIO, and their transitive dependencies process attacker-accessible network data, while Python package installation may execute build-system code. No evidence was found that the listed package names are typosquatted or currently malicious; the confirmed defect is the absence of version and artifact integrity controls. ### Attack Path 1. A future package or transitive dependency release is compromised, malicious, or contains a remotely exploitable regression. 2. A user installs or reinstalls the skill after that release is selected by the package resolver. 3. Because broad ranges or no constraints are used, the resolver downloads the changed package. 4. Build or installation code may execute during installation, or the changed package is imported when the server starts. 5. Malicious package code then runs with the privileges of the OpenClaw environment, or an introduced network flaw becomes reachable through the public media server. ### Impact Assessment A compromised selected dependency could execute arbitrary Python or native code with the ...[truncated 418 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (41)

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The README instructs users to whitelist and trust a third-party executable while claiming it is 'absolutely safe and unmodified,' even though the skill's own behavior involves downloading and executing an external binary to create a reverse tunnel. This undermines security controls, discourages scrutiny of supply-chain risk, and may lead users to run unverified code with broad network exposure.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The README asserts that frpc.exe is 'absolutely safe and untampered' while describing download and execution of a third-party binary from GitHub without any documented integrity or authenticity verification. This creates a supply-chain and remote code execution risk because users may trust and run an unverified executable with elevated permissions and network access.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill advertises and documents behavior that materially expands exposure—automatic download and execution of a third-party binary, creation of a public reverse tunnel, and unauthenticated internet exposure of local services—while the observable artifact here is only the manifest/documentation. That mismatch is dangerous because it obscures real risk, impairs reviewer understanding, and can mislead users into installing a skill with far broader capabilities than its visible action surface suggests.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill advertises and documents behavior that materially expands exposure—automatic download and execution of a third-party binary, creation of a public reverse tunnel, and unauthenticated internet exposure of local services—while the observable artifact here is only the manifest/documentation. That mismatch is dangerous because it obscures real risk, impairs reviewer understanding, and can mislead users into installing a skill with far broader capabilities than its visible action surface suggests.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill advertises and documents behavior that materially expands exposure—automatic download and execution of a third-party binary, creation of a public reverse tunnel, and unauthenticated internet exposure of local services—while the observable artifact here is only the manifest/documentation. That mismatch is dangerous because it obscures real risk, impairs reviewer understanding, and can mislead users into installing a skill with far broader capabilities than its visible action surface suggests.

Content

No source excerpt is available for this finding.

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'shell' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The code automatically downloads, installs, executes, and persistently relaunches a third-party tunneling binary that creates an outbound reverse tunnel to external infrastructure. Even with checksum verification, this materially expands the host's attack surface and enables covert remote access patterns that are far riskier than ordinary media sync behavior.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

This code generates a config that exposes a local HTTP service on port 8000 through a publicly reachable yunfrp.net domain, effectively publishing a local service to the internet. In the stated skill context of remote file access and media streaming, this is especially dangerous because it can unintentionally expose sensitive local content or admin/debug interfaces beyond the intended media scope.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README describes triggering the skill through broad natural-language WhatsApp requests such as viewing, listing, searching, or playing local media, without defining strict command boundaries, authentication checks, or narrow invocation criteria. In the context of a skill that downloads and executes a tunneling binary and exposes local files and services to the public internet, this broad trigger surface materially increases the chance of unintended activation, prompt abuse, or remote misuse.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
78% confidence
Finding

This file is written as a German-language skill README and does not indicate any user-selectable language behavior or justified locale constraint within the skill itself. Under the policy, forcing a specific language without user opt-in can be a natural-language locale violation.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README minimizes data exposure by claiming that only HTTP control commands are transmitted and that no sensitive user data is sent, while elsewhere describing public internet reachability and direct P2P media streaming. This can mislead users about the real confidentiality and attack-surface implications, causing them to expose local content and services without informed consent.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The README instructs users to trust and whitelist a third-party executable while asserting it is 'completely safe and original' without any verifiable integrity controls such as signatures, pinned hashes, or reproducible provenance. In the context of a skill that downloads and executes FRPC and exposes local services to the public internet, this materially lowers user caution and increases supply-chain and remote-exposure risk.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

Claiming that downloading frpc.exe from official GitHub releases 'guarantees maximum supply-chain security' is misleading because official hosting alone does not eliminate compromise, account takeover, malicious release replacement, or dependency tampering risks. Given this skill's stated behavior of establishing reverse tunnels and enabling remote access, such language can cause unsafe execution of a powerful external binary without appropriate verification.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The README instructs users to trust and antivirus-whitelist an auto-downloaded executable while asserting it is unquestionably safe. That combination undermines normal security controls and creates a supply-chain execution risk if the download source, release artifact, or transport is compromised, especially because the binary is used to create an outbound reverse tunnel exposing local services.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The WhatsApp trigger examples are broad natural-language phrases that may overlap with ordinary conversation, increasing the chance of unintended skill activation. In this skill's context, accidental invocation is more dangerous than usual because activation can expose local media resources and initiate remote-access or streaming workflows over external connectivity.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The README downplays risk by claiming HTTP is only used for lightweight control and that no sensitive personal data is involved, while the skill explicitly enables remote access to local media/files through a public reverse tunnel and P2P streaming path. This can mislead users into underestimating exposure, especially since media libraries, filenames, metadata, and streamed content may itself be sensitive and traffic may be intercepted or abused if transmitted insecurely.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The advertised action scope is narrow—listing/searching local videos—but the documentation reveals substantially broader behavior, including public internet exposure and remote connectivity. This is dangerous because users and orchestrators may grant trust based on a benign-seeming tool purpose while the skill actually enables external access to local resources.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

Broad natural-language invocation guidance with no clear boundaries increases the chance the agent will trigger file enumeration or media-serving actions on ambiguous prompts. In a skill that may expose local content and operate with network/process privileges, vague trigger conditions raise the risk of unintended data access and unsafe autonomous behavior.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
97% confidence
Finding

The documentation explicitly states that the tunnel starts automatically on startup with no prompt, no confirmation, and no environment-variable gate. In context, that means a skill can autonomously download and run a binary and expose a local service to the public internet without an explicit user decision, substantially increasing the chance of accidental external exposure and unauthorized access.

Content

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

md
**This materially expands your attack surface.** Anyone who knows or discovers the public subdomain can attempt to access your media files and the Flask service running on your machine.

### 1. Automatic Tunnel Behavior (No User Opt-in)
* **Automatic on Startup**: The FRP tunnel starts automatically when `media_server_flask.py` runs. There is no prompt, no confirmation, and no environment-variable gate.
* **Binary Download**: On first run, the `frpc` binary (Windows: `frpc.exe`, macOS/Linux: `frpc`) is downloaded silently from GitHub (`fatedier/frp` releases). Internet access is required.
* **No Inbound Firewall Changes**: The tunnel is outbound-only; no inbound ports need to be opened on your firewall.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code fetches an executable from GitHub, verifies it, writes it to disk, and later runs it, but gives no clear up-front warning that native executable code will be installed locally. Although checksum validation reduces tampering risk, the silent installation of executable software is still a significant trust and safety issue.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill silently creates an FRP configuration and starts a public-facing tunnel without a meaningful user warning that a local service is being exposed externally. In this context, lack of informed consent is dangerous because users may not realize their local files or service on port 8000 can become reachable from the public internet.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · media_frp_util.py (reported line 216)May include surrounding context.

python
if not os.path.isfile(resolved_config):
            raise FileNotFoundError(f"FRP config not found: {resolved_config}")

        frp_process = subprocess.Popen(
            [frpc_path, '-c', resolved_config],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · media_frp_util.py (reported line 227)May include surrounding context.

python
if poll_result is not None:
                if stop_event and stop_event.is_set():
                    break
                frp_process = subprocess.Popen(
                    [frpc_path, '-c', resolved_config],
                    stdout=subprocess.PIPE,
                    stderr=subprocess.PIPE,

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This API returns a full listing of local media filenames and embeds FRP-backed public URLs without any authentication, warning, or user confirmation. Given the skill’s stated behavior—downloading a tunneling binary, exposing local services to the internet, and enabling remote file access—this materially increases the risk of sensitive local content being discovered and accessed by unauthorized parties.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The handler is mislabeled as a WhatsApp API endpoint but actually enumerates local media files and constructs publicly reachable playback links using the FRP-exposed domain. In the context of this skill, that behavior is security-relevant because it facilitates discovery and external sharing of local content through a reverse tunnel, reducing user awareness and making unintended data exposure more likely.

Content

No source excerpt is available for this finding.