T09 · Insecure Skill Coding Practices
- Location
scripts/render-gotchi-bypass.mjs:250- Finding
Unrestricted Renderer-Controlled Artifact URLs Enable Blind SSRF and Resource Exhaustion
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill does what it says for Aavegotchi rendering, but its helper script trusts renderer-provided download URLs too broadly, which could make the user's machine fetch arbitrary or oversized remote content.
Review before installing. Use this only in an environment where outbound network requests are acceptable, avoid running it on hosts with sensitive internal HTTP services, and prefer a restricted output directory. The skill would be safer if it validated artifact URLs against expected Aavegotchi/CDN hosts and enforced timeouts and download size limits.
scripts/render-gotchi-bypass.mjs:250Unrestricted Renderer-Controlled Artifact URLs Enable Blind SSRF and Resource Exhaustion
Referenced artifact was not completely inspected
node scripts/render-gotchi-bypass.mjs --token-id 6741
Referenced artifact was not completely inspected
node scripts/render-gotchi-bypass.mjs --token-id 6741
The skill performs network operations against external services but does not declare any explicit tool scope or permissions. This weakens reviewability and policy enforcement, because an agent may invoke outbound requests without a clearly documented authorization boundary.
The skill sends user-supplied token identifiers or inventory-derived data to third-party endpoints at Goldsky and aavegotchi.com. This is an external data transmission risk because user input and derived metadata leave the local trust boundary, and the skill does not describe minimization, consent, or validation around those transfers.
1. Extract `tokenId` from direct input or inventory URL.
2. Query Goldsky Base core subgraph:
`https://api.goldsky.com/api/public/project_cmh3flagm0001r4p25foufjtt/subgraphs/aavegotchi-core-base/prod/gn`
3. Derive hash in renderer format:
`<Collateral>-<EyeShape>-<EyeColor>-<Body>-<Face>-<Eyes>-<Head>-<RightHand>-<LeftHand>-<Pet>`
4. Kick off render with `POST https://www.aavegotchi.com/api/renderer/batch` using:
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import path from "node:path";
const GOLDSKY_ENDPOINT =
"https://api.goldsky.com/api/public/project_cmh3flagm0001r4p25foufjtt/subgraphs/aavegotchi-core-base/prod/gn";
const DAPP_BASE = "https://www.aavegotchi.com";
const RENDER_TYPES = ["PNG_Full", "PNG_Headshot", "GLB_3DModel"];
const DEFAULT_POLL_ATTEMPTS = 18;
The skill instructs saving raw JSON responses and rendered image artifacts to local disk without warning the user or defining retention limits. Even if the data is not highly sensitive in normal use, silent persistence can expose user-linked URLs, token identifiers, metadata, or downloaded content to later unintended access on shared systems.
No suspicious patterns detected.