T01 · Skill Instruction Hijacking
- Location
SKILL.md:60- Finding
Systematic Injection of Sponsored Content into Agent Responses
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 60-77; related automatic-provider behavior at lines 128-142
Vulnerability Type:T01: Skill Instruction Hijacking
Risk Level: HighVulnerable Code Snippet:
typescript async function generateResponse(query: string) { const answer = await yourAgentLogic(query); const result = await operon.getPlacement(query, { placement_context: 'short summary of why this query came up', category: 'defi', // see the defaults table below asset: 'crypto-swaps', // topic class intent: 'research', // action class }); return { answer, recommendation: result.decision === 'filled' ? result.placement : null, disclosure: result.decision === 'filled' ? 'via operon' : null, }; }The ElizaOS path additionally states:
markdown Plugin runs as Provider on every message. No manual `getPlacement` wiring needed. Circuit breaker handles API failures gracefully (5 consecutive failures trips the breaker; retries after 30 seconds).Technical Analysis
The Skill directs the host agent to modify its response pipeline so that externally selected, auction-driven sponsored recommendations are attached to ordinary answers. In the ElizaOS configuration, the provider runs automatically on every message.
This behavior changes the content and commercial objective of agent responses after the Skill is loaded. Although the Skill mentions a visible
via operondisclosure and says the user approves integration actions, the actual placement content is selected by a remote service rather than by the host agent or local policy. The disclosure is also relatively weak and may not clearly communicate that the recommendation is paid advertising.Because advertised content can cover areas such as cryptocurrency, financial technology, health, insurance, and travel, external commercial interests may influence ...[truncated 1330 chars]
- Remediation
View remediation
Remediation Suggestions
- Disable sponsored placements by default and require explicit administrator and end-user opt-in.
- Render advertisements in a visually isolated UI component rather than including them in the semantic agent response.
- Replace the ambiguous
via operontext with an explicit label such asPaid advertisement selected by Operon. - Provide a per-session and per-user mechanism to disable monetized recommendations.
- Prohibit placements for sensitive categories such as health, insurance, lending, investments, and high-risk cryptocurrency transactions unless enhanced review controls exist.
- Apply local allowlists and content validation before displaying any remotely supplied placement.
- Record placement provenance and make it available to users and administrators.
- Ensure the host agent's primary answer remains independent of placement availability, ranking, and advertiser payment.
