T08 · Insecure Dependencies
- Location
SKILL.md:108- Finding
Unpinned Third-Party Package Is Downloaded and Executed at Runtime
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a disclosed OCR-to-speech helper, but users should understand that it can send generated audio through chat channels and relies on an unpinned TTS package downloaded at runtime.
Before installing, be comfortable with OCR text and generated audio being sent back through the active chat channel, keep confirmation enabled for sensitive images, and prefer a pinned or preinstalled edge-tts plus private per-run temp files if you operate this in a shared environment.
SKILL.md:108Unpinned Third-Party Package Is Downloaded and Executed at Runtime
SKILL.md:85Predictable Shared Temporary File Used for OCR Input
The skill depends on uvx/edge-tts without pinning a specific package version, so execution may pull whatever current upstream release is available at runtime. That creates a supply-chain risk: a compromised or breaking upstream release could execute unexpected code or alter behavior in an automation context.
The skip-confirmation flow allows OCR-extracted text to be converted to audio and sent without user review, which increases the risk of transmitting sensitive or misrecognized content. Because OCR commonly captures nearby private data and can make errors, removing the verification step materially weakens privacy and accuracy safeguards.
Invoking uvx edge-tts directly without a pinned version means the skill may run unreviewed upstream code each time it is used. In agent environments, this expands the trust boundary to the package registry and increases the chance of supply-chain compromise or unexpected behavior changes.
This second uvx edge-tts usage has the same issue: it relies on an unpinned remote package resolution path during execution. Attackers who compromise the package supply chain or a dependency could gain code execution in the environment running the skill.
The skill automatically sends generated audio through the active messaging channel, but the top-level description does not prominently warn that OCR-derived text may be transmitted off-host. In practice, users may treat this as a local OCR/TTS utility and unintentionally exfiltrate sensitive article contents or personal information through chat integrations.
The manifest describes this skill as converting article photos or text into audio using OCR and Edge TTS. However, this section instructs the agent to call another skill's Python scripts under /skills/feishu-voice-send/ to send voice messages via Feishu, which extends the skill into channel-specific message delivery orchestration beyond the core article-to-audio function.
This section adds a channel-specific media transcoding and delivery workflow: converting MP3 to Ogg Opus with ffmpeg and then sending through a messaging tool. That capability is not mentioned in the manifest description, which is limited to OCR/text input and Edge TTS generation with configurable language, speed, voice, and sentence splitting.
The documented command again runs edge-tts through uvx without version pinning, preserving the same supply-chain exposure. Because this skill may process user-provided content and access messaging integrations, compromise of the fetched tool could have downstream privacy and integrity impact.
The voice-listing command also relies on unpinned uvx edge-tts, so even non-core helper commands can trigger execution of unvetted upstream code. Repeated unpinned examples normalize insecure dependency handling for operators.
No suspicious patterns detected.