Incomplete referenced artifact analysis
- Category
- analysis-evasion
- Confidence
- 100% confidence
- Finding
Referenced artifact was not completely inspected
- Content
md node scripts/gen.mjs --task image-fusion \
Security audit
Security checks for vulnerabilities and agentic risk
This outfit-image skill uses disclosed cloud services appropriately, though one service option ignores extra images and its cost examples disagree.
Choose the cloud provider explicitly and supply only images you have permission to upload. Check its retention terms and actual charges: the skill describes 5 credits while its bundled estimate uses 30. Preview requests with --dry-run, and avoid Replicate for multi-image fusion.
Referenced artifact was not completely inspected
node scripts/gen.mjs --task image-fusion \
Referenced artifact was not completely inspected
| 统一入口的全部选项 | `node scripts/gen.mjs --help` |
Without declared permissions the skill's intent is opaque and cannot be validated.
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
一次给**最多 8 张单品图**,融合成同一个模特身上的**一整套 Look**。
和 [flat-lay](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/flat-lay/skill.md) 的「多件上身」(只支持上装+下装两张)不同,本技能是**任意品类的自由组合**:毛衣 + 阔腿裤 + 帽子 + 项链 + 包 + 鞋,一次出一张完整搭配图。
---
The workflow directs an external image-generation service to process product images and an optional model-face image without explicitly disclosing that these assets leave the local environment or requiring upload authorization. Although this processing serves the advertised purpose rather than covert exfiltration, it can expose identifiable portraits or confidential product assets to third-party handling and retention.
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
| 两件单品颜色互串 | 色彩相近 | 追加「颜色不得互相污染」句,写死每件的色名 |
| 外套把内搭全挡住 | 未写层次 | 追加层次排序句,要求露出内搭领口与前襟 |
| 整组图风格不统一 | 每次 prompt 都改了背景/光线 | 固定第四节四项描述逐字不变 |
| 单品数量超过 8 | 超出能力 | 拆成两套 Look,或先用 [image-fusion](./skill.md) 出主体、再用 [wear-everything](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/wear-everything/skill.md) 单独加配饰 |
---
These lines explicitly instruct the agent to execute the generation command, rather than merely documenting available flags. The file describes prompt and image inputs and cloud/backend support, but does not warn users that executing generation can transmit their content to an external service.
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.
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
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])
The manifest promises to combine up to eight product images into one outfit while preserving each item. When the Replicate backend is selected, the request includes only req.images[0]; all remaining product images are omitted without an error, so this backend cannot perform the advertised multi-image fusion.
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,
Detected: suspicious.dangerous_exec, suspicious.env_credential_access