Back to skill

Security audit

Polymarket Geopolitics Trader

Security checks for vulnerabilities and agentic risk

Overview

This skill is openly a trading bot, but its documented financial safeguards do not match or are not fully enforced by the code.

Review this carefully before installing for live trading. Use only a limited Simmer/Polymarket credential, keep it in paper mode unless you intentionally pass --live, and do not rely on the documented volume, spread, resolution-date, position-count, or max-position safeguards until the code and metadata are corrected and tested.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
trader.py:30
Finding

Documented Financial Risk Controls Are Not Fully Enforced

Content
View full analysis
= NO_THRESHOLD: conviction = min(1.0, (p - NO_THRESHOLD) / (1 - NO_THRESHOLD) * bias) size = max(MIN_TRADE, round(conviction * MAX_POSITION, 2)) ``` Consequently, a configuration where `MIN_TRADE` exceeds `MAX ...[truncated 3619 chars]
Remediation
View remediation
MAX_POSITION: raise ValueError("SIMMER_MIN_TRADE must not exceed SIMMER_MAX_POSITION") ``` 4. Query the account's existing open positions before trading. Calculate remaining capacity as: ```text remaining = MAX_POSITIONS - current_open_position_count ``` Stop when no portfolio-wide capacity remains. Where possible, make this check atomic or recheck immediately before submission to avoid concurrent-run races. 5. Decide whether `MAX_POSITIONS` means open markets, orders, or aggregate positions and enforce that definition consistently. 6. Make all defaults identical across `SKILL.md`, `clawhub.json`, and `trader.py`. Prefer a single configuration source to prevent future drift. 7. Validate all numeric environment variables at startup, including finite-value checks, valid threshold ordering, nonnegative amounts, and supported upper bounds. 8. Add automated tests proving that low-volume markets are skipped, existing positions are counted, conflicting tunables are rejected, and no submitted amount exceeds `MAX_POSITION`. ]]>

T08 · Insecure Dependencies

Warning
Location
clawhub.json:6
Finding

Security-Critical Trading SDK Is Not Version or Integrity Pinned

Content
View full analysis
Remediation
View remediation
``` 2. Generate and commit a lock file containing transitive dependency versions. 3. Require package hashes during installation, for example through a hash-locked requirements file and `pip install --require-hashes`. 4. Review upstream release notes and source changes before updating the pin. Treat dependency updates as security-sensitive changes because the SDK receives trading credentials. 5. Use a trusted package index configuration and disable unexpected extra indexes to reduce dependency-confusion exposure. 6. Run the trader with a dedicated, least-privileged API credential and operating-system account. Restrict filesystem and network access to what the SDK strictly requires. 7. Configure account-side trade, balance, and withdrawal limits where supported so dependency compromise cannot exceed predefined financial boundaries. 8. Add automated dependency scanning and provenance verification to the release process. ]]>
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (3)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill references access to environment-based credentials (SIMMER_API_KEY) and describes trade execution, but it does not declare any explicit tool scope or permissions boundary. In an agent environment, missing scope declarations can cause overbroad capability exposure or make it unclear to operators what sensitive resources the skill expects, increasing the chance of unauthorized credential use or unintended live trading.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The description says "Use when you want to capture alpha on international relations markets," which is an open-ended activation cue rather than a narrowly scoped trigger. It does not define explicit trigger phrases, exclusions, or negative examples, so the skill could be invoked in loosely related trading or geopolitics conversations.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The documentation states the strategy works 'without any external API' while also requiring a high-value API credential and describing live trade execution on Polymarket. This discrepancy can mislead users into underestimating the skill's external connectivity and financial authority, causing unsafe deployment decisions or accidental exposure of trading credentials.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.