T09 · Insecure Skill Coding Practices
Error
- Location
- SKILL.md:110
- Finding
- Legacy Gigs Permit Unauthenticated Task Injection## Vulnerability Details **File Location**: `SKILL.md`, lines 110-122 **Vulnerability Type**: Authentication bypass caused by backward-compatible fail-open behavior **Risk Level**: High ### Vulnerable Snippet ```markdown ### Security Tokens Every gig has a 6-character alphanumeric security token embedded in its email address and webhook URL. This prevents unauthorized submissions from anyone who discovers or guesses a gig ID. **How it works:** - **Email:** `{gig_id}_{token}.staging.dollar-platoon@fwd.zoomgtm.com` - **Webhook:** `/inbound/webhook/{gig_id}?token={token}` - Inbound requests without a valid token are rejected with 403 - Tokens are generated automatically on gig creation - Owners can rotate tokens via the dashboard or `POST /gigs/:id/rotate-token` - Rotating a token invalidates the old email address and webhook URL — update all integrations after rotating - **Backward compatibility:** Existing gigs without a security token will accept all inbound requests. Generate a token from the dashboard to enable protection. ``` ### Technical Analysis The documented backward-compatibility mechanism deliberately allows inbound requests to gigs that do not have a security token. This is fail-open authentication: the absence of a credential disables access control instead of denying the request. Gig identifiers are not documented as cryptographic secrets. If a legacy gig ID is exposed through an invitation, API response, log, browser history, marketplace listing, or other integration, an unauthenticated party could submit arbitrary inbound task content. The platform may then store and distribute that content to gigworker mailboxes. This behavior is not necessary for the current declared functionality. A migration mechanism can preserve legacy gigs without allowing indefinite unauthenticated ingestion. ### Attack Path 1. The attacker discovers or enumerates the identifier of a legacy gig without a security token ...[truncated 829 chars]
- Remediation
- ## Remediation Suggestions - Remove fail-open behavior and reject every inbound request that lacks a valid credential. - Automatically generate strong tokens for all legacy gigs before enforcing authentication. - Temporarily pause inbound delivery for legacy gigs until owners acknowledge the migration. - Record and notify owners of rejected requests during the transition. - Monitor for repeated requests to legacy gig identifiers and apply account- and IP-based throttling. - Add automated tests confirming that missing, malformed, expired, and rotated tokens always result in denial.
