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

Content
View full analysis

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).
text

### 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
View 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
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.