T05 · Unauthorized Access and Privilege Escalation
- Location
src/cli.ts:246- Finding
Undocumented RTSP Audio Capture Uploads Sensitive Audio by Default
- Content
View full analysis
] [--duration 15] [--no-classify]', '', 'Capture audio from an RTSP camera and (by default) classify it.', '', 'Flags:', ` ${pad('--rtsp ', 24)}RTSP source URL (or set LISTEN_RTSP_URL).`, ` ${pad('--duration ', 24)}Capture length in seconds (default 15).`, ` ${pad('--no-classify', 24)}Capture only, do not submit for classification.`, '', 'Examples:', ' h-ear capture --duration 30', ' LISTEN_RTSP_URL=rtsp://cam:554/stream h-ear capture', ].join('\n')); return; } const rtspUrl = parsed.parsed.flags.rtsp ?? process.env.LISTEN_RTSP_URL; if (!rtspUrl) { console.error('Error: RTSP URL required. Pass --rtsp or set LISTEN_RTSP_URL'); process.exit(1); } const duration = parseInt(parsed.parsed.flags.duration ?? '15', 10); const classifyAfter = !parsed.parsed.bools['no-classify']; console.error(` Capturing ${duration}s audio from ${rtspUrl}...`); const { buffer, fileName } = captureAudio(rtspUrl, duration); console.error(` Captured ${(buffer.length / 1024).toFixed(0)} KB`); if (classifyAfter) { const { client } = createSkill(); const tmpFile = join(tmpdir(), 'h-ear-listen', fileName); writeFileSync(tmpFile, buffer); try { console.log(await classifyFileCommand( client, tmpFile, { threshold: 0.3 ...[truncated 2867 chars]- Remediation
View remediation
