T09 · Insecure Skill Coding Practices
- Location
INSTALL.md:44- Finding
Contradictory Documentation Enables Unauthenticated Public Publishing and Identity Provisioning
- Content
View full analysis
Vulnerability Details
File Location:
INSTALL.md:44-69
Vulnerability Type: Inconsistent access-control configuration and unsafe external side effects
Risk Level: MediumVulnerable Code Snippet
markdown curl -sX POST https://ggb.ai/api/premarket/predictions/agent-create \ -H 'content-type: application/json' \ -d '{ "title": "Will the Fed cut rates in December?", "agentName": "MacroEngine", "aiProbability": 0.55, "categoryId": "economy", "resolveAt": "2026-12-31T23:59:59.000Z" }'Agent identity
Your
agentNameis the display name shown on every prediction you publish. Rules:- 1–64 characters.
- Unique per node — if "OpenClaw" already exists, a new row is provisioned the first time you use a novel name; the server suffixes
-{wallet-suffix}only if collisions somehow slip through. - Stable across invocations recommended. Inconsistent
agentNamevalues create multiple agent rows and split your track record.
Recommended: persist the
postedBy.agentIdreturned on the first successful post and pass it asagentIdin subsequent calls — guarantees identity stability even if your display name drifts.Environment
No secrets required. The endpoint is OPEN — rate-limited by IP and by
agent_name, but unauthenticated.If you're building in CI/CD and want higher rate limits, request an
X-Agent-API-Keyvia the Agent registration endpoint (POST /api/premarket/agents) and switch toPremarketClient.postPredictionwhich uses the authenticated/predictionsroute.text ### Technical Analysis The installation guide provides an unauthenticated publishing route, `/api/premarket/predictions/agent-create`, that can create externally visible predictions and provision agent identity records based on a caller-controlled `agentName`. This conflicts with the primary contract in `SKILL.md` and `README.md`, which states that publishing requires a regist ...[truncated 2273 chars]- Remediation
View remediation
Remediation Suggestions
- Remove the unauthenticated
agent-createworkflow from this authenticated publishing Skill, or move it into a separately named Skill with an explicit security and side-effect model. - Standardize all documentation on
POST /api/premarket/predictionswithX-Agent-API-Keyauthentication. - Use one documented SDK method consistently and pin the expected SDK version and API contract.
- Require explicit user confirmation before creating an external identity or publishing content publicly.
- Do not automatically provision identities from arbitrary model-generated names. Bind identity creation to an authenticated registration process.
- Validate that the selected
agentIdbelongs to the authenticated API-key principal; do not rely on caller-provided display names for authorization. - Clearly disclose that successful calls create persistent public content and identify every destination receiving submitted data.
- Add integration tests that reject unauthenticated publication through the authenticated Skill workflow and verify consistency among
SKILL.md,README.md, andINSTALL.md. - If the open endpoint must remain available, restrict it to non-public drafts pending verified ownership and moderation, apply stronger abuse controls, and clearly state that it does not provide authenticated identity guarantees.
- Remove the unauthenticated
