T06 · System Persistence
- Location
skills/polymarket-btc-up-down-trader/SKILL.md:60- Finding
Persistent Unattended Real-Money Trading Through Scheduled Tasks
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This package mixes inconsistent identities and includes a real-money automated Polymarket trading strategy with credential and cron instructions that need careful review.
Review this carefully before installing. Treat it as a package that includes an automated real-money BTC Polymarket trader, not only the root Simmer orientation. Use dry-run first, avoid live quiet cron unless you have strict external limits and monitoring, prefer managed or dedicated low-balance wallets, and pin/review the SDK version before exposing credentials.
skills/polymarket-btc-up-down-trader/SKILL.md:60Persistent Unattended Real-Money Trading Through Scheduled Tasks
skills/polymarket-btc-up-down-trader/SKILL.md:30Unpinned Trading SDK Executes With API and Wallet Credentials
skills/polymarket-btc-up-down-trader/strategy.py:782Trade Responses Are Recorded as Successful Without Status Validation
The description presents a full-featured prediction market trading interface spanning Polymarket and Kalshi, including wallet and safety/context features. The supplied code is much narrower: it reads an API key from the environment, fetches market listings from a single endpoint, and logs a few entries. This is a materially different primary purpose from the declared one, so the description does not accurately represent the code chunk.
The description claims a broad prediction-market interface covering both Polymarket and Kalshi through one API. The supplied code instead implements a narrowly scoped BTC up/down Polymarket trader. Its primary purpose is automated strategy execution: discover eligible BTC markets, compute Binance-based momentum signals, enter trades when thresholds are met, and exit positions based on time-to-resolution, target-profit capture, or volume spikes. It does not expose a general unified interface, does not interact with Kalshi, and is materially more specific than the declared purpose. Therefore the description does not accurately represent the code's actual behavior.
The description claims a broad interface for AI agents to trade across Polymarket and Kalshi through one API with self-custody wallets and safety rails. The supplied code chunk instead consists entirely of unit tests for one concrete skill: a Polymarket BTC up/down trader. It validates specific strategy behaviors such as time-capped exits, target-profit exits, volume-spike exits, trigger priority, and entry-edge calculations. While this is related to prediction-market trading, it does not match the declared primary purpose of a cross-platform agent interface. There is no evidence here of a unified API, Kalshi integration, wallet functionality, or general-purpose trading interface behavior. Therefore the code chunk materially differs from the declared description.
The metadata slug identifies the skill as a 'weather-max-trader-bot', which does not match the declared skill context of 'simmer', a Polymarket/Kalshi prediction market interface. This kind of identity mismatch is dangerous because it can mislead users, evade review workflows, or cause the wrong automation to be installed or trusted under a misleading label.
The skill documents use of environment variables and outbound network access, but it does not declare any tool scope or permissions boundary. In an agent ecosystem, missing explicit scope increases the chance that a host grants broader capabilities than necessary, making accidental secret access or unintended network actions more likely.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
curl -X POST https://api.simmer.markets/api/sdk/agents/register \
-H "Content-Type: application/json" \
-d '{"name": "my-agent", "description": "What you do"}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
curl -X POST https://api.simmer.markets/api/sdk/agents/register \
-H "Content-Type: application/json" \
-d '{"name": "my-agent", "description": "What you do"}'
This code reads a sensitive API credential from an environment variable and immediately uses it in an outbound HTTPS Authorization header. There is no comment, docstring, or user-facing disclosure indicating that credentials will be accessed and sent to a remote service.
The package metadata materially conflicts with the declared skill identity: the file names the package 'weather-max-bot' and describes it as a 'Weather Trading Agent' rather than the manifest-declared 'simmer' prediction market interface. This kind of identity mismatch is dangerous because it can indicate a repackaged, mislabeled, or substituted skill, undermining user trust, review accuracy, and downstream policy decisions about what the code is allowed to do.
The skill instructs users to place a wallet private key into an environment variable for live trading but does not include clear guidance on secure handling, storage, shell history exposure, process inspection risk, or use of safer key-management options. Because this skill handles real funds on Polymarket, poor credential hygiene could lead to wallet compromise and unauthorized trades or asset loss if the host environment is shared, logged, or otherwise exposed.
The manifest explicitly supports a WALLET_PRIVATE_KEY for self-custody trading but only describes when it is needed, not the sensitivity of the secret or the financial consequences of exposing it. In a trading skill, a leaked private key can enable unauthorized trades or loss of funds, and the absence of an explicit warning increases the chance that users provide or handle the credential insecurely.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
"""
interval = "1m"
limit = max(lookback_minutes + 1, 5)
url = f"https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval={interval}&limit={limit}"
data = _api_request(url, timeout=10)
if not data or isinstance(data, dict):
return None, None, None
The instruction to install 'simmer-mcp' without a pinned version creates a supply-chain and reproducibility risk. A future malicious or breaking package release could be pulled implicitly by users or agents, changing behavior or introducing compromise.
The console messages include both Ukrainian and Russian strings, effectively imposing a specific language/locale on users without opt-in. The file does not provide any mechanism to select language or explain that the skill is intended for a specific locale.
No suspicious patterns detected.