Back to skill

Security audit

Molt Sift

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its data-validation and bounty purpose, but it promotes unattended bounty/payment workflows and an unauthenticated public API without enough controls.

Install only for local testing or mock bounty workflows unless you add authentication, bind the API to localhost or a protected network, enforce payout and rate limits, keep wallets isolated, and avoid cron/auto-claim mode with real funds until the payment and PayAClaw integrations are hardened.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/api_server.py:55
Finding
Unauthenticated Externally Reachable Bounty and Payment-Triggering API<![CDATA[ ## Vulnerability Details **File Location**: `scripts/api_server.py:55-77, 115-176, 204` **Vulnerability Type**: Missing authentication, authorization, rate limiting, and resource limits **Risk Level**: Medium ### Vulnerable Code ```python @self.app.route('/bounty', methods=['POST']) def post_bounty(): """ POST /bounty - Submit validation bounty Payload: { "raw_data": {...}, "schema": {...}, "validation_rules": "crypto", "amount_usdc": 5.00, "payout_address": "SOLANA_ADDR" } Response: { "status": "validated", "score": 0.87, "clean_data": {...}, "issues": [...], "payment_txn": "..." } """ return self._handle_bounty_request() ``` ```python def _handle_bounty_request(self) -> Tuple[Dict[str, Any], int]: """Handle POST /bounty request.""" try: # Parse request data = request.get_json() if not data: return jsonify({ "status": "error", "message": "Request body must be JSON" }), 400 # Validate required fields required = ["raw_data", "amount_usdc", "payout_address"] missing = [f for f in required if f not in data] if missing: return jsonify({ "status": "error", "message": f"Missing required fields: {', '.join(missing)}" }), 400 raw_data = data["raw_data"] schema = data.get("schema") rules = data.get("validation_rules", "json-strict") amount_usdc = data["amount_usdc"] payout_address = data["payout_address"] # Validate amount if not isinstance(amount_usdc, (int, float)) or amount_usdc <= 0: return jsonify({ "status": "error", "message": "amount_usdc must be a positive number" }), 400 # Validate address if not self.payment_handler._is_v ...[truncated 4737 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. **Restrict the default bind address** - Bind to `127.0.0.1` by default. - Require an explicit configuration option to expose the service externally. - Place externally exposed deployments behind a hardened reverse proxy and firewall. 2. **Require strong authentication** - Require API keys, signed requests, mutual TLS, or an authenticated identity provider. - Store credentials in a secret manager or protected environment variable. - Compare secrets using constant-time functions where applicable. 3. **Enforce authorization** - Verify that the authenticated caller is permitted to create bounties and request payments. - Bind each bounty to an authorized payer account and server-side budget. - Do not trust client-provided payment amounts or recipient addresses without policy validation. 4. **Separate validation from payment execution** - Make validation a non-financial operation. - Queue payment requests for a separate trusted worker. - Require a signed bounty record and successful result verification before approving a payment. - Never directly pass request-controlled values to a funded payment backend. 5. **Add financial controls** - Enforce per-request, per-user, and daily payout limits. - Require sufficient authorized escrow balance. - Add approval thresholds for high-value payments. - Use idempotency keys and reject replayed or duplicate requests. 6. **Add resource controls** - Configure Flask or the reverse proxy with a maximum request-body size. - Limit nesting depth, object count, schema size, and output size. - Add per-client and global rate limiting. - Apply request timeouts and bounded worker concurrency. - Expire or persist payment records in bounded storage rather than an unlimited list. 7. **Harden error handling** - Return generic client-facing errors such as `"Internal server error"`. - Record detailed exceptions only in protected server- ...[truncated 359 chars]
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (39)

Instruction Override

High
Category
Prompt Injection
Content
Args:
        port: Port to run server on
        debug: Enable debug mode
    """
    server = BountyAPIServer(port=port)
    server.run(debug=debug)
Confidence
70% confidence
Finding
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.

Intent-Code Divergence

Medium
Confidence
93% confidence
Finding
The deployment guide presents API server functionality as available, while later sections explicitly say parts are only implemented 'when' or 'once' implemented. This can mislead users into exposing services they believe are production-ready, creating unsafe deployments, broken access controls, or reliance on nonexistent validation and payment logic.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The guide recommends automated bounty claiming on a cron schedule without a clear warning that the command performs repeated external actions tied to payouts and potentially financial operations. In skill context, this is especially dangerous because it normalizes unattended execution against external services and may lead users to incur costs, claim unintended bounties, or expose payout workflows without review.

Session Persistence

Medium
Category
Rogue Agent
Content
Run bounty agent on a schedule:

```bash
# In crontab
*/5 * * * * /usr/local/bin/molt-sift bounty claim --auto --payout ADDR > /var/log/molt-sift.log 2>&1
```
Confidence
85% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Intent-Code Divergence

Medium
Confidence
96% confidence
Finding
The Security section claims protections such as wallet key management and rate limiting, but elsewhere the guide says those controls are only planned. This creates a false sense of security that may cause operators to deploy the skill assuming safeguards exist when they do not, increasing risk of abuse, financial loss, or exposure of sensitive operations.

Intent-Code Divergence

Medium
Confidence
96% confidence
Finding
The document claims the system is 'fully implemented,' 'tested,' and 'production-ready' for USDC payments, but later states both the PayAClaw and x402/Solana integrations are mocks that still need replacement for production. This kind of contradictory documentation can cause operators or downstream users to deploy a non-production payment workflow under false assumptions, leading to failed settlements, operational misuse, or trust and financial issues.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The document promotes autonomous watching, auto-claiming, result submission, and payment triggering without any warning, approval boundary, or mention of safeguards for actions affecting external systems and funds. In an agent skill context, this increases the risk that users enable unattended behavior that can spend money, claim jobs incorrectly, or interact with third-party services unexpectedly.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The architecture section presents 'USDC transfer,' 'transaction confirmation,' and 'on-chain settlement' as if they are active behaviors, while later sections disclose that the payment layer is mocked. Misrepresenting simulated payment behavior as real on-chain settlement is dangerous because it can mislead integrators into relying on non-existent security and settlement guarantees.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The bounty-posting example shows raw data and payout instructions being sent to an HTTP API without warnings about data sensitivity, authentication, transport security, or the fact that the request may initiate payment-related processing. This can normalize insecure usage patterns and cause users to expose sensitive information or trigger financial operations over an inadequately secured interface.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The conclusion repeats claims of 'real-time Solana USDC payments' and 'production-ready architecture' despite earlier statements that critical integrations remain mocked and require additional deployment work. This is dangerous because summary sections are often what decision-makers rely on, increasing the likelihood of unsafe deployment or overtrust in the system's financial controls.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
This document explicitly promotes autonomous bounty claiming, job processing, and USDC payment behavior, but it does not warn users that the described workflow can trigger financial transactions and continuous external actions. In a skill/package context, presenting this as normal operation increases the chance that operators deploy or invoke it without understanding wallet, escrow, or automated-claim risks, which can lead to unintended fund movement or abuse of connected infrastructure.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The file repeatedly claims the system is 'production ready' and 'ready for immediate deployment' while also listing missing controls such as API authentication, real payment integration hardening, persistence, and monitoring. That mismatch can mislead users into deploying a financially capable service with inadequate protections, increasing the likelihood of unauthorized access, fraudulent bounty creation/claiming, or unsafe use of real Solana payment accounts.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
This markdown file instructs users to run `molt-sift bounty claim --auto` and provide a payout address, which implies unattended network interaction and potentially financially relevant actions. The README does not include any warning about auto-claiming behavior, outbound requests, or the consequences of submitting jobs/results to external platforms.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The documentation tells users to start an API server and POST raw data plus a payment address to it, but it does not warn that the service accepts network requests and processes potentially sensitive data. For markdown files, behaviors affecting privacy or system integrity should be disclosed clearly to users.

External Transmission

Medium
Category
Data Exfiltration
Content
Then POST to `http://localhost:8000/bounty`:

```bash
curl -X POST http://localhost:8000/bounty \
  -H "Content-Type: application/json" \
  -d '{
    "raw_data": {"symbol": "BTC", "price": 42850},
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Then POST to `http://localhost:8000/bounty`:

```bash
curl -X POST http://localhost:8000/bounty \
  -H "Content-Type: application/json" \
  -d '{
    "raw_data": {"symbol": "BTC", "price": 42850},
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Then POST to `http://localhost:8000/bounty`:

```bash
curl -X POST http://localhost:8000/bounty \
  -H "Content-Type: application/json" \
  -d '{
    "raw_data": {"symbol": "BTC", "price": 42850},
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill explicitly promotes autonomous bounty watching, auto-claiming jobs, processing them, and triggering USDC payments without any visible safety warning, approval gate, spend limits, or operator confirmation. In an agent-skill context, instructions that normalize unattended financial actions can lead to unauthorized transactions, abuse of connected wallets, or execution of untrusted jobs from external services.

External Transmission

Medium
Category
Data Exfiltration
Content
molt-sift api start --port 8000

# In another terminal, post a bounty:
curl -X POST http://localhost:8000/bounty \
  -H "Content-Type: application/json" \
  -d '{
    "raw_data": {
Confidence
84% confidence
Finding
The documented API workflow instructs operators to transmit structured data to an HTTP endpoint, which constitutes external data exposure and could include sensitive raw data if used carelessly. While the example uses localhost, the surrounding skill context encourages API deployment and bounty processing, making it plausible that users expose the service beyond localhost and send validation payloads from other systems without adequate authentication, transport security, or data-handling guidance.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The manifest explicitly advertises auto-claiming bounty jobs and payout actions tied to Solana/x402 micro-payments, but it provides no warning, consent language, or safety constraints around financial operations or wallet effects. In an agent skill context, this increases the risk that users or autonomous agents invoke actions that create transactions, claims, or payout routing without understanding the financial consequences.

Intent-Code Divergence

Medium
Confidence
91% confidence
Finding
The POST /bounty docstring describes a bounty submission API with a response centered on validation results and a payment transaction, which implies a bounty/job lifecycle. However, the implementation immediately validates data and sends a payment in _handle_bounty_request, while the GET /bounty/<job_id> endpoint queries payaclaw_client.get_job(job_id) even though no job is created or stored during POST processing. This is an active mismatch between the documented endpoint semantics and the implemented behavior.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The endpoint automatically initiates a blockchain payment immediately after receiving a POST request, with no authentication, authorization, idempotency control, or explicit confirmation step visible in this code path. In a payment-bearing API exposed to external agents, this makes accidental or malicious submission materially dangerous because a caller can trigger financial loss directly through a single request.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
self.claimed_jobs = {}
        self.completed_jobs = []
    
    def watch_and_claim(self, check_interval: int = 30, auto_confirm_payments: bool = True) -> None:
        """
        Watch PayAClaw for bounty jobs and auto-claim.
Confidence
87% confidence
Finding
The method exposes autonomous operation over bounty intake and payment handling, with no approval workflow and a default of automatic payment confirmation. In this context, autonomous decision-making is security-relevant because it authorizes actions against external systems and funds based solely on program logic and remote inputs.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The agent is designed to continuously watch for jobs, auto-claim them, and by default auto-confirm payments without any human approval step. In a system that touches funds and external job execution, this can cause unintended financial actions, acceptance of malicious or low-quality jobs, or irreversible confirmations if upstream data or counterparties are untrusted.

Static analysis

No suspicious patterns detected.