Back to skill

Security audit

code-to-video-previz

Security checks for vulnerabilities and agentic risk

Overview

ClawScan rates this skill suspicious because its preview server may expose scene files to network clients, and it also flags privacy, installation, and incomplete-analysis concerns.

Consider the scene-file exposure and whether you are comfortable with the preview server’s network access. Before using features that send footage or other materials to model providers, check what will be shared and whether that sharing is approved. Review the install command and note that analysis was partial for two scripts; the suspicious verdict does not establish malicious intent.

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

Warning
Location
scripts/stage_three.ts
Finding

Local preview exposes scene-directory files to network clients

Content
View full analysis

Impact

A reachable client can download staging.json, revealing unpublished scene geometry, camera paths and shot timing, and can retrieve other known readable files located in the same directory. Directory listing or traversal outside that directory is not required for this finding.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (13)

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `scripts/stage_three.ts`, `stage_three.html`, `cdp.ts` | three.js renderer (Bun, Chrome, ffmpeg) |

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `scripts/stage_three.ts`, `stage_three.html`, `cdp.ts` | three.js renderer (Bun, Chrome, ffmpeg) |

MCP server referenced without pinned version: 'npx skills'.

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

Although this is an installation CLI rather than an MCP server, npx skills can download and execute an unpinned package version with the invoking user's privileges. A compromised future release could execute malicious code; this is a supply-chain exposure, not evidence that the current package is malicious.

Content

No source excerpt is available for this finding.

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, file_read, file_write, network, shell.

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

The workflow instructs the agent to submit reference video to a video model without warning that the material may be sent to a third-party provider.

Medium
Category
Output Handling
Confidence
91% confidence
Finding

The workflow recommends feeding reference footage directly to a video model without an explicit privacy checkpoint for third-party processing. Confidential footage or identifiable people could therefore be disclosed; approval of generation costs does not necessarily constitute approval of that disclosure.

Content

No source excerpt is available for this finding.

The LLM-judging workflow lacks a warning about sharing briefs, references, and frames with model providers.

Medium
Category
Output Handling
Confidence
88% confidence
Finding

The judging recipe directs users to supply briefs, references, and frames to multiple model families without checking whether those providers are authorized recipients. Removing author labels and randomizing filenames reduces judging bias but does not remove confidential content from the material.

Content

No source excerpt is available for this finding.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

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 · scripts/compare.py (reported line 21)May include surrounding context.

python
a.add_argument("--start", type=float, default=None)
a.add_argument("--end", type=float, default=None)
a = a.parse_args()
probe = subprocess.run(["ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries", "stream=width,height",
                        "-of", "csv=p=0", a.reference], capture_output=True, text=True, check=True).stdout
w, h = probe.strip().split(",")[:2]
base = f"[0:v]format=rgb24,setsar=1[a];[1:v]scale={w}:{h},format=rgb24,setsar=1[b];"

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 · scripts/compare.py (reported line 31)May include surrounding context.

python
# yuv420p needs even dimensions
    f = base + chain + ",scale=trunc(iw/2)*2:trunc(ih/2)*2,format=rgb24"
    win = ([] if a.start is None else ["-ss", str(a.start)]) + ([] if a.end is None else ["-to", str(a.end)])
    subprocess.run(["ffmpeg", "-v", "error", "-y", *win, "-i", a.reference, "-i", a.render, "-filter_complex", f + ",setpts=N/FRAME_RATE/TB" if a.video else f, *tail, "-shortest",
                    f"{a.out}_{name}.{ext}"], check=True)
    print(f"{a.out}_{name}.{ext}")

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 · scripts/grid.py (reported line 26)May include surrounding context.

python
vf = (f"{crop}scale={a.width}:-2,format=rgb24,"
      f"drawgrid=w=iw*{a.step}:h=ih*{a.step}:t=1:c=white@0.55,"
      "drawbox=x=iw/2-1:y=0:w=2:h=ih:c=red@0.8:t=fill,drawbox=x=0:y=ih/2-1:w=iw:h=2:c=red@0.8:t=fill")
subprocess.run(["ffmpeg", "-v", "error", "-y", "-i", a.image, "-vf", vf, "-frames:v", "1", a.out], check=True)
print(a.out, "grid: 0.1 steps, red = 0.5")

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 · scripts/measure_shot.py (reported line 45)May include surrounding context.

python
if a.end:
            cmd += ["-t", str(a.end - a.start)]
        cmd += ["-an", "-vf", "scale=640:-2", str(clip)]
        subprocess.run(cmd, check=True)
        cap = cv2.VideoCapture(str(clip))
        fps = cap.get(cv2.CAP_PROP_FPS) or 24
        ok, prev = cap.read()

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 · scripts/shots.py (reported line 17)May include surrounding context.

python
def run(cmd):
    return subprocess.run(cmd, capture_output=True, text=True)


def main():

The HTTP server exposes scene-directory files on all network interfaces without disclosing that exposure to the user.

Medium
Category
Output Handling
Confidence
98% confidence
Finding

The Bun server omits an explicit loopback hostname and serves requested files from the scene directory without authentication or a narrow asset allowlist. Network-reachable clients could retrieve confidential scene-directory files, while the printed localhost URL understates that exposure; live mode leaves the server running indefinitely.

Content

No source excerpt is available for this finding.