Back to skill

Security audit

Polymarket Combo Builder

Security checks for vulnerabilities and agentic risk

Overview

The skill is openly a real-money Polymarket combo-order tool, but it needs review because live order inputs and dependency versions are not tightly constrained for a wallet-enabled money path.

Review before installing or using live mode. Use a dedicated, low-balance wallet, pin and review dependency versions, keep WALLET_PRIVATE_KEY out of shared environments, dry-run manually before --live, and verify every leg, side, direction, and stake because the script itself does not enforce the advertised $1-$500 stake range or other transaction-safety invariants.

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)

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Security-Critical Dependencies Are Not Reproducibly Pinned

Content
View full analysis
=0.20.1 requests>=2.28 websockets>=12.0 ``` `clawhub.json:4-7`: ```json "requires": { "env": ["SIMMER_API_KEY"], "pip": ["simmer-sdk>=0.20.3", "requests>=2.28", "websockets>=12.0"] }, ``` ### Technical Analysis The project specifies only minimum dependency versions and does not impose upper bounds, exact versions, package hashes, or a lock file. Consequently, future installations may execute dependency releases that did not exist and were not reviewed when the Skill was audited. The minimum `simmer-sdk` version is also inconsistent: `requirements.txt` permits version `0.20.1`, while `clawhub.json` requires at least `0.20.3`. Installation behavior can therefore depend on which manifest the deployment environment uses. This is especially sensitive because `simmer_sdk` is responsible for authenticated network communication and transaction-related operations. The application passes `SIMMER_API_KEY` to `SimmerClient`, and the SDK controls dry-run generation, live order submission, wallet signing workflows, and deposit-wallet activation. Code executing inside a dependency inherits the Python process's access to environment variables and wallet-related resources. The audit did not find evidence that the currently intended SDK version is malicious. The issue is that the dependency policy permits an unreviewed or compromised future version to be installed automatically. ### Attack Path 1. An attacker compromises a future compatible release of `simmer-sdk`, one of its transitive dependencies, or the corresponding package distribution account. 2. The compromised release still satisfies the open-ended `>=` constraint. 3. A user or managed environment installs or upgrades the Skill witho ...[truncated 1365 chars]
Remediation
View remediation
websockets== ``` 2. Generate a reproducible lock file containing pinned transitive dependencies. 3. Require cryptographic package hashes during installation, such as through a hash-locked requirements file and `pip install --require-hashes`. 4. Reconcile the conflicting `simmer-sdk` minimum versions in `requirements.txt` and `clawhub.json`. 5. Review SDK release notes and security changes before updating the pinned version. 6. Use an internal package mirror or allowlist where appropriate. 7. Run wallet-enabled operations in a restricted environment with minimum filesystem access, network egress controls, and no unrelated credentials. 8. Remove `requests` or `websockets` as direct requirements if they are not directly required by this project and are already correctly declared as transitive SDK dependencies. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
combo_builder.py:36
Finding

Live Financial Order Parameters Lack Local Safety Validation

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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 (7)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description promises a full trading skill for building and placing Polymarket combo orders. However, the provided code chunk is not implementing that behavior; it is a narrow offline smoke test for configuration loading. The only observed behavior is local file-based config validation in tests. While some validation aligns loosely with the idea of requiring 2+ legs, the primary purpose and capabilities in this code chunk are materially different from the declared functionality. Therefore this is a clear description-to-code mismatch for the supplied chunk.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill appears to require sensitive capabilities such as reading environment variables and writing files, yet it declares no explicit tool scope or permission boundaries. In this context, those capabilities can expose wallet secrets like WALLET_PRIVATE_KEY and allow silent persistence or tampering via config file writes, increasing the blast radius if the skill is misused or the agent over-executes.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The dependency specifier simmer-sdk>=0.20.1 is unpinned, so builds may resolve to different future versions with unreviewed changes or newly introduced vulnerabilities. In a wallet- and order-signing skill, supply-chain drift is more dangerous because a compromised or breaking SDK update could affect transaction construction, signing flows, or funds handling.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
simmer-sdk>=0.20.1
requests>=2.28
websockets>=12.0

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
99% confidence
Finding

requests>=2.28 allows installation of any later release, making dependency resolution non-reproducible and preventing assurance that a safe version is used. Because this skill likely communicates with external APIs for pricing and order placement, an unsafe or regressed HTTP client version could expose credentials, request integrity, or transport security assumptions.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
simmer-sdk>=0.20.1
requests>=2.28
websockets>=12.0

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
97% confidence
Finding

requests has known advisories, and because the manifest does not pin a specific version, there is no way to verify at install time whether the resolved package is affected. In a trading skill that may handle authenticated API calls, wallet-related metadata, or endpoint interactions, uncertainty around HTTP library safety increases exposure to credential leakage or transport-related flaws.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
99% confidence
Finding

websockets>=12.0 is unpinned, so future installs may pull in versions with different security properties or defects. Since live odds/RFQ flows commonly rely on persistent network channels, a compromised or vulnerable websocket client could affect availability, data integrity, or expose sensitive session behavior.

Content

Scanner excerpt · requirements.txt (reported line 3)May include surrounding context.

text
simmer-sdk>=0.20.1
requests>=2.28
websockets>=12.0

Unverifiable Dependency: websockets has 4 known advisory(ies) (CVE-2018-1000518 (websockets is vulnerable to denial of service by memory exhaustion); CVE-2021-33880 (Observable Timing Discrepancy in aaugustin websockets library); CVE-2018-1000518 (aaugustin websockets version 4 contains a CWE-409: Improper Handling of Highly C) +1 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
96% confidence
Finding

websockets has known historical advisories, and the lack of version pinning makes it impossible to determine whether the installed release is safe. Given this skill's live RFQ and market-data context, websocket weaknesses can be more consequential by disrupting market connectivity, enabling denial of service, or undermining trust in streamed pricing data.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dynamic_code_execution

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
tests/test_combo_builder.py:16