T05 · Unauthorized Access and Privilege Escalation
- 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
