Back to skill

Security audit

IELTS Tutor

Security checks for vulnerabilities and agentic risk

Overview

The IELTS tutoring skill is mostly coherent, but it automatically writes learner progress to persistent memory without clear consent, retention, or isolated storage controls.

Install only if you are comfortable with the skill saving IELTS practice progress and weak-point notes across sessions. Prefer using it in an environment where memory files are isolated to this skill, and avoid pasting sensitive personal writing unless persistence is disabled or clearly controlled.

Vulnerability Patterns
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T02 · Agent Memory Poisoning

Warning
Location
SKILL.md:157
Finding

Persistent Agent Memory Access and Cross-Session State Contamination

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:157-169; related instruction at references/learner-profile.md:4
Vulnerability Type: Persistent memory poisoning and insufficient state isolation
Risk Level: Medium

Vulnerable Code

markdown
## Progress Tracking

After each teaching session, update the working memory files:

1. **Daily log** (`memory/YYYY-MM-DD.md`): Append what was practiced and key errors found
2. **MEMORY.md**: Update the 备考进度 and 薄弱点追踪 sections with latest status

**Weak point priority system:**
- 🔴 P0: Structural errors (missing verbs, broken sentence structure)
- 🟡 P1: Systematic errors (word form confusion, subject-verb agreement)
- 🟢 P2: Surface errors (spelling, minor word choice)

Move items from 🔴→🟡→🟢→removed as the student demonstrates consistent improvement.

The related learner-profile instruction states:

markdown
The skill should also check `memory/MEMORY.md` for the most up-to-date progress tracking.

Technical Analysis

The skill explicitly directs the Agent to read and modify persistent memory files after teaching sessions. These files are not clearly established as isolated, skill-owned storage. The path is also inconsistent: the learner profile refers to memory/MEMORY.md, while the main skill refers to MEMORY.md. This ambiguity can cause an implementation to access a shared or global Agent memory file.

Learner submissions are untrusted input. The prescribed workflow derives error descriptions and progress notes from those submissions and persists them without a structured schema, content validation, instruction filtering, retention limits, or user confirmation. If free-form, attacker-controlled text is copied or summarized into memory, it can remain available to later sessions and influence subsequent Agent context.

This is classified as T02: Agent Memory Poisoning because the unsafe persistence mechanism creates a path by which ...[truncated 1967 chars]

Remediation
View remediation

Remediation Suggestions

  1. Replace access to global or ambiguous memory paths with an explicitly skill-owned location, such as state/ielts-tutor/learner-progress.json.
  2. Use the same canonical path throughout all project files; do not alternate between MEMORY.md and memory/MEMORY.md.
  3. Store only allowlisted structured fields, such as exercise type, numeric score, predefined error identifiers, and timestamps.
  4. Do not persist raw learner submissions, quoted instructions, free-form model output, or arbitrary user-provided text.
  5. Treat all loaded state as untrusted data rather than executable instructions. Ensure stored values cannot override system, developer, safety, or skill instructions.
  6. Validate field types, lengths, permitted values, and encoding before writing state.
  7. Require explicit user consent before enabling progress persistence, and provide clear deletion and retention controls.
  8. Apply least-privilege filesystem controls so the skill can read and write only its dedicated state directory.
  9. Use atomic writes and integrity validation to prevent partial, malformed, or externally modified state from being treated as authoritative.
  10. If isolated persistent storage is unavailable, keep progress in the current conversation only and remove the instructions to access MEMORY.md.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (4)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrases and scope are broad enough to activate on many generic language-learning or correction requests, which can cause the skill to take over conversations the user did not intend to route to this specialized workflow. In a skill system, overbroad routing is a real security/quality issue because it can misapply the skill’s instructions, including memory writes and fixed-language behavior, in unrelated contexts.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Mandating Chinese for explanations without checking user preference can override the user’s language needs and cause unintended disclosure or usability failures in shared or multilingual contexts. This is not a classic exploit primitive, but it is a legitimate policy and consent issue because the skill forces a communication mode rather than obtaining opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

Fixing explanations to Chinese and examples to English without user choice hardcodes output behavior that may not match the user’s accessibility, privacy, or educational needs. The surrounding tutoring context makes this understandable, but it still removes user control and can produce the wrong-language output in cases where the user did not consent to that format.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill directs persistent writes to dated memory files and a shared MEMORY.md after each session, but provides no user-facing notice, consent flow, retention limits, or data-minimization rules. Because tutoring sessions may contain personal writing, mistakes, goals, and progress history, silent persistence creates a meaningful privacy risk and could expose sensitive educational or personal data across sessions.

Content

No source excerpt is available for this finding.