Back to skill

Security audit

Kalshi Fed Speech Signal Trader

Security checks for vulnerabilities and agentic risk

Overview

This real-money trading skill is mostly disclosed, but it needs Review because its live exit logic can sell Fed-rate positions it did not create and dry-run mode can still change remote market state.

Review carefully before installing. Use only low-limit credentials, do not provide a wallet key unless you understand the DFlow/Solana live-trading path, and avoid live mode unless you are comfortable with the skill managing visible Fed-rate positions and importing markets. The safest fixes would be to restrict exits to positions tagged by this skill, prevent remote imports during dry-run, pin simmer-sdk, and make credential requirements consistent in the manifest.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (3)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
trader.py:443
Finding

Automatic Exit Logic Can Sell Fed-Rate Positions Not Created by This Skill

Content
View full analysis
= threshold {EXIT_THRESHOLD:.2f}", ) ``` ### Technical Analysis The position filter uses an `or` condition. A position is consequently selected when either: 1. Its source metadata identifies this Skill, or 2. Its question merely resembles a Federal Reserve rate market. The second condition does not establish ownership. It includes positions opened manually or by other trading strategies. Once the market price reaches `EXIT_THRESHOLD`, live mode passes the unrelated position's market identifier and share count to `execute_trade()` and submits a sell order. This exceeds the minimum privileges necessary for the declared functionality. The Skill only needs authority to manage positions that it created, but the implementation can manage any rate-related position visible through the authenticated account. ### Attack Path 1. A user or another strategy opens a Fed-rate position in the same Simmer account. 2. The position does not contain `TRADE_SOURCE` in its source metadata. 3. Its question satisfies `is_rate_market()`. 4. Its current price reaches or exceeds `EXIT_THRESHOLD`. 5. The user runs `python trader.py --live`, or a managed live execution invokes the Skill. 6. `check_exits()` classifies the unrelated position as a Skill-managed position. 7. The Skill submits a sell order for all detected shares. No external attacker is required; the vulnerability is triggered by ordinary coexistence with another strategy or manually managed position. ### Impact Assessment The Skill can perf ...[truncated 470 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
clawhub.json:6
Finding

High-Privilege Trading SDK Dependency Is Not Version-Pinned

Content
View full analysis
SDK tab") sys.exit(1) venue = os.environ.get("TRADING_VENUE", "kalshi") _client = SimmerClient(api_key=api_key, venue=venue, live=live) return _client ``` The installation documentation also instructs users to install the package without a version constraint: ```text pip install simmer-sdk ``` ### Technical Analysis The project declares `simmer-sdk` without an exact version or package hash. Installation can therefore resolve to a different release over time. This dependency operates in a high-trust context. Project code gives `SimmerClient` the `SIMMER_API_KEY`, invokes its private `_request()` method, and relies on it to retrieve account data and execute trades. A compromised, malicious, or unexpectedly changed future release could access process environment data, transmit credentials, modify request destinations, falsify safeguards, or alter trade execution. The reviewed project does not establish that the current dependency is malicious, ...[truncated 1425 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
trader.py:244
Finding

Dry-Run Mode Performs Authenticated Remote Market Imports

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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
Findings (9)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The manifest description materially understates the skill's effective behavior by omitting live trade execution dependencies, position management, market discovery, and local configuration handling. For a financial trading skill, this mismatch is dangerous because users may provide credentials or approve execution under incomplete assumptions, leading to unintended trades or exposure of a high-value private key.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

A blockchain private key is context-inappropriate for a Kalshi sentiment trader and is therefore a strong indicator of over-privileged secret collection. If supplied, that key could be used to sign transactions and drain assets completely unrelated to the advertised trading behavior, making the mismatch especially dangerous in an automated agent context.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
82% confidence
Finding

The skill declares access to environment-backed credentials but does not define an explicit tool scope or permissions boundary. In a trading skill that handles API keys and a live-trading private key, this weakens reviewability and increases the chance that an agent can access sensitive secrets or capabilities beyond what a user expects.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest says only SIMMER_API_KEY is required, but the setup and credential sections also require SOLANA_PRIVATE_KEY for live trading. This discrepancy is security-relevant because it obscures handling of a highly sensitive signing key, increasing the risk that users expose or supply it without adequate scrutiny or that review tooling misses the true credential surface.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest defines an automated trading skill that handles sensitive credentials, including a private key, without any user-facing disclosure about secret handling, signing authority, or transaction risk. In this context, omission of such warnings increases the chance that users provide highly sensitive credentials without understanding custody and loss implications.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest requests SOLANA_PRIVATE_KEY even though the described skill only trades Kalshi markets based on sentiment from question text and lists no blockchain dependency. Requesting an unrelated signing key expands the credential exposure surface and could enable unauthorized wallet access or fund theft if the runtime, author, or downstream code mishandles that secret.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The manifest describes a trading strategy that scores sentiment from market question text and trades accordingly. In addition to that core behavior, the code performs market discovery/import into the platform and exposes config mutation via the SDK/CLI, which are broader operational behaviors not reflected in the description.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest frames the skill as entering trades based on hawkish/dovish sentiment signals derived from question text and adjusted cut probabilities. The implementation also monitors existing positions and sells them when prices cross an exit threshold, adding an undisclosed position-management strategy beyond the stated sentiment signal logic.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

Line L029 states 'No external data needed' as a key advantage, but L021-L022 says the signal can be remixed with live Fed speech transcripts via FRED API or real-time news feeds and that the skill handles execution plumbing around those integrations. This is an intent-level contradiction in the documentation about whether the strategy is self-contained or expects external data sources.

Content

No source excerpt is available for this finding.