Back to skill

Security audit

jobstead

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent job-search assistant, but it asks the agent to search broad persistent memory sources and to quietly add reusable lessons, which needs review before use.

Install only if you are comfortable with this skill using persistent job-search state. Prefer running it in a dedicated workspace/account, review any state it says it found before relying on it, and consider changing the instructions so external memory recovery and new lessons require explicit approval and a specific Jobstead path or namespace.

Vulnerability Patterns
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • 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
  • 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 (2)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:16
Finding
Unbounded Access to External Agent Memory## Vulnerability Details **File Location**: `SKILL.md`, lines 16–22 **Vulnerability Type**: Unauthorized access beyond the Skill's local state boundary **Risk Level**: Medium **Complete Vulnerable Snippet**: ```markdown Before doing anything else, check for existing state: 1. Look in `references/` next to this file for `profile.md`, `tracker.md`, `lessons.md`, `log.md`. 2. The applicant may have been using Jobstead from a different surface last time, so also check whatever else this environment makes available for persistent state. The exact options vary by tool and aren't listed exhaustively here — examples include a project's `MEMORY.md`, an MCP memory store, or the model's own native memory. ``` ### Technical Analysis The Skill requires the Agent to inspect persistent storage outside the package's own `references/` directory. The instruction is open-ended—“whatever else this environment makes available”—and provides no namespace restriction, exact path allowlist, relevance test, ownership check, or requirement for informed user authorization. This violates least privilege because the legitimate task only requires access to Jobstead-owned state. General project memory, MCP memory, or native model memory may contain unrelated information belonging to other projects, workflows, or users. The phrase “before doing anything else” further makes this broad search a mandatory initialization action rather than an exceptional, user-approved recovery mechanism. An attacker could exploit this behavior by placing misleading Jobstead-like records in an accessible general memory store. The Agent may then load those records as authoritative applicant state, disclose them in its session summary, or use them during fit assessments. ### Attack Path 1. An attacker or unrelated workflow writes sensitive or misleading content to a project `MEMORY.md`, an MCP memory store, or another persistent source visible to the Agent. 2. A user invokes the Jobstead Skill. 3 ...[truncated 1222 chars]
Remediation
## Remediation Suggestions 1. Restrict default state loading to: - `references/profile.md` - `references/tracker.md` - `references/lessons.md` - `references/log.md` 2. Remove the instruction to search “whatever else” the environment exposes. 3. Permit external-state recovery only after explicit user approval. 4. Require the user to provide an exact file path or select a dedicated Jobstead namespace. 5. Do not enumerate general project, MCP, or native Agent memory. 6. Validate imported state against a documented schema and show the proposed import before using or persisting it. 7. Keep external records untrusted until the user confirms that they belong to the current applicant. 8. Avoid surfacing sensitive values during discovery; initially report only the source and metadata needed for confirmation. A safer instruction would be: ```markdown Load only the four files under this Skill's `references/` directory. If the user wants to recover state from another source, ask for explicit permission and an exact Jobstead-specific path or namespace. Do not search or enumerate general project, MCP, or native Agent memory. ```

T02 · Agent Memory Poisoning

Warning
Location
references/lessons.md:3
Finding
Silent Persistence of Untrusted Lessons Enables Memory Poisoning## Vulnerability Details **File Location**: `references/lessons.md`, lines 3–6; reinforced by `SKILL.md`, lines 192–196 **Vulnerability Type**: Persistent-memory poisoning through unconfirmed learned observations **Risk Level**: Medium **Complete Vulnerable Snippet**: ```markdown Persistent, identity-free observations that accumulate across sessions. Anyone can add one when something genuinely new and useful is learned; there's no attribution needed and no need to ask before appending — this is meant to grow quietly as a byproduct of doing the work. The one rule that matters: strip anything that identifies the applicant, a specific employer, or an individual before writing it here. Capture the pattern, not the case. ``` The persistence behavior is also required by `SKILL.md`: ```markdown When something genuinely new and useful is learned — a pattern about a market, a source, a scam signal — capture it as a dated, identity-free entry in `references/lessons.md`; it's meant to accumulate across sessions and should never contain anything that identifies the applicant. ``` ### Technical Analysis The Skill processes job postings, recruiter messages, and user-provided claims, all of which are potentially untrusted. It then permits inferred “lessons” to be appended to persistent storage without user confirmation, attribution, provenance, or a trust classification. Removing identifying information is a privacy measure, but it does not establish factual correctness or prevent malicious instructions and false generalizations from being stored. Because the lessons are intended to accumulate and guide later sessions, an attacker-controlled claim can be transformed into a persistent decision rule. The wording “Anyone can add one,” “no attribution needed,” and “no need to ask before appending” removes safeguards that would otherwise allow the user to review the source, scope, confidence, and wording of a proposed lesson. This creates a durable poisoning channel even ...[truncated 1632 chars]
Remediation
## Remediation Suggestions 1. Require explicit user confirmation before adding any persistent lesson. 2. Present the proposed normalized lesson and its intended scope before writing it. 3. Record provenance, including source type, date, confidence, and verification status. 4. Treat job postings, recruiter messages, websites, and user-supplied documents as untrusted input. 5. Reject lessons containing imperative Agent instructions, tool-use directives, policy changes, or claims that cannot be safely represented as inert data. 6. Separate tentative observations from approved lessons, for example: - `candidate_observations.md` - `verified_lessons.md` 7. Require independent verification for legal, immigration, salary-threshold, sponsorship, and government-policy claims. 8. Add expiration or review dates for facts likely to become stale. 9. Deduplicate and periodically review lessons instead of allowing unrestricted append-only growth. 10. Preserve enough source metadata for auditing while minimizing personal information. A safer persistence rule would be: ```markdown When a potentially reusable pattern emerges, propose it to the user as an untrusted candidate lesson. Append it only after explicit approval. Store its source type, confidence, verification status, and review date. Never persist instructions directed at the Agent. ```
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (1)

Vague Triggers

Medium
Confidence
92% confidence
Finding
The skill advertises activation on very broad phrases such as general job-search help, resume tailoring, scam checks, and resuming a job search, which can cause it to trigger in situations where the user did not clearly intend persistent-state access or application-tracker behavior. In this skill, that ambiguity is more dangerous because the instructions explicitly tell the agent to look for and load persistent state from multiple possible storage locations, increasing the chance of unnecessary access to personal data during ordinary conversations.

Static analysis

No suspicious patterns detected.