T09 · Insecure Skill Coding Practices
- Location
SKILL.md:251- Finding
Synthesized Audio Remains in Persistent Temporary Files
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly coherent for a voice assistant, but it handles sensitive voice and family-care actions without enough consent, confirmation, or data-retention controls.
Review this carefully before installing. It should require explicit setup for family contacts, inactivity monitoring, and message sending; read back messages before sending; disclose that voice recordings and generated speech text go to SenseAudio; and clean up temporary audio files after playback.
SKILL.md:251Synthesized Audio Remains in Persistent Temporary Files
SKILL.md:11Unpinned Third-Party Dependency Installation
The skill can send messages on the user's behalf based on speech interpretation, but there is no warning or confirmation requirement before communications are sent. Misrecognition or ambiguous intent could cause unauthorized messages to family contacts, creating privacy, social, or safety consequences.
The description advertises notifying children when the user is inactive, but provides no privacy notice, consent flow, or explanation of what information will be shared. For an elderly-focused assistant, silent escalation of behavioral data to family members can undermine privacy expectations and user autonomy.
The ASR API uploads raw voice recordings to an external service, which can contain highly sensitive personal, health, and family information. Because this assistant is designed for elderly users and supports message sending and care workflows, the transmitted audio may reveal especially private data and should be treated as sensitive.
curl https://api.senseaudio.cn/v1/audio/transcriptions \
-H "Authorization: Bearer $SENSEAUDIO_API_KEY" \
-F file="@recording.wav" \
-F model="sense-asr" \
The ASR API uploads raw voice recordings to an external service, which can contain highly sensitive personal, health, and family information. Because this assistant is designed for elderly users and supports message sending and care workflows, the transmitted audio may reveal especially private data and should be treated as sensitive.
curl https://api.senseaudio.cn/v1/audio/transcriptions \
-H "Authorization: Bearer $SENSEAUDIO_API_KEY" \
-F file="@recording.wav" \
-F model="sense-asr" \
The ASR example hard-codes language="zh", and the rest of the skill content and prompts assume Chinese-only interaction. This is a language-policy concern because the skill enforces a specific language/locale without documenting opt-in or offering a choice.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
curl -X POST https://api.senseaudio.cn/v1/t2a_v2 \
-H "Authorization: Bearer $SENSEAUDIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
curl -X POST https://api.senseaudio.cn/v1/t2a_v2 \
-H "Authorization: Bearer $SENSEAUDIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
curl -X POST https://api.senseaudio.cn/v1/t2a_v2 \
-H "Authorization: Bearer $SENSEAUDIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
The code sends language: zh to ASR, and other requests also use lang=zh, making Chinese the mandatory language behavior. The file does not present this as a user-selected or region-justified constraint, so it constitutes a natural-language locale policy issue.
The manifest describes a phone-based elderly voice assistant, but the implementation invokes host binaries ('afplay', 'play', 'mpg123') via subprocess to play audio. Executing local programs is a broader host-control capability than the stated assistant purpose requires and is especially unjustified when the manifest does not mention shelling out or local binary execution.
The TTS function transmits synthesized response text to an external provider, and those responses may contain sensitive content such as private messages, reminders, health-related prompts, or conversational data. In this skill's elderly-care context, externalizing potentially sensitive personal data without minimization or explicit disclosure increases privacy risk.
def tts_speak(text: str) -> None:
"""TTS 合成并播放,适老化参数"""
payload = {**ELDERLY_TTS_PARAMS, "text": text}
resp = requests.post(
TTS_URL,
headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
json=payload,
The scheduler performs inactivity monitoring and can notify family members without any visible consent, authorization model, or confirmation from the elderly user. This creates a privacy and autonomy risk because usage metadata and inferred welfare status are disclosed proactively to third parties, which is especially sensitive in a caregiving context.