T08 · Insecure Dependencies
- Location
SKILL.md:76- Finding
Unpinned PonyFlash SDK Installation Creates a Mutable Supply-Chain Boundary
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly a coherent media-generation and FFmpeg-editing helper, but it handles API keys and runtime downloads in ways users should review before installing.
Before installing, treat this as a review-required integration: configure the PonyFlash API key through a secret manager or local terminal rather than chat, use an isolated environment with a pinned SDK version, avoid uploading sensitive media unless you intend PonyFlash to process it, and approve overwrites, cloud file deletion, recharge actions, and font downloads deliberately.
SKILL.md:76Unpinned PonyFlash SDK Installation Creates a Mutable Supply-Chain Boundary
scripts/ensure_subtitle_fonts.sh:26Downloaded Subtitle Font Is Consumed Without Integrity Verification
SKILL.md:60Skill Directs Users to Paste an API Key into Conversation History
Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.
## Contributing
1. Fork this repo
2. Add or update skill content
3. Follow the [Agent Skills specification](https://agentskills.io/specification)
4. Submit a PR
The code partially matches the declared purpose because it does use the PonyFlash SDK to generate image, video, speech, and music. However, the description also claims substantial FFmpeg-based local media editing functionality—clip, concat, transcode, audio extraction, frame capture, subtitle checks, and ASS subtitle prep—which is absent from this code chunk. In addition, the code includes undeclared account-oriented capabilities such as checking credit balance, listing models, and obtaining a recharge URL. Since the actual code's behavior differs materially from the full declared description and includes extra capabilities not mentioned, this should be flagged as a mismatch.
The code chunk’s primary purpose is environment/capability validation for FFmpeg, not media generation or media editing itself. While the description mentions subtitle capability checks, that is only one small part of the declared functionality, and the actual code does nothing else from the broader description. This is a materially different primary behavior: a dependency checker rather than a media creation/editing skill.
The code partially matches the declared FFmpeg/local media editing portion: clip, concat, extract-audio, transcode, frame capture, subtitle preparation/burning, and subtitle capability checking are all represented. However, the description prominently states AI media generation using the PonyFlash Python SDK for images, videos, speech, and music, and none of those capabilities appear in this code chunk. The script is focused on local shell-based FFmpeg workflows plus subtitle/font handling, not SDK-based generative media creation. Because the declared description includes substantial capabilities absent from the actual code, this is a description-behavior mismatch.
Referenced artifact was not completely inspected
| Local media editing | `scripts/media_ops.sh` | Clip, concat, transcode, extract audio, frame capture |
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
list_file=""
cleanup() {
[[ -n "$list_file" && -f "$list_file" ]] && rm -f "$list_file"
}
trap cleanup EXIT
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
list_file=""
cleanup() {
[[ -n "$list_file" && -f "$list_file" ]] && rm -f "$list_file"
}
trap cleanup EXIT
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
list_file=""
cleanup() {
[[ -n "$list_file" && -f "$list_file" ]] && rm -f "$list_file"
}
trap cleanup EXIT
The skill clearly instructs the agent to read repository files and execute shell commands, but it does not declare any explicit tool scope such as allowed-tools or permissions. This makes the effective capability boundary ambiguous and increases the risk of overbroad tool use or accidental privilege expansion when the skill is activated.
The trigger language is very broad, matching common verbs like create, produce, edit, trim, merge, and render. Overbroad activation increases the chance that the skill runs in contexts where shell access, file operations, or external API behaviors are unnecessary, expanding exposure and making accidental misuse more likely.
The skill explicitly asks users to paste an API key into chat, then proposes placing that secret into an environment variable. Requesting secrets through ordinary conversation channels increases the risk of credential leakage through chat logs, transcript retention, or accidental reuse by other tools and steps.
The skill tells the agent to export a user-supplied API key into the shell environment and run pip install ponyflash on the host. Host environment modification and package installation exceed a narrow media-task boundary and can introduce credential exposure, persistence, supply-chain risk, and uncontrolled system changes.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
If verification fails:
- **Key invalid or missing** → direct user to https://api.ponyflash.com/api-key
- **Balance is zero** → direct user to https://api.ponyflash.com/usage to top up credits
## Step 1B: Local Dependency Setup for FFmpeg Tasks
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
If verification fails:
- **Key invalid or missing** → direct user to https://api.ponyflash.com/api-key
- **Balance is zero** → direct user to https://api.ponyflash.com/usage to top up credits
## Step 1B: Local Dependency Setup for FFmpeg Tasks
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
If verification fails:
- **Key invalid or missing** → direct user to https://api.ponyflash.com/api-key
- **Balance is zero** → direct user to https://api.ponyflash.com/usage to top up credits
## Step 1B: Local Dependency Setup for FFmpeg Tasks
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
If verification fails:
- **Key invalid or missing** → direct user to https://api.ponyflash.com/api-key
- **Balance is zero** → direct user to https://api.ponyflash.com/usage to top up credits
## Step 1B: Local Dependency Setup for FFmpeg Tasks
The skill authorizes local shell script execution and, if needed, fallback to raw ffmpeg commands. Even though the use case is media editing, granting general subprocess execution without tight argument validation or command allowlisting materially increases the risk of command injection, unsafe file access, and execution beyond the intended task.
The skill instructs the agent to create new markdown files and update playbooks/INDEX.md in the repository on user request. Repository write capability is broader than simple media generation/editing and can be abused for unauthorized content modification, prompt persistence, or planting misleading operational guidance for future runs.
These examples read local image, audio, and video files and pass them directly to remote generation APIs, but the documentation does not warn that the media will leave the local device and be transmitted to an external service. Users may unknowingly upload sensitive photos, voice recordings, or videos, creating privacy, confidentiality, and compliance risks.
The reference-audio example opens a local song file and submits it to a music generation API without disclosing that the audio is sent off-device. This can expose private, copyrighted, or unreleased audio content to an external provider without the user's informed awareness.
The code hard-codes voice="English_Graceful_Lady", which imposes an English-language output setting in natural-language behavior. Under the policy, forcing a specific language or locale without user opt-in is a violation unless the constraint is clearly justified or optional.
The playbook hard-codes 'all written communication' to English, which overrides or ignores user language preferences and can cause unsafe misunderstandings in a multilingual creative workflow. In this media-production context, users may supply requirements, approvals, or legal/brand constraints in other languages, so forcing English can reduce clarity and informed consent at key checkpoints.
The overwrite example demonstrates destructive file replacement with --overwrite but does not instruct the agent to confirm with the user before replacing existing outputs. In an automation context, this can cause unintended data loss or clobber important files if output paths are reused or influenced by prior workflow state.
The examples add a font-download workflow via ensure_subtitle_fonts.sh, which expands the skill from local media processing into network retrieval of executable-adjacent assets. Even if fonts are not code, introducing downloads increases supply-chain and data-exfiltration surface, especially because the manifest emphasizes local editing/generation and the examples normalize fetching remote resources without clearly constraining source, integrity, or user consent.
The documentation states that Google web and image search are enabled by default for this image-generation model, but it does not warn that prompts and potentially user-provided context may be transmitted to external Google services. In a media-generation skill, users may submit sensitive prompts or reference-image-derived context, so silent default external search/grounding creates a meaningful privacy and data-governance risk.
No suspicious patterns detected.