other
Warning
- Location
- README.md:31
- Finding
- Misleading Local-Processing Claim Conceals Cloud Disclosure<![CDATA[ ## Vulnerability Details **File Location**: `README.md:31`; `scripts/clip.py:181-188`; `scripts/clip.py:243-249`; `scripts/clip.py:282-286`; `scripts/clip.py:315-327` **Vulnerability Type**: Misleading Privacy Disclosure **Risk Level**: Medium The README states: ```markdown - **로컬 실행** — 영상 외부 서버에 올라가지 않음 ``` However, the implementation uploads extracted audio to OpenAI Whisper: ```python with open(audio_path, "rb") as f: response = client.audio.transcriptions.create( model="whisper-1", file=f, language=lang, response_format="verbose_json", timestamp_granularities=["segment", "word"], ) ``` Chunked files are also uploaded: ```python with open(chunk_path, "rb") as f: resp = client.audio.transcriptions.create( model="whisper-1", file=f, language=lang, response_format="verbose_json", timestamp_granularities=["segment"], ) ``` The complete transcript is assembled for use in prompts: ```python segments_text = "\n".join( f"[{fmt_time(s['start'])} → {fmt_time(s['end'])}] {s['text']}" for s in transcript["segments"] ) total_duration = transcript.get("duration", 0) ``` That prompt content is then sent to Anthropic: ```python response = client.messages.create( model="claude-haiku-4-5", max_tokens=max_tokens, messages=messages, ) ``` ### Technical Analysis The claim that the video does not go to an external server is technically narrow and materially misleading. Although the video container itself is not uploaded, its extracted audio contains substantially the same spoken information and is transmitted to OpenAI. The resulting full transcript is subsequently transmitted to Anthropic through multiple model requests. Users may interpret the documented “local execution” claim as meaning that private media content remains on their machine. The implementation does not provide a warning or explicit consent prompt before transmitting that cont ...[truncated 1602 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Replace the local-processing claim with a precise data-flow disclosure stating that: - Video processing and clipping occur locally. - Extracted audio is uploaded to OpenAI Whisper. - The resulting transcript is sent to Anthropic Claude. 2. Display an explicit confirmation prompt before the first cloud request, particularly for local files. 3. Add a noninteractive consent flag, such as `--allow-cloud-processing`, and fail closed when it is absent. 4. Document the external providers, transmitted fields, expected retention behavior, applicable privacy terms, and account-level data controls. 5. Offer local alternatives, such as a locally hosted Whisper implementation and a local language model. 6. Delete `audio.mp3` after successful transcription unless the user explicitly requests retention. 7. Add a cleanup path using `try/finally` so temporary audio and chunk files are removed after failures. 8. Provide a configurable data-retention option for transcripts and generated metadata. ]]>
