T08 · Insecure Dependencies
- Location
SKILL.md:8- Finding
Unpinned Third-Party Dependencies Enable Supply-Chain Substitution
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill appears intended to generate Feishu-compatible voice audio, but its documentation overstates sending/receiving capabilities and under-discloses third-party text/audio processing risks.
Install only after reviewing the provider and dependency trust model. Treat any text or audio processed by this skill as potentially sent to MiniMax, Edge TTS, or related tooling, avoid secrets or regulated data, and verify whether you need a generator only or actual Feishu send/receive support.
SKILL.md:8Unpinned Third-Party Dependencies Enable Supply-Chain Substitution
send_feishu_voice.py:43Race-Prone Temporary Files Permit Local File Replacement or Overwrite
The description claims a broader skill: native Feishu voice messaging with both TTS and STT/Whisper receiving, plus multilingual support. This code chunk is narrower. It synthesizes speech with MiniMax or Edge TTS, converts MP3 to Ogg/Opus using PyAV, and returns or copies the resulting file. There is no code for receiving audio, transcribing with Whisper, or interacting with Feishu APIs to send a message. While 'no ffmpeg needed' is consistent with the PyAV-based conversion, the main declared capability set is only partially represented, so the description does not accurately match this supplied code chunk.
The README explicitly describes converting user text and voice through external services such as MiniMax, Edge TTS, and Whisper, but does not warn users that message content and audio may leave the local environment and be processed by third parties. This creates a real privacy and consent risk, especially in enterprise chat contexts where voice messages may contain sensitive business or personal information.
The skill documents code that invokes shell commands (mmx, node) and writes temporary audio files, but it declares no explicit tool scope or permissions boundary. In an agent environment, undeclared shell and file-write capability increases the chance of overbroad execution, unsafe composition with other tools, and user surprise about what the skill is allowed to do.
The skill processes user text for TTS and claims voice/STT support, but it does not warn that content may be sent to external providers such as MiniMax, Microsoft Edge TTS, or Whisper-related services/models. Missing disclosure can lead to inadvertent transmission of sensitive business or personal data to third parties, which is especially risky in enterprise chat contexts like Feishu.
The module docstring and usage text describe a skill for sending native Feishu voice messages. In practice, the code selects a TTS backend, converts the result to OGG/Opus, and prints or copies the output path; there is no Feishu API call, message-posting logic, or any send action in the implementation.
The code sets DEFAULT_VOICE to Chinese (Mandarin)_Gentleman, which forces a specific language/locale choice for generated speech. The file does not offer the user any language or locale selection or document that this is a region-specific tool, so it conflicts with the policy against imposing a language without opt-in.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
def check_minimax_quota() -> int:
"""Check MiniMax speech-hd weekly quota remaining. Returns remaining count, ≤0 means no quota."""
try:
result = subprocess.run(
['mmx', 'quota', 'show', '--output', 'json'],
capture_output=True,
text=True,
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
def generate_minimax_tts(text: str) -> str:
"""Generate MP3 using MiniMax TTS. Returns file path."""
tmp = tempfile.mktemp(suffix='.mp3')
result = subprocess.run(
['mmx', 'speech', 'synthesize', '--text', text, '--out', tmp],
capture_output=True,
text=True,
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
if not text_clean:
text_clean = "Voice message"
result = subprocess.run(
['node', EDGE_TTS_SCRIPT, text_clean, '--voice', DEFAULT_VOICE],
capture_output=True,
text=True,
The docstring explicitly states 'Generate and send Feishu voice message,' which implies a side effect of delivering a message. The implementation only chooses a TTS engine, generates audio, converts it, and returns the local file path, with no sending behavior.
The skill description does not clearly warn that it may send voice messages on the user's behalf into Feishu, which can create consent, audit, and social-engineering risks. In a messaging environment, actions that post as the user should be explicitly disclosed so users understand the operational and reputational impact.
No suspicious patterns detected.