Back to skill

Security audit

SenseAudio Video Gen

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly does what it says, but it has overly broad network and credential handling that users should review before installing.

Install only if you are comfortable with this skill fetching websites, calling SenseAudio and LLM providers, reading configured API credentials, and writing generated project media to disk. Avoid private/internal URLs, use isolated browser profiles or cookie files only when necessary, and do not use custom LLM base URLs with stored AudioClaw credentials unless you trust the endpoint.

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

T09 · Insecure Skill Coding Practices

Error
Location
scripts/senseaudio_video_gen.py:1165
Finding

Arbitrary URL Fetching Enables Server-Side Request Forgery

Content
View full analysis
str: headers_map = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/537.36 SenseAudioVideoGen/1.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", } last_error: Exception | None = None for attempt in range(3): req = urllib.request.Request(url, headers=headers_map) try: with urllib.request.urlopen(req, timeout=timeout) as resp: raw = resp.read() charset = resp.headers.get_content_charset() or "utf-8" return raw.decode(charset, errors="replace") except (urllib.error.URLError, TimeoutError, OSError) as exc: last_error = exc if attempt < 2: time.sleep(0.6 * (attempt + 1)) curl = shutil.which("curl") if curl: try: result = subprocess.run( [ curl, "-L", "--silent", "--show-error", "--max-time", str(max(5, int(timeout))), "-A", headers_map["User-Agent"], url, ], text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True, ) if result.stdout.strip(): return result.stdout except (subprocess.CalledProcessError, OSError) as exc: last_error = exc raise SenseAudioError(f"fetch_url_text failed after retries: {last_error} ...[truncated 2639 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/senseaudio_video_gen.py:6097
Finding

Stored AudioClaw API Credential Can Be Forwarded to an Arbitrary Endpoint

Content
View full analysis
dict[str, str]: path = audioclaw_config_path() if not path.exists(): return { "provider": "audioclaw", "model_name": DEFAULT_AUDIOCLAW_LLM_MODEL, "model": DEFAULT_AUDIOCLAW_LLM_MODEL, "base_url": DEFAULT_AUDIOCLAW_LLM_BASE_URL, "api_key": "", "config_path": str(path), } try: config = json.loads(path.read_text(encoding="utf-8")) except json.JSONDecodeError as exc: raise SenseAudioError(f"AudioClaw config is not valid JSON: {path}") from exc models = config.get("model_list") if not isinstance(models, list) or not models: raise SenseAudioError(f"AudioClaw config has no model_list: {path}") default_name = str(config.get("agents", {}).get("defaults", {}).get("model_name") or "") wanted = model_name or default_name selected = None for item in models: if not isinstance(item, dict): continue if wanted and item.get("model_name") == wanted: selected = item break if selected is None: selected = next((item for item in models if isinstance(item, dict)), None) if not selected: raise SenseAudioError(f"AudioClaw config has no usable model entry: {path}") base_url = str(selected.get("api_base") or "").strip() model = str(selected.get("model") or selected.get("model_name") or "").strip() api_key = str(selected.get("api_key") or "").strip() if not base_url or not model or not api_key: raise SenseAudioError(f"AudioCla ...[truncated 4078 chars]
Remediation
View remediation
Vulnerability Patterns
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (104)

Tainted flow: 'url' from os.environ.get (line 9128, credential/environment) → urllib.request.urlopen (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/senseaudio_video_gen.py (reported line 1876)May include surrounding context.

python
errors: list[str] = []
    for url in github_readme_candidates(value):
        try:
            with urllib.request.urlopen(url, timeout=45) as resp:
                return resp.read().decode("utf-8", errors="replace"), url
        except Exception as exc:
            errors.append(str(exc)[:120])

YARA rule 'info_stealer': Information stealer patterns (credential harvesting, browser data theft) [malware]

High
Category
YARA Match
Confidence
75% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

Scanner excerpt · README.md (reported line 150)May include surrounding context.

odel `.

For sites where a clean browser sees a login wall, wrong region, consent overlay, or anti-bot interstitial, use a dedicated capture profile or exported cookies:

bash
python3 scripts/senseaudio_video_gen.py site-video \
  --url https://example.com/ \
  --project example-site-video \
  --browser-profile profiles/example-capture \
  --cookie-file cookies/example.json

Cookies can improve screenshot fidelity because Chrome sees the same region/session state as a real visitor. Keep this explicit: clean capture is still the default so videos do not accidentally include personalized or private account content.

Use --offline --no-render to create the same editable project and pipeline report without live SenseAudio calls or frame rendering.

bash
export SENSEAUDIO_API_KEY="..."
python3 scripts/senseaudio_video_gen.py compose \
  --project webpage-intro \
  --brief "Show the SenseAudio sound library and explain search, filters, voice clone, and one-click us

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared description promises a broad HTML-video authoring and repair pipeline with media generation and planning capabilities. The supplied code chunk is much narrower: it is a frontend playback/runtime helper that reads existing data attributes and optional JSON files, updates element visibility/transforms over time, renders active captions, and seeks media/timelines. While this supports an HTML-authored video experience, it does not implement the major declared capabilities such as creating videos from external inputs, inspecting or repairing projects, generating voiceover/music/images/video, or using the named media APIs/LLM planner. Therefore the description materially overstates and misrepresents the actual behavior of this code chunk.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/senseaudio_video_gen.py compose \