T09 · Insecure Skill Coding Practices
- Location
scripts/transcribe_audio.py:16- Finding
Audio and video recordings are transmitted over unencrypted HTTP
- Content
View full analysis
Vulnerability Details
File Location:
scripts/transcribe_audio.py:16, 47-51, 113-117;scripts/transcribe_simple.py:11, 20-24;scripts/transcribe.sh:19-21
Vulnerability Type: Cleartext transmission of potentially sensitive media
Risk Level: HighVulnerable Code
scripts/transcribe_audio.py:16, 47-51, 113-117:python WHISPER_ENDPOINT = "http://192.168.0.11:8080/v1/audio"python response = requests.post( f"{WHISPER_ENDPOINT}/transcriptions", files=files, data=data )python response = requests.post( f"{WHISPER_ENDPOINT}/transcriptions", files=files, data=data )scripts/transcribe_simple.py:11, 20-24:python WHISPER_ENDPOINT = "http://192.168.0.11:8080/v1"python response = requests.post( f"{WHISPER_ENDPOINT}/transcriptions", files=files, data=data )scripts/transcribe.sh:19-21:bash curl -s -X POST "http://192.168.0.11:8080/v1/audio/transcriptions" \ -F "file=@$FILE" \ -F "model=whisper-small"Technical Analysis
All three transcription clients upload the complete user-selected recording to a fixed endpoint using plain HTTP. HTTP provides neither transport confidentiality nor authenticated message integrity.
An attacker positioned on the same network path, such as a compromised router, malicious wireless access point, hostile local-network host with suitable interception capabilities, or compromised intermediary, may observe the multipart upload. The attacker may consequently recover the complete recording. A suitably positioned active attacker may also alter the server response and cause the client to display a forged transcript.
The Python clients do not configure request timeouts either, but the principal confirmed security issue is the cleartext transport of potentially sensitive media and transcription results.
Attack Path
- A user invokes ...[truncated 1033 chars]
- Remediation
View remediation
Remediation Suggestions
- Replace the HTTP endpoint with an HTTPS endpoint protected by a certificate issued by a trusted internal or public certificate authority.
- Retain certificate verification in the Python
requestsclients and curl; do not useverify=False,-k, or--insecure. - For a private service, consider certificate or public-key pinning and mutual TLS where operationally appropriate.
- Make the endpoint configurable through a validated configuration source rather than embedding a network address throughout the scripts.
- Reject non-HTTPS endpoints unless the service is strictly bound to a trusted loopback or similarly protected local transport and the security consequences are documented.
- Inform users that recordings are uploaded to a transcription service before transmission.
- Add explicit connection and response timeouts, status validation with
response.raise_for_status(), and controlled error handling. - Apply equivalent transport protections consistently to both Python clients and the shell client.
