Description-Behavior Mismatch
- Category
- MCP Tool Poisoning
- Confidence
- 94% confidence
- Finding
声明描述的是品牌视觉规范管理,而所提供片段仅涉及服务登录和凭据配置,未体现 brand.yaml 的读取、维护或视觉规范应用。虽然认证可能是生图服务的前置步骤,但当前片段没有建立其与声明功能的直接关系,因此体现了未声明的认证及本地凭据配置能力。此判断仅针对所提供片段。
- Content
Security audit
Security checks for vulnerabilities and agentic risk
The skill coherently supports consistent brand imagery, with disclosed cloud uploads, provider credentials, and generation costs.
Choose the provider explicitly and preview requests with --dry-run before generating. Prompts and selected images, including face references, leave your machine and generation may incur charges. Review brand-file image paths, protect provider keys, and use a reviewed CLI version. All bundled files were inspected, but the external CLI and absent companion scripts remain outside this assessment.
声明描述的是品牌视觉规范管理,而所提供片段仅涉及服务登录和凭据配置,未体现 brand.yaml 的读取、维护或视觉规范应用。虽然认证可能是生图服务的前置步骤,但当前片段没有建立其与声明功能的直接关系,因此体现了未声明的认证及本地凭据配置能力。此判断仅针对所提供片段。
The supplied chunk performs model inference and response extraction rather than reading, maintaining, or applying brand.yaml. A provider call could support branding work, but the placeholder prompt establishes no such connection. On the supplied evidence, the image-submission capability is not represented by the description.
Referenced artifact was not completely inspected
node scripts/brand.mjs --init > brand.yaml # 或直接改随技能分发的 examples/brand.yaml
Referenced artifact was not completely inspected
node scripts/brand.mjs --brand examples/brand.yaml --for flat-lay
Referenced artifact was not completely inspected
node scripts/gen.mjs --task flat-lay --brand examples/brand.yaml \
Referenced artifact was not completely inspected
`--brand` 对 `gen.mjs` / `run_loop.mjs` / `batch.mjs` / `video.mjs` 都有效。
Without declared permissions the skill's intent is opaque and cannot be validated.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
The manifest describes defining brand.yaml for other image-generation skills to consume. Here, brand loading is optional (L127), while the script builds image, video, or text requests and executes the selected provider with retries (L135–L178), then persists its outputs (L179). This is an independent generation capability, not merely reading or applying the declared brand specification, and can operate without any brand configuration.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
model: () => env.GEN_MODEL_OPENAI || 'gpt-image-1',
describe(req) {
const ep = req.images?.length ? 'images/edits' : 'images/generations'
return `POST https://api.openai.com/v1/${ep} model=${openai.model()} size=${mapSize(req.size)} n=${req.batch}`
},
async run(req) {
const key = env.OPENAI_API_KEY
The manifest describes defining brand.yaml as a shared visual specification that other image-generation skills consume. The OpenAI run method instead reads local or remote reference images and submits them, along with prompts, to authenticated generation/editing endpoints; equivalent execution backends are exported at L312. Performing generation and uploading assets extends beyond maintaining the shared brand specification.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
: await readFile(p)
fd.append('image[]', new Blob([buf], { type: mimeOf(p) }), path.basename(p))
}
r = await fetch('https://api.openai.com/v1/images/edits', {
method: 'POST', headers: { authorization: `Bearer ${key}` }, body: fd,
})
} else {
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
: await readFile(p)
fd.append('image[]', new Blob([buf], { type: mimeOf(p) }), path.basename(p))
}
r = await fetch('https://api.openai.com/v1/images/edits', {
method: 'POST', headers: { authorization: `Bearer ${key}` }, body: fd,
})
} else {
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
method: 'POST', headers: { authorization: `Bearer ${key}` }, body: fd,
})
} else {
r = await fetch('https://api.openai.com/v1/images/generations', {
method: 'POST',
headers: { authorization: `Bearer ${key}`, 'content-type': 'application/json' },
body: JSON.stringify({
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
method: 'POST', headers: { authorization: `Bearer ${key}` }, body: fd,
})
} else {
r = await fetch('https://api.openai.com/v1/images/generations', {
method: 'POST',
headers: { authorization: `Bearer ${key}`, 'content-type': 'application/json' },
body: JSON.stringify({
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
model: (req) =>
env.GEN_MODEL_REPLICATE ||
(req?.images?.length ? 'black-forest-labs/flux-kontext-pro' : 'black-forest-labs/flux-dev'),
describe(req) { return `POST https://api.replicate.com/v1/models/${replicate.model(req)}/predictions` },
async run(req) {
const input = { prompt: req.prompt, num_outputs: req.batch }
if (req.images?.length) input.input_image = await asDataUri(req.images[0])
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
const input = { prompt: req.prompt, num_outputs: req.batch }
if (req.images?.length) input.input_image = await asDataUri(req.images[0])
const j = await postJson(
`https://api.replicate.com/v1/models/${replicate.model(req)}/predictions`,
{ input },
{ authorization: `Bearer ${env.REPLICATE_API_TOKEN}`, prefer: 'wait' },
req.timeoutMs,
The comment “英文” specifies English for model.description. Unlike the optional English recommendation for brand.tone, this field constraint provides no user opt-in or documented justification for requiring that language.