other
- Location
scripts/zapper.py:67- Finding
Implicit Disclosure and Correlation of All Configured Wallet Addresses
- Content
View full analysis
Vulnerability Details
File Location:
scripts/zapper.py:67-82, with affected command flows atscripts/zapper.py:614-668
Vulnerability Type: Excessive Wallet Data Disclosure
Risk Level: MediumVulnerable Code
python def resolve_address(address_or_label): """Resolve address from argument or wallet label.""" if address_or_label and address_or_label.startswith("0x"): return [address_or_label] wallets = get_wallets() if address_or_label: # Try to find by label for w in wallets: if w.get("label", "").lower() == address_or_label.lower(): return [w["address"]] print(f"Error: Wallet '{address_or_label}' not found in config") sys.exit(1) if wallets: return [w["address"] for w in wallets]The resulting address list is sent to the external Zapper API by multiple handlers. For example:
python def cmd_tokens(args): addresses = resolve_address(args.address) data = fetch_tokens(addresses, args.limit) if args.json: print(json.dumps(data, indent=2)) else: print(format_tokens(data, onchain=args.show_24h))Technical Analysis
Commands accept the address argument as optional. If it is omitted and the configuration contains wallets,
resolve_address()automatically returns every configured wallet address. The selected command then submits the entire list tohttps://public.zapper.xyz/graphql.Transmitting a wallet address requested by the user is necessary for the declared portfolio-query functionality. Automatically transmitting all configured addresses is not necessary for an individual lookup and exceeds the minimum disclosure required. Although blockchain addresses are public, a collection of addresses associated with one local configuration is sensitive financial metadata. Sending them in one request reveals that they are likely controlled ...[truncated 1289 chars]
- Remediation
View remediation
Remediation Suggestions
- Require an explicit address or configured wallet label for all commands by default.
- Add an explicit
--all-walletsoption for operations that intentionally query every configured wallet. - Display a clear notice or obtain confirmation before transmitting multiple configured addresses together.
- Consider processing wallets in separate requests where aggregation is unnecessary, reducing direct correlation within a single request.
- Update
SKILL.mdto document exactly when wallet addresses are transmitted, which endpoint receives them, and whether multiple addresses are submitted together. - Apply strict wallet-address validation before network transmission.
