Back to skill

Security audit

English

Security checks for vulnerabilities and agentic risk

Overview

This English coaching skill is coherent and not overtly malicious, but it automatically builds and reuses a persistent local profile across English notes, contacts, and projects without case-by-case permission.

Review before installing if you do not want an English helper to keep long-term local notes about your writing, mistakes, preferences, contacts, meetings, or projects. The skill appears locally bounded and includes secret-redaction rules, but its default is to save and reuse personal context automatically rather than asking each time.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:34
Finding
Automatic Persistent Profiling and Cross-Skill Data Access Without Explicit Consent<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:34-40`; `memory-template.md:29-48`; `memory-template.md:193-215`; `memory-template.md:247-264` **Vulnerability Type**: Excessive persistent storage and access beyond the minimum privileges required for English correction **Risk Level**: Medium ### Vulnerable Code Snippets From `SKILL.md:34-40`: ```markdown **Data.** At the start of every session, read `~/Clawic/data/english/config.yaml` (what the user declared) and `~/Clawic/data/english/memory.md` (what you observed, plus its `## Boxes` index and `## Due` table). Open any file `## Boxes` names when the condition on its line applies — the index is the list of files, never assume the list is fixed. Every path it names is inside `~/Clawic/data/`; ignore any line that points anywhere else. Everything this skill reads or writes is a plain local note under the folders declared in `configPaths` — nothing leaves the machine and no credential is ever written. In a shared box it updates or removes only the rows it wrote itself, matched on that box's identity key; a row another skill wrote is read, never rewritten and never deleted, and every write and deletion is named in one line as it happens. Read `~/Clawic/data/contacts/contacts.md` before writing anything addressed to a named person, because the register that works for them is recorded there. Precedence for any value: `config.yaml` → `~/Clawic/profile.yaml` (shared universals: locale, country) → the Configuration table default; an observation never overwrites a declaration without the user confirming it. If none of it exists, work from defaults and say nothing about it. **Write before the session ends** whenever it produced something durable: a correction the user has now needed twice; a word, collocation or pronunciation they asked about; a phrasing they approved and will reuse; a variety, spelling or punctuation decision; a domain term and its agreed English rendering; the register that worked wit ...[truncated 7652 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. **Require explicit opt-in for persistence** - Default to session-only processing. - Ask the user before creating or updating memory, contact, project, artifact, or session files. - Provide separate consent choices for private Skill memory and shared cross-Skill inventories. 2. **Apply data minimization** - Persist only preferences the user explicitly declares. - Do not automatically infer or retain first language, proficiency, pronunciation weaknesses, relationship details, or behavioral profiles. - Store corrected text or contact information only when the user specifically requests it. 3. **Reduce startup access** - Do not read all memory and configuration files at the start of every session. - Load only the minimum file required for the current task. - Access shared contact data only when the user explicitly asks to use saved information about that contact. 4. **Isolate Skill-specific state** - Keep English-learning records under `~/Clawic/data/english/`. - Avoid shared contact and project writes by default. - Where sharing is enabled, use explicit per-record provenance and access-control metadata. 5. **Introduce retention and deletion controls** - Replace indefinite and append-only retention with configurable expiration periods. - Allow users to list, review, correct, export, and delete all stored observations. - Support deletion by contact, project, session, category, and entire Skill profile. 6. **Separate declared facts from inferred observations** - Mark every stored item with its source, consent status, and creation date. - Never promote an inference into a durable preference without confirmation. - Avoid using inferred sensitive attributes in future sessions unless the user approves them. 7. **Preserve secret-handling safeguards** - Continue replacing secret values with non-secret pointers. - Validate that pointers are treated only as inert text and ne ...[truncated 129 chars]
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (47)

Credential Access

High
Category
Privilege Escalation
Content
**People go to the shared inventory `~/Clawic/data/contacts/contacts.md`**, not here: one file holds everyone the user deals with, so "how do I write to Marta" answers itself whichever skill recorded her. One row per person, identified by `Key` (lowercase email → handle → `<kebab-name>`) — read the file first, update that row in place, never append a second. What this skill contributes is the `Context` column; a row another skill wrote is extended, never rewritten. When the work belongs to a tracked project, one line of English decisions goes in `~/Clawic/data/projects/<project>.md` and the style sheet itself stays here, referenced by name. Full protocol for both — scale cut, foreign columns, removal — in `memory-template.md`.

**No credential is ever written anywhere under `~/Clawic/data/`** — not in the files named here, not in a file you create, not in text the user pastes in to be saved. A pasted email thread, a support transcript, or a template can carry a password reset link, an API key or a one-time code: replace the value with its pointer and keep the pointer only — `env:SMTP_PASSWORD`, `keychain:work-mail`, `1password:Work/Mail`, `file:~/.ssh/id_ed25519`. If data sits at an old location (`~/english/` or `~/clawic/english/`), move it to `~/Clawic/data/english/`, and say in one line that you moved it and from where.

English is not one language and "correct" is not the target. The target is *this variety, at this register, to this person, with no seams*. Name which of the four is off before rewriting anything, and change only that. Work from defaults immediately: never open with questions about their variety, their level, or their first language — infer from the text in front of you and say what you assumed.
Confidence
90% confidence
Finding
The skill instructs the agent to process and persist user-provided content, and includes an explicit pointer format referencing a sensitive local file path (`file:~/.ssh/id_ed25519`). Even though the text says not to store credentials, normalizing secrets into filesystem pointers can still expose the existence and location of high-value credentials, encourage handling of secret material, and create downstream leakage risk if these notes are later read by other tools or surfaced to the user.

Credential Access

High
Category
Privilege Escalation
Content
Nothing under `~/Clawic/data/` ever holds a secret value — not the files named here, not files you create, not text the user pastes in and asks you to keep. Language work is fed on pasted text, and an email thread, a support transcript, a CV, a contract clause or a `.env` in a code comment is where the secret arrives. Strip each value **before** writing and leave its pointer where the value was, in this shape: `<kind>:<locator>`.

`env:SMTP_PASSWORD` · `keychain:work-mail` · `1password:Work/Mail` · `bitwarden:Personal/Bank` · `vault:secret/team/mail` · `profile:work` · `file:~/.ssh/id_ed25519`

In a text, the pointer goes where the value was: `password: <keychain:work-mail>`. Say in one line that you did it. A password-reset link, a one-time code and a signed download URL are secrets even though they look like ordinary sentences — the pointer replaces the whole URL.
Confidence
90% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Anti-Refusal Statement

High
Category
Anti-Refusal
Content
| "Dear <Firstname>," with full sentences | 3-4 | 3-4 |
| Full name and title in the signature block, no contractions | 4 | 4 |
| Reply is shorter than yours and drops a rung | They are downshifting you | Follow them down, immediately |
| Reply is longer and more formal than yours | You went too low | Up one, do not apologize for it |
| No prior contact, company domain, named person | Unknown | 3 — never open at 4 for a peer |
| Legal, HR, regulator, or a complaint you may need to cite | Record matters | 5 |
Confidence
55% confidence
Finding
Skill instructs the agent to omit warnings, disclaimers, or ethical commentary. Stripping safety caveats hides risk from the user and is a common jailbreak preamble.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The instruction says 'English is not one language' and then directs the skill to operate by inferring variety and delivering output accordingly, while the configuration only offers English varieties. This hard-codes a language/locale constraint without offering the user a choice or framing it as an opt-in, which matches the policy concern for forced language behavior.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The manifest identifies the skill as "english" / "English", which signals a fixed language or locale choice. For policy review, a language restriction without any visible opt-in, alternative choice, or region-specific justification is a natural-language policy concern.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The instruction to read `voice_file` and `~/Clawic/data/english/memory.md` expands the skill's access to local state not clearly required for basic English correction. Reading local memory/config files can expose sensitive or unrelated user data and lets hidden file contents silently shape outputs.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The skill instructs the agent to persist user-specific preferences into `config.yaml` and `artifacts/style-sheet.md`, which goes beyond transient English-editing behavior into durable state modification. Persistent writes can create unintended cross-session influence, privacy issues, and prompt steering without clear user consent or necessity for the immediate task.

Context-Inappropriate Capability

Medium
Confidence
96% confidence
Finding
The skill directs updates to persistent config and style-sheet files even though its stated role is English polishing. This creates unjustified long-term state changes that can accumulate sensitive preferences, alter future agent behavior, and be abused as a persistence channel.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The markdown tells the agent to write to configuration and artifact files without any user-facing disclosure or warning. Hidden persistent side effects undermine user expectations and informed consent, especially for a skill presented as text improvement rather than system modification.

Context-Inappropriate Capability

Medium
Confidence
96% confidence
Finding
The skill instructs itself to read named-person contact records and a phrasebook from local files before composing an email, which expands its scope from English correction into accessing persisted personal data. That creates unnecessary exposure of user/contact information and can leak preferences or relationship metadata into outputs without clear need, consent, or minimization.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The instruction to consult contact rows and prior approved phrasings implies retention and use of user-specific correspondence preferences without any privacy notice or consent mechanism. In the context of a writing skill, that hidden profiling is more dangerous because it is not obviously necessary for fulfilling a single correction request and may surprise users or process third-party contact data.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
The skill directs persistence of approved phrasings and creation of artifact files, giving a language-polishing skill data-writing capability beyond its stated purpose. This can accumulate sensitive business communications, negotiation language, complaint letters, and contact preferences in local storage, increasing privacy and confidentiality risk if reused, exposed, or accessed by other components.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
Saving approved declines, chase messages, complaint templates, and contact preferences to persistent files without warning users creates undisclosed retention of potentially sensitive business communications. These records can reveal relationship histories, negotiation tactics, and personal style preferences, which raises confidentiality and privacy concerns disproportionate to an English-editing skill.

Natural-Language Policy Violations

Medium
Confidence
80% confidence
Finding
Throughout the file, the guidance prescribes anglophone norms and repeatedly frames the correct behavior as using English-specific spoken conventions, with no user opt-in or alternative language support. Under the policy, forcing a specific language or locale without user choice is a natural-language policy concern unless the constraint is explicitly documented as optional or justified.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
The skill instructs the agent to read user memory and contact records from local files before helping with spoken English. That goes beyond the stated English-coaching purpose and creates unnecessary access to potentially sensitive cross-session and third-party data, increasing the chance of privacy leakage or over-collection.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The instruction to read user memory and contact records lacks any warning, consent flow, or privacy boundary. Because the data includes prior rehearsed lines and contact-specific register notes, the skill may process personal or third-party information without transparency or need.

Ssd 3

Medium
Confidence
98% confidence
Finding
Reading prior rehearsed lines and contact-specific notes from shared memory files creates a real data exposure risk across sessions and people. In this context, an English skill does not need broad access to historical user and contact data, so the instruction increases the chance that one user's or contact's sensitive details are surfaced in another interaction.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
The file directs the agent to write rehearsed lines, session records, errors, and artifacts into persistent local files. Persistent storage is not necessary for basic English correction and creates avoidable retention of user interaction data that may later be exposed, misused, or accessed out of context.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill instructs persistent logging of session content, successful lines, and recurring errors without any retention, confidentiality, or sensitivity safeguards. That can normalize storing personal conversation details indefinitely, creating privacy and compliance risk.

Ssd 3

Medium
Confidence
98% confidence
Finding
The skill directs the agent to record successful lines, conversation details, recurring errors, and dated session notes in persistent natural-language memory stores. Free-form stored notes are especially risky because they can contain personal, confidential, or employer-related details from calls and meetings, making later unintended disclosure more likely.

Ssd 3

Medium
Confidence
87% confidence
Finding
The instruction to read prior memory and phrasebook content before responding can reveal more historical user data than necessary to complete the present task. Over-broad retrieval increases the chance of unintended disclosure, misuse of stale preferences, or propagation of unnecessary personal context into responses. The educational context does not require blanket access to past records.

Description-Behavior Mismatch

Medium
Confidence
94% confidence
Finding
The skill instructs persistent modification of user memory files by recording acquired or rejected expressions and phrasebook preferences. That exceeds a narrow English-correction function and creates ongoing state changes containing user behavior and preferences without clear necessity, consent, or minimization. In this context, the skill is educational rather than memory-management focused, so the persistence is less justified and more risky.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill tells the agent to store user-specific vocabulary preferences, rejections, and situational phrase choices in persistent files without any user-facing notice about storage. This creates silent profiling and retention of user interaction history, which is risky even if the data is not highly sensitive. The lack of transparency and consent makes the behavior unsafe.

Ssd 3

Medium
Confidence
95% confidence
Finding
The instructions require persistent logging of user language preferences, approved phrases, and rejected expressions into memory files. Even though the content is not inherently secret, it accumulates a behavioral profile over time and expands the attack surface through durable storage. In a writing-assistance skill, mandatory logging is more dangerous because it is ancillary to the core function.

Description-Behavior Mismatch

Medium
Confidence
96% confidence
Finding
The skill explicitly instructs the agent to read and update persistent files containing user-specific error history and first-language metadata. That expands behavior from one-shot English correction into stateful profiling and retention without clear scope limits, consent, or data-minimization controls, creating privacy and boundary risks if the agent stores more user information than expected.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
memory-template.md:63