T05 · Unauthorized Access and Privilege Escalation
- Location
SKILL.md:355- Finding
Unnecessary Enumeration and Disclosure of Additional Wallet Accounts
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 355-369
Vulnerability Type: Excessive wallet-account access and cross-account correlation
Risk Level: MediumVulnerable Code Snippet
text - `[accountName]` ← `accountName` of the currently selected account (read from `wallet_store` / `wallet status`, e.g. `Account 1`)text - `[registeredAccountName]` ← name of the OTHER account in the same login that holds the registration. To find it, iterate every account from `wallet_store` other than the current one and call `competition_user_status` for the activity, picking the one whose `joinStatus=1`. If no account is found (rare race), fall back to a generic phrase like `another of your wallet accounts is already registered` and ask the user to check `onchainos wallet status` themselves.Technical Analysis
When a competition registration fails because another account under the same login is already registered, the Skill instructs the Agent to inspect every account in
wallet_storeand submit status queries for each account.This exceeds the minimum access required to handle the registration failure. The Skill already documents a privacy-preserving fallback that reports that another account is registered without identifying or querying it. Enumerating all accounts is therefore not necessary for the declared operation.
Wallet addresses are public identifiers, but their association with one authenticated user is sensitive financial metadata. Querying each account through
competition_user_statuscan disclose that association to the competition service and expands access beyond the currently selected account.Attack Path
- A user attempts to register the currently selected wallet for a competition.
- The backend returns duplicate-registration error
code=11016. - Following the Skill instructions, the Agent reads all accounts from
wallet_store. - The Agent calls `competition_ ...[truncated 930 chars]
- Remediation
View remediation
Remediation Suggestions
- Do not enumerate accounts other than the currently selected account automatically.
- On duplicate registration, use the documented generic response: another wallet account is already registered.
- Require the user to explicitly select an account before querying its competition status.
- Limit
competition_user_statuscalls to the selected wallet and requested competition. - Avoid sending account names, internal account identifiers, or unrelated addresses unless strictly required by the backend.
- Document what wallet metadata is transmitted and obtain clear consent before performing cross-account lookups.
- Add an authorization boundary to wallet tooling so a Skill cannot iterate all accounts without a distinct, user-approved permission.
