T09 · Insecure Skill Coding Practices
- Location
main.py:174- Finding
Unbounded Repeated Financial Transactions
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a real Polymarket auto-trader, but it can repeatedly place live financial orders with a stored API key and without clear built-in limits or confirmation.
Review carefully before installing. Only use narrowly scoped, revocable Polymarket credentials, avoid committing config.yaml after adding a real key, and do not run it with funds you cannot risk. The current artifact should be treated as live repeated trading automation, not a one-time alert or one-shot order tool.
main.py:174Unbounded Repeated Financial Transactions
config.yaml:1Trading Credential Stored in Plaintext Configuration
main.py:52Missing Validation of Financial and Polling Parameters
The main loop continuously monitors prices and automatically places live orders as soon as the threshold is met, with no confirmation prompt, dry-run mode, kill switch, or prominent warning that real funds may be used. In an agent-skill context, this is especially dangerous because users may invoke the skill expecting analysis or monitoring, but the code can execute irreversible financial actions immediately and repeatedly.
The docstring makes a trust-building claim that the skill performs 'No data collection; no hidden backdoors,' yet the code sends API credentials in Authorization headers and transmits trading/order data to external Polymarket endpoints. Even if those transmissions are functionally required, the misleading assurance can cause users to underestimate the sensitivity of what the skill sends off-host and approve use without informed consent.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
url = f"{POLYMARKET_BASE_URL}/v1/trading/orders"
try:
resp = requests.post(url, headers=headers, json=order_body, timeout=15)
except requests.RequestException as e:
raise RuntimeError(f"Order request failed: {e}") from e
The manifest states 'No data collection' while the skill explicitly requires an API key, which is sensitive credential material. Even if the key is only used locally for trading, the claim is misleading and can cause users to underestimate privacy and account-risk implications of supplying credentials.
This manifest advertises automated trading but omits clear warnings that the skill can place potentially irreversible trades using the user's API key. In a trading context, missing risk disclosure is more dangerous because users may enable automation without understanding financial loss, account misuse, or credential exposure risks.