Back to skill

Security audit

Agent Content Licensing & Royalty Rails

Security checks for vulnerabilities and agentic risk

Overview

This non-executing guide is purpose-aligned overall, but it teaches live credentialed financial and dispute workflows with inconsistent sandbox/production disclosure and unsafe payment patterns.

Review this carefully before installing or following it. It does not auto-run locally, but copied examples can use a real GreenHelix key to create external records, transfer funds, release escrows, submit metrics, and resolve disputes. Use sandbox credentials only, validate API hosts, set spending and tool scopes, require human approval for transfers/disputes, and add idempotency and recipient validation before adapting any payment code.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:104
Finding

Bearer Credential Disclosure Through an Unrestricted API Endpoint Override

Content
View full analysis
dict: """Execute a GreenHelix tool via the GreenHelix REST API.""" response = session.post( f"{GATEWAY_URL}/v1", json={"tool": tool, "input": params}, timeout=30, ) response.raise_for_status() return response.json() ``` ### Technical Analysis The destination receiving the `GREENHELIX_API_KEY` is controlled by the `GREENHELIX_API_URL` environment variable. No hostname allowlist, URL scheme validation, certificate pinning, or separation between sandbox and production credentials is applied before the shared session sends the bearer token. If a deployment configuration, CI variable, shell environment, container configuration, or orchestration manifest can be modified, an attacker can set `GREENHELIX_API_URL` to an HTTPS server under their control. Every subsequent call to `execute()` will send the real bearer credential in the `Authorization` header to that server. Although environment-variable endpoint configuration is common, combining an unrestricted endpoint override with automatic attachment of a write-capable bearer credential creates a credential-exfiltration sink. The skill metadata explicitly describes `GREENHELIX_API_KEY` as having read/write access to purchased API tools, increasing the potential impact of disclosure. ### Attack Path 1. The victim stores a valid `GREENHELIX_API_KEY` in the runtime environment. 2. The attacker gains the ability to influence deployment configuratio ...[truncated 1194 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:1284
Finding

Unvalidated and Non-Idempotent Royalty Metadata Can Drive Unauthorized or Duplicate Transfers

Content
View full analysis
list: """Calculate per-party amounts from a total payment.""" total = Decimal(total_amount) distributions = [] allocated = Decimal("0") for i, split in enumerate(split_config): pct = Decimal(str(split["percentage"])) / Decimal("100") if i == len(split_config) - 1: # Last party gets remainder to avoid rounding dust amount = total - allocated else: amount = (total * pct).quantize( Decimal("0.000001"), rounding=ROUND_DOWN ) allocated += amount distributions.append({ "party_id": split["party_id"], "party_role": split["party_role"], "wallet_id": split["wallet_id"], "percentage": split["percentage"], "amount": str(amount), }) return distributions def distribute_royalties(self, content_id: str, license_id: str, total_amount: str, split_config: list, period: str) -> dict: """Execute royalty transfers for all parties.""" distributions = self.calculate_splits(total_amount, split_config) results = [] for dist in distributions: if Decimal(dist["amount"]) <= 0: continue transfer_result = execute("transfer", { "from_id": self.platform_agent_id, ...[truncated 4996 chars]
Remediation
View remediation
::: ``` Require the transfer API to enforce uniqueness. 6. Persist a payout state machine with pending, submitted, confirmed, and failed states. Reconcile transaction IDs before retrying. 7. Use database transactions or distributed locks to ensure only one worker processes a billing period. 8. Enforce per-period and per-recipient payout ceilings. Require human approval when thresholds are exceeded or recipient details change. 9. Use a restricted treasury account with a limited balance rather than an unrestricted platform account. 10. Reconcile the sum of confirmed transfers against expected revenue and halt processing on any discrepancy. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:1624
Finding

Automated Dispute Resolution Debits an Arbitrary Consumer Without Local Authorization or Bounds Checks

Content
View full analysis
dict: """Auto-resolve an overuse dispute with penalty payment.""" overage = actual_uses - allowed_uses standard_cost = Decimal(per_use_price) * overage penalty_cost = standard_cost * Decimal(str(penalty_multiplier)) # Execute penalty transfer penalty_transfer = execute("transfer", { "from_id": consumer_id, "to_id": publisher_id, "amount": str(penalty_cost), "description": ( f"Overuse penalty: {overage} uses over {allowed_uses} limit " f"for {content_id} at {penalty_multiplier}x rate" ), "metadata": { "dispute_id": dispute_id, "dispute_type": "usage_overrun", "overage_units": overage, "penalty_multiplier": penalty_multiplier, }, }) # Resolve the dispute resolution = execute("resolve_dispute", { "dispute_id": dispute_id, "resolution": "overuse_penalty_applied", "resolution_details": { "overage_units": overage, "penalty_amount": str(penalty_cost), "transfer_id": penalty_transfer.get("transfer_id"), "remedy": "penalty_paid_license_renewed", }, }) return resolution ``` ### Technical Analysis The function accepts the payer, payee, usage values, price, and penalty multiplier directly from its caller and uses them to initiate a transfer. It does not independently verify: - That `consumer_id ...[truncated 2675 chars]
Remediation
View remediation
allowed_uses`, the price and multiplier are positive, and the final penalty is below configured caps. 7. Require human review for high-value penalties, ambiguous metrics, changed counterparties, or multipliers above a conservative threshold. 8. Implement compensating transactions or escrow rollback for failures between payment and resolution. 9. Restrict the credential used by dispute automation so it cannot transfer from arbitrary accounts. 10. Maintain an immutable audit log containing evidence hashes, approvals, calculations, transfer IDs, and state transitions. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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 (9)

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest labels the skill as a non-executable educational guide, but the body says every line runs against the production API and includes code for transfers, escrow release, metering, and dispute operations. This contradiction can cause operators to underestimate real-world side effects and run credentialed examples that create financial, compliance, or operational actions against external systems.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The guide lists required credentials but does not warn that the examples may transmit sensitive operational, business, and content-usage metadata to an external provider. Because the examples include agent registration, usage metering, licensing intents, and disputes, running them could leak internal identifiers, usage patterns, and transactional details beyond what users expect.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The skill instructs users to integrate with an external API endpoint and later provides code that posts authenticated data to it. External transmission is expected for the business purpose, but it is still security-relevant here because the transmitted data can include credentials, agent metadata, licensing terms, metering events, and financial workflow details.

Content

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

md
Every 2.4 seconds, an AI agent ingests a copyrighted article, a licensed dataset, or a proprietary research paper without paying for it. Not because the agent is designed to steal -- because no programmatic licensing infrastructure exists for machines to negotiate, purchase, and track usage rights the way human procurement teams do. The result is a $3.1 billion "AI Data" spend (Gartner, 2026) funneled through one-off enterprise deals, manual contract negotiations, and legal teams that cannot keep pace with the speed at which autonomous agents consume content. The IP rights management market is projected to grow from $13.7 billion to $30 billion by 2030 at a 14% CAGR, yet the infrastructure connecting content owners to AI consumers remains stuck in the era of PDF license agreements and email threads.
In March 2026, the News/Media Alliance announced a landmark deal with Bria covering 2,200 publishers for RAG monetization. That deal took eight months to negotiate. Eight months for a single licensing arrangement covering one use case. Meanwhile, autonomous agents are already operating across hundreds of content verticals -- news, academic research, financial data, medical literature, legal databases, code repositories, creative assets -- and each vertical has its own licensing conventions, pricing models, and compliance requirements. The manual approach does not scale. What scales is infrastructure: machine-readable licenses, programmatic negotiation flows, automated metering, cryptographic provenance chains, and real-time royalty distribution.
This guide builds that infrastructure from scratch. Using the GreenHelix A2A Commerce Gateway's 128 tools accessible at `https://api.greenhelix.net/v1`, you will implement a complete content licensing platform: a digital asset registry with versioned metadata, agent-to-agent license negotiation via escrow-backed offers, consumption metering across RAG pipelines, fine-tuning jobs, and resale channels, provenance tracking through v
...[truncated 25 chars]

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The guide presents production-capable workflows for escrows, transfers, metering, and disputes without prominent warnings about their financial and operational side effects. Users may copy and run examples assuming they are illustrative, resulting in real transactions, ledger writes, dispute creation, or compliance-impacting records against external services.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This repeated reference reinforces that the guide is designed around live interaction with an external production API. In a skill marketed as a guide/non-executable resource, repeated production endpoint promotion increases the chance that users will run examples that exfiltrate operational metadata or trigger authenticated side effects without adequate safeguards.

Content

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

md
In March 2026, the News/Media Alliance announced a landmark deal with Bria covering 2,200 publishers for RAG monetization. That deal took eight months to negotiate. Eight months for a single licensing arrangement covering one use case. Meanwhile, autonomous agents are already operating across hundreds of content verticals -- news, academic research, financial data, medical literature, legal databases, code repositories, creative assets -- and each vertical has its own licensing conventions, pricing models, and compliance requirements. The manual approach does not scale. What scales is infrastructure: machine-readable licenses, programmatic negotiation flows, automated metering, cryptographic provenance chains, and real-time royalty distribution.

This guide builds that infrastructure from scratch. Using the GreenHelix A2A Commerce Gateway's 128 tools accessible at `https://api.greenhelix.net/v1`, you will implement a complete content licensing platform: a digital asset registry with versioned metadata, agent-to-agent license negotiation via escrow-backed offers, consumption metering across RAG pipelines, fine-tuning jobs, and resale channels, provenance tracking through verifiable claim chains, automated multi-party royalty splits via the ledger, and dispute resolution for violations. Every chapter contains production-ready Python code, architecture diagrams, and patterns extracted from teams that have already shipped content licensing systems for agent fleets.

---

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Stating that all example code runs against the production API, without an immediate warning about real-world effects, encourages execution of examples that can create authenticated external actions. In this context, those actions include payment transfers, escrow release, metering submissions, and dispute records, which can have durable financial and compliance consequences.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The helper claims to gather provenance evidence, but instead calls build_claim_chain to create a new claim labeled evidence_request. In a dispute workflow, confusing retrieval with mutation is dangerous because operators may believe they are collecting existing evidence when they are actually writing new records, polluting the audit trail and undermining evidentiary integrity.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The guide states that sandbox use requires no API key, but the first runnable example immediately reads GREENHELIX_API_KEY from the environment and uses it for authenticated outbound requests. This mismatch can mislead users into supplying credentials unnecessarily, increasing the chance of accidental external transmission and unintended authenticated actions.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

Most of the guide's scope centers on content registry, license negotiation, metering, provenance, royalties, and disputes. The check_consumer_risk function adds a broader counterparty risk-scoring capability by querying reputation and metric-based history to recommend accept/deposit/reject decisions, which goes beyond the core licensing rails described in the manifest.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.