T09 · Insecure Skill Coding Practices
- Location
SKILL.md:56- Finding
Registration Bearer Credential Exposed in a URL Query Parameter
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 14–17 and 56–61
Vulnerability Type: Bearer credential exposure through a URL query parameter
Risk Level: MediumVulnerable Code
markdown ## Authentication All requests (except `/register-agent`) use Bearer token: ```http Authorization: Bearer <registration_token>text ```markdown { "agent_id": "agt_abc123", "wallet_id": "wal_xyz789", "status": "PENDING_USER_BIND", "registration_token": "reg_def456", "bind_url": "/bind?token=reg_def456" }After registration, tell owner to open:
text https://wallet.synapseai.pro/bind?token=reg_def456Technical Analysis
The documentation identifies
registration_tokenas the bearer credential used to authenticate wallet API requests, then places that same token in the binding URL's query string. Sensitive credentials in URLs can be retained or disclosed through browser history, copied links, screenshots, reverse-proxy and web-server access logs, monitoring or analytics systems, and potentially referrer metadata.The documentation does not establish that the URL token is a distinct credential, that it is single-use or short-lived, that it has restricted binding-only scope, or that it is immediately invalidated after binding. Consequently, compromise of the binding URL may expose a credential accepted by the documented authenticated endpoints.
Attack Path
- An agent registers a wallet and receives a
registration_token. - The agent sends the owner a binding URL containing that token as a query parameter.
- The owner opens or shares the URL, causing it to be stored or processed by a browser, intermediary, access log, analytics platform, screenshot, or communication history.
- An attacker obtains the complete URL from one of those sources.
- The attacker extracts the
tokenquery value. - The attacker submits that value as an
Authorization: Bearercredential to the documented wallet endpoints. - If ...[truncated 799 chars]
- An agent registers a wallet and receives a
- Remediation
View remediation
Remediation Suggestions
- Generate a distinct binding credential that cannot authenticate wallet API requests.
- Make the binding credential cryptographically random, narrowly scoped, short-lived, and single-use.
- Exchange the binding credential through a POST request rather than exposing a reusable bearer credential in a URL query parameter.
- Invalidate the binding credential immediately after successful use or expiration.
- Rotate the API registration credential after owner binding so any previously exposed value becomes unusable.
- Redact sensitive query parameters from application, proxy, CDN, monitoring, and analytics logs.
- Apply a restrictive
Referrer-Policy, such asno-referrer, to binding pages. - Prevent third-party resources from loading on pages while a sensitive binding value is present.
- Document the credential separation, expiration period, scope, replay protections, and post-binding invalidation behavior.
- Continue enforcing transaction limits, daily limits, merchant allowlists, and owner approval independently of possession of the bearer token.
