T05 · Unauthorized Access and Privilege Escalation
Error
- Location
- SKILL.md:180
- Finding
- Over-Privileged Credential Retrieval and Saved Payment Instrument Use<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 180-196 **Vulnerability Type**: Excessive credential and financial-account privileges **Risk Level**: High ### Complete Vulnerable Snippet ```markdown ### Steps 1. **Navigate** to `https://www.golfnow.com/tee-times/facility/{facilityId}/tee-time/{teeTimeId}` 2. **Select golfer count** — click radio button, dispatch `change` event, verify green fees total updates 3. **Click "Continue to Book"** (`.btnBook`) — redirects to login if not authenticated 4. **Login** — GolfID iframe (`my.golfid.io`): use `frame=[src*=golfid]` to access email/password fields - Creds: `scripts/vault.sh get golfnow` 5. **Checkout page** (URL: `.../checkout/players/{count}`): - **Apply rewards**: Click `#applyRewardsBtn` → checkboxes by code ID (e.g. `#MEMBERSAVE`) - Note: Rewards marked "Cannot Be Combined" won't stack on Hot Deals - **Apply GolfPass Points**: Click `#btn-apply-loyalty-points` (these DO work on Hot Deals) - **Decline Tee Time Protection**: Click `input[name=rdlTeeTimeProtection][value=false]` - **Decline charity roundup**: Click "No Thanks" if desired - **Payment**: Pre-filled from saved cards (default: AMEX 1004) 6. **📸 SCREENSHOT & SEND TO USER** — Send checkout screenshot via Telegram before proceeding 7. **Wait for approval** 8. **Accept terms**: Check `#agree-terms-top` 9. **Click reservation**: `#reservation-button-top` ``` ### Technical Analysis The Skill is principally declared as a tee-time search and comparison tool, but its instructions extend its authority to retrieving credentials from a local vault, authenticating to a personal GolfNow account, consuming account rewards, selecting a saved payment instrument, accepting contractual terms, and initiating a financial transaction. The command `scripts/vault.sh get golfnow` grants the agent access to reusable account credentials. This substantially exceeds the privileges needed to query the public tee-time API. The ...[truncated 2237 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Separate public tee-time search from authenticated booking into distinct capabilities. 2. Remove `scripts/vault.sh get golfnow` from the Skill instructions. Use a platform-managed authentication broker that does not expose reusable credentials to the agent. 3. Require explicit, operation-specific user authorization before authentication, reward redemption, payment-method selection, or checkout navigation. 4. Scope credentials to a single user and a single transaction. Prefer short-lived OAuth or delegated session tokens over passwords. 5. Remove the hardcoded `AMEX 1004` preference and all other personalized defaults from the distributable Skill. 6. Display available payment methods using masked identifiers and require the user to select one for each transaction. 7. Require separate confirmation for: - Applying rewards or loyalty points - Selecting a payment method - Accepting contractual terms - Submitting the reservation 8. Bind approval to a structured transaction summary containing the facility, date, time, player count, total charge, rewards consumed, cancellation terms, and masked payment method. 9. Restrict vault policy so this Skill cannot access credentials during search-only operations. 10. Record auditable consent events without storing credentials, authentication fields, or payment information in logs. ]]>
