T01 · Skill Instruction Hijacking
- Location
revenue_tracker.py:331- Finding
Agent instruction injection through attacker-controlled event descriptions
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent revenue tracker, but it needs Review because it can persist financial data and unsanitized user text into shared agent context, generated HTML, and external-update instructions.
Review before installing. Use it only where automatic handling of financial records is acceptable, disable or gate agent-side Sheets/Notion/Telegram updates unless the user explicitly approves them, and do not feed untrusted descriptions or learnings into this skill until text is escaped and shared-memory writes are opt-in.
revenue_tracker.py:331Agent instruction injection through attacker-controlled event descriptions
revenue_tracker.py:1100Persistent agent memory poisoning through unsanitized learning entries
revenue_tracker.py:432Stored HTML injection in generated dashboards and revenue reports
The skill text overstates what is implemented and mixes actual writes with claimed external integrations that are only emitted as instructions. This can mislead an autonomous agent into treating printed instructions or local state changes as completed business actions, creating integrity gaps, unsafe follow-on automation, and audit confusion around financial records and alerting.
The README explicitly states that after every revenue event the agent will automatically sync data to Google Sheets, Notion, and send Telegram alerts, but it does not warn that sensitive business and financial data may be disclosed to third-party services. In an autonomous-agent context, this increases the chance of silent exfiltration of revenue, customer, and operational information because the agent is instructed to perform external actions by default.
Without declared permissions the skill's intent is opaque and cannot be validated.
Broad activation guidance increases the chance the skill will be invoked in loosely related contexts, causing financial files, dashboards, and audit artifacts to be updated when not strictly necessary. In autonomous agents, over-broad triggering can become a security and integrity issue because it expands the circumstances under which file-writing and downstream instruction emission occur.
The documentation says learnings are stored in learnings.jsonl, but permissions only authorize LEARNINGS.md. In an agentic environment, this mismatch can cause writes outside declared scope, failed logging, or silent fallback to unintended files, undermining auditability and data-governance controls.
The error-handling section instructs writes to ERRORS.md, but that file is not declared anywhere in permissions. For autonomous systems, undocumented error-log destinations create policy bypass risk, failed writes, or scattered sensitive operational data in unmanaged files.
The skill writes to shared global files outside its own scoped data directory, including /workspace/AUDIT.md and /workspace/.learnings/*.md. In an agent environment, this creates cross-skill side effects and can overwrite, pollute, or leak operational data into shared logs that other tools or agents may trust or consume.
The manifest's network behavior note clearly says the agent, not the script, sends Telegram alerts and that the script only outputs structured instructions. Later sections describe milestone and anomaly alerts as 'automatic' and say 'the script automatically' checks triggers in daily flow, which blurs or contradicts the earlier statement about responsibility for Telegram actions. This creates intent ambiguity around whether alerting is performed directly or delegated.
The trigger example "show me the revenue dashboard" is a natural-language phrase that could plausibly appear in ordinary conversation, and the section does not define stricter scope such as a command prefix or required context. Because there are no negative examples or invocation constraints, this raises ambiguity about when the dashboard action should fire automatically.
The module Operations documentation says the report command generates an HTML report with a --period selector, implying HTML is the report behavior for that operation. The implementation actually supports two distinct formats via --format, defaulting to console output unless html is explicitly requested.
This code appends to audit/error/event logs and saves JSON state files, but these helper functions do not provide user-facing disclosure at the point of write. While the module docstring describes high-level operations, it does not clearly warn that running commands will automatically persist data under /workspace and .learnings.
Recording an event automatically generates a dashboard update and emits action instructions for external systems such as Google Sheets and Notion. In an autonomous agent setting, those printed instructions may be consumed and executed by the agent without explicit user approval, causing unintended propagation of sensitive business data to third-party services.
The generated dashboard explicitly sets , which imposes an English language locale in user-facing output. There is no indication that users can select another language or that the English-only behavior is a documented, justified regional requirement.
The HTML report template sets , forcing English in a user-facing artifact. The file does not offer localization or an explicit opt-in to English-only output.
No suspicious patterns detected.