T09 · Insecure Skill Coding Practices
- Location
scripts/render-gotchi-bypass.mjs:197- Finding
Renderer Response Permits Server-Side Request Forgery Through Unrestricted Asset URLs
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly matches its stated Aavegotchi rendering purpose, but it needs review because it can fetch renderer-supplied URLs and writes predictable files to /tmp by default.
Review before installing. Use only if you expect outbound calls to Goldsky and Aavegotchi, run it as an unprivileged user, and choose a private output directory instead of shared /tmp. The publisher should add domain allowlisting for image downloads and safer exclusive file creation before this is treated as low-risk.
scripts/render-gotchi-bypass.mjs:197Renderer Response Permits Server-Side Request Forgery Through Unrestricted Asset URLs
scripts/render-gotchi-bypass.mjs:242Predictable Files in Shared Temporary Directory Permit Symbolic-Link File Overwrite
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 actions but does not declare any tool scope or permission boundaries, which makes its capabilities opaque to users and policy enforcers. In an agent environment, undeclared network access increases the chance of unintended outbound requests and reduces the effectiveness of least-privilege controls.
The skill instructs saving raw API responses and rendered assets to local disk without warning the user or requiring explicit consent. Unannounced file writes can create privacy, storage, and data-handling risks, especially when writing to shared or sensitive locations like /tmp in multi-tenant or automated environments.
The skill directs transmission of user-supplied or derived data to external services at Goldsky and Aavegotchi without any explicit trust boundary, consent language, or domain restriction metadata. Even if the purpose is functional, external transmission exposes data and behavior to third parties and can be risky in agent systems where users may not expect remote lookups or POST requests.
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>-<LeftHand>-<RightHand>-<Pet>`
4. Call `POST https://www.aavegotchi.com/api/renderer/batch` with:
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 COLLATERAL_MAP = {
No suspicious patterns detected.