Back to skill

Security audit

Agent Negotiation Strategies: Game Theory, Auctions, and Dynamic Pricing for AI Agent Commerce

Security checks for vulnerabilities and agentic risk

Overview

The skill is a non-executable guide, but its examples are under-disclosed and can send credentials and sensitive commerce data to GreenHelix while creating live marketplace or escrow actions.

Review this carefully before installing or using. Treat the examples as live authenticated commerce code, not harmless pseudocode. Use only sandbox/test credentials, validate allowed API hosts before sending bearer tokens, and do not run service-registration or escrow examples unless every affected agent has explicitly authorized the action.

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

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:133
Finding

Bearer Credential Exposure Through an Unrestricted API Destination

Content
View full analysis
dict: """Execute a tool on the GreenHelix gateway.""" resp = self.session.post( f"{self.base_url}/v1", json={"tool": tool, "input": input_data}, ) resp.raise_for_status() return resp.json() ``` ### Technical Analysis The API client accepts a caller-controlled `base_url` while attaching the bearer credential to a persistent `requests.Session`. Every request made through that session includes the `Authorization` header, regardless of whether the destination is an approved GreenHelix endpoint. There is no validation requiring HTTPS, no exact-host allowlist, no restriction on redirects, and no separation between destination selection and credential attachment. If untrusted configuration, environment data, or upstream caller input can influence `base_url`, the bearer token can be sent directly to an attacker-controlled server. The default path is also internally inconsistent: `base_url` already ends in `/v1`, while `_execute()` appends another `/v1`. This produces `/v1/v1` and may encourage users to override the destination during troubleshooting, increasing the likelihood of unsafe configuration. Although authenticated network access is necessary f ...[truncated 1495 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:1168
Finding

Coalition Leader Can Request Escrow Creation on Behalf of Other Agents Without Demonstrated Authorization

Content
View full analysis
list: """Create escrow contracts to enforce coalition payment shares. Each coalition member escrows their Shapley-allocated share. """ escrows = [] total_shapley = sum(shapley_shares.values()) for member_id, shapley_value in shapley_shares.items(): # Each member pays proportional to their Shapley value if total_shapley > 0: share = (shapley_value / total_shapley) * total_amount else: share = total_amount / len(shapley_shares) escrow = self._execute("create_escrow", { "payer_agent_id": member_id, "payee_agent_id": seller_agent_id, "amount": str(round(share, 2)), "description": ( f"Coalition payment: {member_id} share " f"(Shapley={shapley_value:.4f})" ), }) escrows.append({ "member": member_id, "share": round(share, 2), "shapley_value": shapley_value, "escrow_id": escrow.get("escrow_id"), }) return escrows ``` ### Technical Analysis The function uses the coalition leader's authenticated session to submit `create_escrow` requests naming arbitrary coalition members as payer agents. The workflow does not obtain a signature or authorization token from each payer, verify coalition membership, impose a spending limit, require interactive confirmation, or prove that the authenticated caller has authority to commit funds for the named payer. Secure server-side authorization could reject these requests, but the guide neither establishes nor documents that requirement. If the ba ...[truncated 1723 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (12)

Unvalidated Output Injection

High
Category
Output Handling
Confidence
85% confidence
Finding

Model output is used without validation or sanitization. Unvalidated output injected into downstream contexts (SQL, shell, HTML) enables injection attacks and arbitrary code execution.

Content

Scanner excerpt · SKILL.md (reported line 1660)May include surrounding context.

md
# Wait for counterparty response
            try:
                response = self._execute("send_message", {
                    "sender_agent_id": self.agent_id,
                    "receiver_agent_id": counterparty_id,
                    "message": f"WAITING_FOR_RESPONSE:round={negotiator.current_round}",

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest labels the skill as non-executable educational content with no credentials, yet the embedded Python demonstrates live API usage, marketplace modifications, messaging, escrow creation, and reputation lookups. This creates a deceptive safety boundary: downstream systems or users may treat the skill as passive documentation when it actually contains copy-pastable operational code that can trigger real transactions.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The guide states that no API key or credentials are required, but the example code initializes authenticated sessions and sends Bearer tokens to external endpoints. This mismatch can mislead users into running code that transmits credentials and operational data to a third-party service under false assumptions about trust and setup requirements.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The text promises a no-key sandbox workflow, but the implementation examples consistently require Authorization: Bearer {api_key}. Such contradictions increase the chance that operators overlook authentication, environment separation, and data handling risks when integrating the sample code.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

Across the guide, sample code performs outbound requests that disclose negotiation terms, pricing, identity, reputation, and payment-related data to external GreenHelix APIs without a prominent privacy or security warning. Users may copy these examples into production without realizing they are sending potentially sensitive business intelligence and transaction metadata off-platform.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This code is hardwired to a third-party API endpoint and establishes authenticated outbound communication for marketplace and pricing operations. While expected for an integration guide, it still creates a data exfiltration and trust-boundary risk if users run it without understanding that commercial inputs and tokens are being sent externally.

Content

Scanner excerpt · SKILL.md (reported line 135)May include surrounding context.

md
self,
        api_key: str,
        agent_id: str,
        base_url: str = "https://api.greenhelix.net/v1",
    ):
        self.base_url = base_url
        self.agent_id = agent_id

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The auction examples default to sending negotiation messages to an external service endpoint using authenticated requests. If used as-is, bidding strategy, valuations, and agent identifiers are transmitted off-host, which may expose sensitive market behavior or be executed against unintended environments.

Content

Scanner excerpt · SKILL.md (reported line 332)May include surrounding context.

md
self,
        api_key: str,
        agent_id: str,
        base_url: str = "https://api.greenhelix.net/v1",
    ):
        self.base_url = base_url
        self.agent_id = agent_id

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The multi-round negotiation class uses a live external API by default, sending offers and negotiation metadata to a remote endpoint. In the context of automated bargaining, these messages can contain commercially sensitive information whose disclosure affects competitive position.

Content

Scanner excerpt · SKILL.md (reported line 563)May include surrounding context.

md
deadline_rounds: int = 10,
        strategy: str = "boulware",
        beta: float = 3.0,
        base_url: str = "https://api.greenhelix.net/v1",
    ):
        self.base_url = base_url
        self.agent_id = agent_id

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The dynamic pricing examples connect to an external API for competitor monitoring and service registration, which may disclose pricing strategy and alter marketplace state. Because these calls are embedded in educational examples, users may underestimate the operational and confidentiality impact of running them.

Content

Scanner excerpt · SKILL.md (reported line 807)May include surrounding context.

md
base_price: float,
        min_price: float,
        max_price: float,
        base_url: str = "https://api.greenhelix.net/v1",
    ):
        self.base_url = base_url
        self.agent_id = agent_id

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The coalition management examples default to an external API for market discovery, volume discounts, and escrow creation. Running this code can reveal coalition composition and payment allocations, which are sensitive coordination details in multi-agent commerce.

Content

Scanner excerpt · SKILL.md (reported line 1097)May include surrounding context.

md
self,
        api_key: str,
        agent_id: str,
        base_url: str = "https://api.greenhelix.net/v1",
    ):
        self.base_url = base_url
        self.agent_id = agent_id

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The trust negotiation code queries external identity, reputation, and verification services by default. This can leak counterparties under evaluation and embed privacy-sensitive trust assessments into third-party API traffic if copied directly into real systems.

Content

Scanner excerpt · SKILL.md (reported line 1341)May include surrounding context.

md
self,
        api_key: str,
        agent_id: str,
        base_url: str = "https://api.greenhelix.net/v1",
    ):
        self.base_url = base_url
        self.agent_id = agent_id

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The production negotiator defaults to a live remote API and wraps timeout-driven negotiation behavior around external messaging. In production contexts this can unintentionally externalize full negotiation transcripts and trigger live actions while being presented as reusable sample code.

Content

Scanner excerpt · SKILL.md (reported line 1600)May include surrounding context.

md
agent_id: str,
        round_timeout_seconds: float = 30.0,
        total_timeout_seconds: float = 300.0,
        base_url: str = "https://api.greenhelix.net/v1",
    ):
        self.base_url = base_url
        self.agent_id = agent_id

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:1264