T08 · Insecure Dependencies
- Location
clawhub.json:8- Finding
Unpinned Third-Party SDK Executes with Access to Trading Credentials
- Content
View full analysis
Vulnerability Details
File Location:
clawhub.json:8-10,SKILL.md:11-12,trader.py:47-48,trader.py:253-263
Vulnerability Type: Unpinned privileged dependency
Risk Level: MediumVulnerable Code
clawhub.json:8-10:json "pip": [ "simmer-sdk" ]trader.py:47-48:python from simmer_sdk.skill import load_config, update_config, get_config_pathtrader.py:253-263:python def get_client(live=True): """Lazy-init SimmerClient singleton.""" global _client if _client is None: try: from simmer_sdk import SimmerClient except ImportError: print("Error: simmer-sdk not installed. Run: pip install simmer-sdk") sys.exit(1) api_key = os.environ.get("SIMMER_API_KEY") if not api_key: print("Error: SIMMER_API_KEY environment variable not set") print("Get your API key from: simmer.markets/dashboard -> SDK tab") sys.exit(1) venue = os.environ.get("TRADING_VENUE", "kalshi") _client = SimmerClient(api_key=api_key, venue=venue, live=live) return _clientTechnical Analysis
The project declares
simmer-sdkwithout an exact version, package hash, or lockfile. Python executes dependency initialization code as soon as the module is imported. This dependency is imported both during global configuration initialization and when creating the trading client.The SDK operates in a process that can contain
SIMMER_API_KEYandSOLANA_PRIVATE_KEY. It also receives the Simmer API key directly and controls market queries and trade submission. Consequently, an unexpectedly changed or compromised future package release would execute with the same process privileges and could inspect environment variables, modify trade requests, or communicate with unauthorized endpoints.The reviewed project does not itself demonstrate that the ...[truncated 1561 chars]
- Remediation
View remediation
Remediation Suggestions
- Pin
simmer-sdkto an audited exact version rather than allowing unconstrained resolution. - Use a requirements or lock file containing cryptographic package hashes, and install with hash verification enabled.
- Review and approve dependency updates before deployment instead of automatically accepting the newest release.
- Verify package publisher provenance and monitor the package for ownership or release-signing changes.
- Run network-facing trading code in a restricted environment with an explicit destination allowlist.
- Separate wallet signing from the SDK process so the dependency cannot directly retrieve private key material.
- Use narrowly scoped, revocable trading credentials with server-side limits on venues, order sizes, and aggregate exposure.
- Pin
