Back to skill

Security audit

Subscription Sentinel

Security checks for vulnerabilities and agentic risk

Overview

This skill is mostly aligned with managing subscriptions, but it handles sensitive email and billing data and can guide account-changing cancellations with insufficient safeguards.

Review this skill carefully before installing. Use it only in a private workspace with trusted email access, avoid enabling browser auto-cancel unless you can approve each exact service and final cancellation step, and treat subscriptions.json as sensitive financial data that may need deletion or protection.

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 (1)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/data_manager.md:9
Finding
Subscription Financial Metadata Is Persisted in an Unprotected Plaintext File## Vulnerability Details **File Location**: `scripts/data_manager.md:9-38` **Vulnerability Type**: Plaintext storage of sensitive financial metadata **Risk Level**: Medium ### Vulnerable Code ```markdown ## The State File All subscription facts must be stored in a file named `subscriptions.json` located in the current workspace directory. **Data Schema (`subscriptions.json`):** ```json { "last_scan_date": "YYYY-MM-DD", "active_subscriptions": [ { "service_name": "Netflix", "billing_amount": 15.99, "currency": "USD", "billing_cycle": "Monthly", "last_billing_date": "YYYY-MM-DD", "next_expected_billing_date": "YYYY-MM-DD" } ] } ``` ## Mandatory Procedures ### Procedure 1: Read State (Onboarding/Initialization) Whenever the user queries their subscriptions, you MUST first read the contents of `subscriptions.json` using your file reading tool (e.g., `read_file` or `cat` via `exec`). If the file does not exist, initialize an empty abstract state in your memory. ### Procedure 2: Write/Update State (Post-Inference) After you have successfully ingested new email receipts and inferred the latest billing dates (completed Phase 2 of SKILL.md), you MUST update the state: 1. Merge the newly inferred subscriptions with the existing data from Procedure 1. 2. Update the `last_scan_date`. 3. Overwrite `subscriptions.json` entirely with the new combined JSON structure using your file writing tool (e.g., `write_file` or `echo ... >` via `exec`). ``` ### Technical Analysis The instructions require the agent to persist subscription information—including service names, billed amounts, currencies, billing cycles, and billing dates—in `subscriptions.json` in the current workspace. These fields reveal sensitive aspects of the user's financial activity. No encryption, restrictive file permissions, private storage location, retention period, deletion mechanism, ...[truncated 1903 chars]
Remediation
## Remediation Suggestions 1. Obtain explicit user consent before retaining any financial metadata, and provide a mode that performs analysis without persistence. 2. Store state in a dedicated per-user application-data directory rather than the current workspace or a source-controlled directory. 3. Create the storage directory and file with owner-only permissions, such as `0700` for the directory and `0600` for the file, where the platform supports them. 4. Encrypt persisted data at rest using a platform credential store or a key that is not stored alongside the state file. 5. Minimize retained data. Avoid storing exact payment amounts and dates unless they are necessary, and document why each retained field is required. 6. Define a retention period and provide clear deletion and state-reset procedures. 7. Replace shell redirection with a structured file-writing API. Write to a protected temporary file in the same directory, validate the resulting JSON, apply restrictive permissions, and atomically rename it into place. 8. Ensure that `subscriptions.json` and temporary state files are excluded from version control, synchronization, diagnostic bundles, and logs. 9. Document the local disclosure risk so users can make an informed decision before enabling persistent state.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (9)

Missing User Warnings

High
Confidence
97% confidence
Finding
The skill can autonomously navigate websites and potentially cancel paid subscriptions, but this capability is not prominently disclosed in the skill description or user-facing warning text. That lack of transparency materially increases the danger because users may enable what appears to be an email-analysis assistant without understanding that it may take account-affecting actions on external services.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The README explicitly advertises automated cancellation through web control, which can trigger irreversible account changes or loss of service if the agent misidentifies a subscription, navigates incorrectly, or acts without sufficiently explicit user confirmation. In the context of a financial/account-management skill, this is more dangerous because the described behavior targets live user accounts and billing settings, not a harmless read-only workflow.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The invocation examples include broad natural phrases like 'check my subscriptions' and 'any upcoming bills?', which could be matched during ordinary conversation and trigger email-access workflows unintentionally. In a skill that processes sensitive inbox financial data, accidental activation increases privacy risk and may lead to unexpected data access without sufficiently explicit user intent.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The skill directs the agent to offer autonomous browser-driven cancellation once the user grants permission, but the skill is primarily framed as an email-analysis agent and does not clearly constrain navigation scope, confirmation steps, or failure handling. Because subscription cancellation can affect paid services and account state, broad browser automation here creates a real risk of unintended or overbroad actions beyond the minimally necessary data-analysis role.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The file directs persistent cross-session storage of subscription and billing data, which is financial-behavior metadata, without any privacy notice, consent flow, retention policy, or minimization guidance. In this skill context, the data is especially sensitive because email-derived purchase history can reveal services used, spending patterns, and timelines across sessions.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The manifest describes an agent that processes email receipts, infers subscription cycles, and alerts or auto-cancels subscriptions. This file additionally instructs the agent to use generic command execution for reading and writing local state, which is not a direct or necessary capability when dedicated file I/O tools are already cited and expands the operational surface beyond the stated purpose.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill mandates overwriting `subscriptions.json` entirely as part of normal operation, creating persistent modification of user data without any safety checks, backup, confirmation, or corruption handling. In an agent setting, this can lead to accidental data loss, state poisoning, or destructive overwrites if the inferred data is wrong or manipulated.

Missing User Warnings

Low
Confidence
84% confidence
Finding
The README promotes inbox scanning and billing-email parsing but does not place a clear privacy warning adjacent to the feature/usage description, which can cause users to underestimate the sensitivity of the data being accessed. This is especially relevant here because the skill processes financial receipts and email content, which may contain personal identifiers, payment details, and account links.

Context-Inappropriate Capability

Low
Confidence
87% confidence
Finding
The instruction to perform general web searches for cancellation links expands the agent from receipt analysis into open-ended web access, which can expose users to inaccurate, malicious, or phishing pages and may cause the agent to retrieve unsafe deep links. In this context, the skill is supposed to protect finances, so sending users to unverified cancellation URLs is a meaningful security and safety risk.

Static analysis

No suspicious patterns detected.