Back to skill

Security audit

VideoDB Monitoring

Security checks for vulnerabilities and agentic risk

Overview

This is a real screen-recording skill, but it can start a detached background recorder that stores screen and audio with VideoDB without a clear per-task stop or consent workflow.

Install only if you intentionally want OpenClaw to record your screen and possible system audio through VideoDB. Before using it, confirm how to stop the monitor process, how VideoDB stores and deletes recordings, who can access generated stream/player URLs, and where the API key is stored. Avoid running it during password entry, private messages, meetings, regulated data, or confidential work unless you have clear consent and retention controls.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (2)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
monitor.ts:222
Finding

Detached monitor continuously captures and uploads screen and system audio beyond the requested task

Content
View full analysis
log(` - ${ch.type}: ${ch.channelId}`)); await client.startSession({ sessionId, channels: selected as any }); log("recording started"); return new Promise(() => {}); ``` The documented startup command launches the monitor as a detached background process: ```bash cd {baseDir} && nohup npx tsx monitor.ts > ~/.videodb/logs/monitor.log 2>&1 & disown && sleep 3 ``` ### Technical Analysis The monitor requests screen-capture and microphone permissions, selects the display and available system-audio channel, and enables storage for both channels. After `startSession()` succeeds, it returns a promise that never resolves, causing capture to continue until the process is externally terminated or receives a handled shutdown signal. The documented workflow describes recording as on-demand, but completion of a recording task only generates a stream URL. Stopping indexing does not stop the underlying capture session, and the skill does not provide a normal documented `stop-monitor` workflow after each task. Because the process is launched through `nohup`, placed in the background, and disowned, it can continue collecting unrelated activity after the original request is complete. This violates least-privilege and data-minimization principles: a request to record one task results in an open-ended ability to capture and remotely store subsequent screen and system-audio co ...[truncated 1393 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
monitor.ts:119
Finding

Unvalidated configured PID can cause termination of an unrelated user process

Content
View full analysis
0 ? pid : undefined; } function isProcessAlive(pid: number): boolean { try { process.kill(pid, 0); return true; } catch { return false; } } function sleep(ms: number): Promise { return new Promise((resolve) => setTimeout(resolve, ms)); } async function stopProcess(pid: number, label: string): Promise { if (pid === process.pid) return; if (!isProcessAlive(pid)) return; log(`Stopping ${label} ${pid} with SIGTERM`); try { process.kill(pid, "SIGTERM"); } catch (err: any) { log(`[warning] Could not SIGTERM ${label} ${pid}: ${err.message}`); return; } await sleep(2000); if (!isProcessAlive(pid)) { log(`${label} ${pid} stopped cleanly`); return; } log(`${label} ${pid} still running; sending SIGKILL`); try { process.kill(pid, "SIGKILL"); } catch (err: any) { log(`[warning] Could not SIGKILL ${label} ${pid}: ${err.message}`); return; } await sleep(500); } async function cleanupPreviousMonitor(): Promise { const existingMonitorPid = getConfiguredMonitorPid(); if (existingMonitorPid && existingMonitorPid !== process.pid) { await stopProcess(existingMonitorPid, "previous monitor"); } log("Resetting stale skill state before startup"); resetSkillState(); } ``` ### Technical Analysis The monitor reads `VIDEODB_MONITOR_PID` from mutable OpenClaw configuration and treats any positive integer as the PID of a previous monitor. The only validation is whether a process with that PID ...[truncated 2008 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Rogue AgentSelf-Modification, Session Persistence
Findings (76)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The top-level description advertises screen recording but does not clearly warn that use may capture sensitive on-screen data and microphone audio. For a surveillance-like capability, missing upfront disclosure can lead users to enable or invoke the skill without informed consent, increasing the chance of collecting credentials, personal data, messages, or confidential business information.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The 'How It Works' section describes indexing, transcript generation, and stream URL creation but does not explicitly warn that this processes user activity data through an external VideoDB service and may expose recordings via shareable URLs. In a skill that records the entire screen, that omission materially increases the danger because users may not realize data leaves the local machine or becomes retrievable by URL.

Content

No source excerpt is available for this finding.

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

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

Stale state after crash

Reset state manually:

bash
openclaw config set skills.entries.videodb-monitoring.env.VIDEODB_IS_RUNNING 'false'
openclaw config set skills.entries.videodb-monitoring.env.VIDEODB_CAPTURE_SESSION_ID ''

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill description focuses on recording/search/transcript retrieval, but the instructions also operationally control transcription, visual indexing, audio indexing, summaries, and monitor lifecycle. This mismatch widens effective capability beyond the advertised scope, making misuse or over-collection more likely in a privacy-sensitive context.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill description focuses on recording/search/transcript retrieval, but the instructions also operationally control transcription, visual indexing, audio indexing, summaries, and monitor lifecycle. This mismatch widens effective capability beyond the advertised scope, making misuse or over-collection more likely in a privacy-sensitive context.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill lacks a clear user-facing privacy warning despite enabling screen capture, audio capture, transcription, and indexing of user activity. In a monitoring skill, missing disclosure materially increases the risk of uninformed consent and collection of sensitive personal or enterprise data.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
96% confidence
Finding

The code writes arbitrary keys and values into skills.entries["videodb-monitoring"].env, and the same config structure is used to hold VIDEODB_API_KEY. This pattern centralizes credential material in a mutable plain-text config file and also logs the written values, creating a clear path for credential exposure through file access or log disclosure.

Content

Scanner excerpt · monitor.ts (reported line 84)May include surrounding context.

ts
config.skills ??= {};
    config.skills.entries ??= {};
    config.skills.entries["videodb-monitoring"] ??= {};
    config.skills.entries["videodb-monitoring"]!.env ??= {};
    config.skills.entries["videodb-monitoring"]!.env![key] = value;
    writeOpenClawConfig(config);
    log(`Config set: env.${key} = ${value}`);

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code reads a PID from persistent config and can send SIGTERM and then SIGKILL to that process. A writable config file means a local attacker or faulty component could redirect this logic to kill arbitrary user-owned processes, causing denial of service or disrupting security tools.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The advertised skill description says it generates stream URLs, searches recordings, and gets transcripts, but this file actively requests screen-capture and microphone permissions and starts a recording session. That mismatch is dangerous because it can mislead users and reviewers into granting a skill broad surveillance capability they did not expect.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The code requests screen-capture permission, optionally records system audio, and immediately starts a stored session, but there is no explicit in-skill warning describing what data will be captured, stored, and transmitted. In this skill context, that is especially dangerous because screen and audio capture can expose credentials, messages, documents, and other highly sensitive user data.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% 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 · README.md (reported line 16)May include surrounding context.

1. Copy Skill to OpenClaw

bash
mkdir -p ~/.openclaw/workspace/skills/videodb-monitoring
cp -r ./* ~/.openclaw/workspace/skills/videodb-monitoring/
cd ~/.openclaw/workspace/skills/videodb-monitoring
npm install

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The activation criteria are broad enough to match common requests such as asking what happened recently or asking for a recording, which could trigger screen recording or retrieval without sufficiently explicit user intent. Because this skill captures highly sensitive on-screen and audio content, accidental invocation materially increases privacy and data-exposure risk.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.