Back to skill

Security audit

ClawVideo Generation

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward JSON2Video helper that sends user-chosen video content to the JSON2Video API, with no hidden persistence or unrelated local access found.

Install only if you are comfortable sending your video scripts, AI image prompts, voiceover text, public media URLs, and render metadata to JSON2Video and any upstream media or AI providers it uses. Keep JSON2VIDEO_API_KEY scoped to this service, avoid putting secrets or private/internal URLs in configs, and disable or adjust provider-side caching if your workflow requires tighter data retention controls.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (12)

Tainted flow: 'headers' from os.environ.get (line 51, credential/environment) → requests.post (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · scripts/generate_video.py (reported line 41)May include surrounding context.

python
"Content-Type": "application/json"
    }
    
    response = requests.post(url, headers=headers, json=payload)
    response.raise_for_status()
    return response.json()

Tainted flow: 'headers' from os.environ.get (line 51, credential/environment) → requests.get (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · scripts/generate_video.py (reported line 53)May include surrounding context.

python
headers = {"x-api-key": api_key}
    
    response = requests.get(url, headers=headers)
    response.raise_for_status()
    return response.json()

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/generate_video.py (reported line 21)May include surrounding context.

python
def get_api_key() -> str:
    """Get API key from environment variable."""
    api_key = os.environ.get("JSON2VIDEO_API_KEY")
    if not api_key:
        raise ValueError(

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill documents use of environment variables, local files, and outbound network access, but it does not declare any explicit tool scope or permissions boundary. In agent environments, this can cause overbroad execution authority, making it easier for the skill to read unintended files or use secrets and network access beyond what a user expects.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill sends user-provided prompts, voice text, and externally hosted media URLs to the JSON2Video service, but it does not clearly warn users that this content leaves the local environment. This creates privacy and data-handling risk, especially if users include sensitive scripts, internal URLs, or copyrighted/private media without realizing they are being transmitted to a third party.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · scripts/generate_video.py (reported line 17)May include surrounding context.

python
from pathlib import Path

# API Configuration
API_BASE = "https://api.json2video.com/v2"


def get_api_key() -> str:

External Transmission

Medium
Category
Data Exfiltration
Confidence
80% 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 · scripts/generate_video.py (reported line 41)May include surrounding context.

python
"Content-Type": "application/json"
    }
    
    response = requests.post(url, headers=headers, json=payload)
    response.raise_for_status()
    return response.json()

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The example sets voice_id to en-US-Neural2-F, which prescribes a specific language/locale in natural-language-facing behavior. The file does not indicate that users may choose another locale or that this US English setting is only an example, so it can be read as a default locale policy without opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

The examples and recommended voice formats focus on English locale voices such as en-US and en-GB, and the documentation does not mention that users may choose other languages/locales. This can be a natural-language policy issue when a skill appears to default to a specific language without opt-in or an explicit statement of flexibility.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The voice-building function sets the default language to "en", and related defaults elsewhere also assume English behavior. This can violate language/locale policy expectations because the skill imposes a specific language unless the caller explicitly overrides it.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The configuration hard-codes the voice to "en-US-EmmaMultilingualNeural", which imposes a specific language/locale choice in the skill content. There is no indication in this file that users can opt into another locale or that the U.S. English restriction is required for a region-specific purpose.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

This scene again fixes the voice to "en-US-EmmaMultilingualNeural", creating the same locale policy concern. Repeating the hard-coded locale across scenes reinforces that the skill does not appear to offer language choice or explain the restriction.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.