Back to skill

Security audit

xps-plex

Security checks for vulnerabilities and agentic risk

Overview

ClawScan rates this skill suspicious because scanners report browser actions that can disrupt unrelated sessions, delete saved session data, or display the wrong page; the scan is also incomplete.

Consider the risk of disrupted browser sessions, lost recoverable tabs, or personal content appearing on the projected display before installing. Skillspector inspected both listed components, but marked its analysis partial because a local path-like reference in SKILL.md could not be resolved, so the evidence is incomplete.

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/xps-plex.sh
Finding

Browser cleanup terminates unrelated browser sessions without a confirmation gate

Content
View full analysis

Impact

Unrelated browser sessions can be forcibly closed, interrupting downloads and active work and potentially losing unsaved in-memory content.

Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (8)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
95% confidence
Finding

The command really does delete session recovery files without a reset request, but its paths are scoped to the dedicated Firefox profile rather than arbitrary user files. This is the same bounded data-loss issue reported by SQP-2, not an additional independent tool-parameter-abuse vulnerability.

Content

Scanner excerpt · scripts/xps-plex.sh (reported line 221)May include surrounding context.

sh
user_pref("datareporting.policy.dataSubmissionEnabled", false);
user_pref("toolkit.telemetry.reportingpolicy.firstRun", false);
JS
rm -f "$PROF/sessionstore.jsonlz4" "$PROF"/sessionstore-backups/*
ff_windows() { hyprctl clients -j 2>/dev/null | jq '[.[] | select(.class|test("firefox"))] | length'; }
page_windows() { hyprctl clients -j 2>/dev/null | jq '[.[] | select(.class|test("firefox")) | select(.title|test("Plex"))] | length'; }
pid=$(pgrep -x firefox | head -1)

Opening a page can terminate unrelated browser sessions on the remote machine.

High
Category
Excessive Agency
Confidence
99% confidence
Finding

The restart paths call kill_stale, which terminates all same-named browser processes the SSH account can signal, rather than only the skill's browser instance. A routine request to display a page can therefore close unrelated browsing sessions and lose unsaved work; that destructive scope is not necessary for the advertised projection task.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
65% 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.

Content

Scanner excerpt · scripts/xps-plex.sh (reported line 75)May include surrounding context.

sh
fi
  kill_stale v2rayN 5
  kill_stale xray 4
  setsid sh -c "cd '$V2RAY_DIR' && exec ./v2rayN" >/tmp/v2rayN.log 2>&1 < /dev/null &
  for _ in $(seq 1 25); do
    sleep 1
    ss -ltn 2>/dev/null | grep -q '@PROXY_ADDR@' && { proxy_state=started; return 0; }

Session Persistence

Medium
Category
Rogue Agent
Confidence
65% 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.

Content

Scanner excerpt · scripts/xps-plex.sh (reported line 238)May include surrounding context.

sh
elif [ -n "$on_profile" ]; then action=clean
  else action=restart; fi
  kill_stale firefox 8
  setsid firefox --profile "$PROF" --new-instance >/tmp/firefox-plex.log 2>&1 < /dev/null &
fi
printf 'action\t%s\n' "$action"
wait_title firefox

Session Persistence

Medium
Category
Rogue Agent
Confidence
65% 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.

Content

Scanner excerpt · scripts/xps-plex.sh (reported line 254)May include surrounding context.

sh
action=reuse
else
  if [ -n "${pid:-}" ]; then action=restart; kill_stale brave 8; else action=start; fi
  setsid brave --ozone-platform=wayland --proxy-server='@PROXY@' \
    --no-first-run --no-default-browser-check --new-window '@URL@' \
    >/tmp/brave-plex.log 2>&1 < /dev/null &
fi

Opening Firefox silently deletes the dedicated profile's saved session and session backups.

Medium
Category
Output Handling
Confidence
96% confidence
Finding

Every Firefox open request deletes saved session state and all session backup entries before determining whether the existing browser can be reused. Although deletion is confined to the dedicated projection profile, it can still remove recoverable tabs or session state without the user requesting a reset.

Content

No source excerpt is available for this finding.

Browser reuse can leave the previous page displayed instead of opening the requested URL.

Medium
Category
Excessive Agency
Confidence
99% confidence
Finding

Neither reuse branch navigates to the requested URL: Firefox relies on a Plex title match, while Brave accepts any detected instance with a proxy-server argument. Because this skill controls a visible display and can fullscreen the reused browser, it can leave unrelated or sensitive content visible instead of the requested page.

Content

No source excerpt is available for this finding.

Brave does not use the dedicated proxy profile promised by the manifest.

Medium
Category
Excessive Agency
Confidence
99% confidence
Finding

Brave is launched without a dedicated user-data directory, despite the skill's promise of a dedicated proxy profile. This mixes the projection task with the account's ordinary browser state, potentially exposing personal tabs or authenticated sessions on the projected display and applying proxy routing to personal browsing.

Content

No source excerpt is available for this finding.