T05 · Unauthorized Access and Privilege Escalation
- Location
SKILL.md:19- Finding
Overbroad access to persistent memory for plaintext API credentials
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill appears to do what it says, but it asks for broad local authority and reads credentials from general agent memory before sending user content to Cloudflare.
Review before installing. Use only a narrowly scoped Cloudflare Workers AI token, avoid storing it in MEMORY.md, and do not submit sensitive prompts, private images, or confidential text unless you are comfortable sending them to Cloudflare. The publisher should narrow the allowed tools and add an explicit confirmation or disclosure step before external requests.
SKILL.md:19Overbroad access to persistent memory for plaintext API credentials
The trigger phrases include broad everyday language such as '帮我画' and '读出来', which can cause accidental activation in ordinary conversation. In this skill, accidental activation matters because it may lead to credential lookup and external transmission of user content to Cloudflare without clear intent.
The skill requests Exec even though its documented purpose is only to call remote media-generation APIs and return images/audio. Unnecessary command-execution capability increases the blast radius if the skill is misused or prompt-injected, enabling shell access unrelated to its function.
The skill does not clearly warn users that prompts, text, optional images, and authentication tokens will be used in requests to an external Cloudflare service. This undermines informed consent and can result in unexpected disclosure of sensitive user content to a third party.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| steps | ❌ | — | 步数(参考值25)|
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/black-forest-labs/flux-2-klein-4b" \
-H "Authorization: Bearer {TOKEN}" \
-F "prompt=a sunset over the ocean" \
-F "width=1024" -F "height=1024"
This skill sends user-supplied prompts and bearer-authenticated requests to Cloudflare's external API, which is an intentional but security-relevant data egress path. In context this is expected functionality, yet it remains a real exposure because prompts or generated-content parameters may contain sensitive data and the transfer is not transparently disclosed at point of use.
| steps | ❌ | 4 | 步数(1~8,越高越慢)|
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/black-forest-labs/flux-1-schnell" \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{"prompt":"a cyberpunk cat","steps":4}'
This skill sends user-supplied prompts and bearer-authenticated requests to Cloudflare's external API, which is an intentional but security-relevant data egress path. In context this is expected functionality, yet it remains a real exposure because prompts or generated-content parameters may contain sensitive data and the transfer is not transparently disclosed at point of use.
| steps | ❌ | 4 | 步数(1~8,越高越慢)|
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/black-forest-labs/flux-1-schnell" \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{"prompt":"a cyberpunk cat","steps":4}'
The SDXL-Lightning flow transmits prompts and potentially img2img or mask data to an external provider through Cloudflare. Because image and mask inputs can contain sensitive visual data, this egress path is materially security-relevant even though it is core to the feature.
| mask / mask_b64 | ❌ | — | inpainting mask |
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/bytedance/stable-diffusion-xl-lightning" \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{"prompt":"a cyberpunk cat","num_steps":10}'
The SDXL-Lightning flow transmits prompts and potentially img2img or mask data to an external provider through Cloudflare. Because image and mask inputs can contain sensitive visual data, this egress path is materially security-relevant even though it is core to the feature.
| mask / mask_b64 | ❌ | — | inpainting mask |
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/bytedance/stable-diffusion-xl-lightning" \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{"prompt":"a cyberpunk cat","num_steps":10}'
The DreamShaper flow also sends user prompts and optional image/mask material to Cloudflare's API, creating a third-party disclosure path. Given the skill's broad triggers and memory-based credential lookup, accidental or unintended egress becomes more plausible in context.
| mask / mask_b64 | ❌ | — | inpainting mask |
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/lykon/dreamshaper-8-lcm" \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{"prompt":"a realistic photo of a cat","num_steps":8}'
The DreamShaper flow also sends user prompts and optional image/mask material to Cloudflare's API, creating a third-party disclosure path. Given the skill's broad triggers and memory-based credential lookup, accidental or unintended egress becomes more plausible in context.
| mask / mask_b64 | ❌ | — | inpainting mask |
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/lykon/dreamshaper-8-lcm" \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{"prompt":"a realistic photo of a cat","num_steps":8}'
The TTS flow transmits arbitrary user text to an external API, which may include private, regulated, or proprietary content if users ask the agent to read sensitive material aloud. This is expected behavior for TTS, but without explicit disclosure and consent it remains a genuine confidentiality concern.
| bit_rate | ❌ | — | 比特率(bps)|
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/deepgram/aura-2-en" \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{"text":"Hello world","speaker":"luna"}'
The TTS flow transmits arbitrary user text to an external API, which may include private, regulated, or proprietary content if users ask the agent to read sensitive material aloud. This is expected behavior for TTS, but without explicit disclosure and consent it remains a genuine confidentiality concern.
| bit_rate | ❌ | — | 比特率(bps)|
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/deepgram/aura-2-en" \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{"text":"Hello world","speaker":"luna"}'
The MeloTTS endpoint similarly sends user text off-platform to Cloudflare, creating external data exposure. Since the skill is designed for convenience and broad activation, users may not realize their text leaves the local environment for synthesis.
| lang | ❌ | en | 语言:en/es/fr/zh/ja/ko |
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/myshell-ai/melotts" \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{"prompt":"Hello world","lang":"en"}'
The MeloTTS endpoint similarly sends user text off-platform to Cloudflare, creating external data exposure. Since the skill is designed for convenience and broad activation, users may not realize their text leaves the local environment for synthesis.
| lang | ❌ | en | 语言:en/es/fr/zh/ja/ko |
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/myshell-ai/melotts" \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{"prompt":"Hello world","lang":"en"}'
L276-L289 的 TTS 交互流程将“Deepgram Aura-2 英语”设为默认模型 1,并要求用户仅提供模型编号、文本和声音,未明确先询问用户语言偏好。对于文本转语音场景,默认落到英语模型可能导致在未经用户选择的情况下强制使用特定语言/locale。
Write and Edit permissions are broader than necessary for a skill whose purpose is generating media via Cloudflare APIs. Excess file-modification privileges could be abused to alter unrelated workspace files, plant data, or overwrite outputs outside the intended media flow.
The skill explicitly instructs reading MEMORY.md for credentials, which expands access beyond the minimum needed for media generation and can expose unrelated secrets stored in shared memory. Because MEMORY.md often contains broader agent context or other service tokens, this creates an avoidable secret-scoping and over-collection risk.