T09 · Insecure Skill Coding Practices
- Location
scripts/voice-bubble.mjs:65- Finding
Arbitrary Command Execution Through Shell Command Injection
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Feishu voice-message skill has a coherent purpose, but its helper script can turn message text or options into shell command execution.
Review before installing. The Feishu voice-bubble behavior is disclosed, but the helper script should be patched to use execFileSync or spawnSync with argument arrays, validate voice/rate/output values, avoid silent overwrites, and clean temporary files before use in any environment where message text or options may be influenced by others.
scripts/voice-bubble.mjs:65Arbitrary Command Execution Through Shell Command Injection
Referenced artifact was not completely inspected
node scripts/voice-bubble.mjs "你好陛下" --voice zh-CN-XiaoxiaoNeural
Without declared permissions the skill's intent is opaque and cannot be validated.
The activation guidance includes broad conditions such as any time the user wants TTS or voice output, which can cause the skill to be selected outside the intended Feishu-specific context. That can lead to unintended message sending, audio generation, or use of external tooling when a simpler or safer response mode was expected.
The script invokes ffmpeg with the -y flag, which force-overwrites the output file if it already exists. Although the file's general conversion behavior is documented, there is no explicit warning or confirmation that a user-specified --output path may be overwritten irreversibly.
The documentation states that the default voice is zh-CN-XiaoxiaoNeural, which imposes a specific language/locale choice by default. The file does list supported English voices, but it does not say that the user will be asked to choose or that the Chinese default is only used in a documented region-specific context.
The usage text and defaults are centered on Chinese text and a Chinese voice locale (zh-CN-XiaoxiaoNeural), which can imply a fixed language/locale choice. The file does allow --voice overrides, but it does not explicitly present language choice as an opt-in or clarify that other locales are equally supported.