Back to skill

Security audit

51mee Resume Parse

Security checks for vulnerabilities and agentic risk

Overview

This resume-parsing skill is purpose-aligned and contains no artifact-backed evidence of hidden execution, persistence, exfiltration, or privilege abuse.

Install only if you are comfortable sending resume contents, including contact details and personal history, through the model workflow used by your agent. Treat parsed output as untrusted until validated, especially for resumes from unknown sources, because embedded instructions in a resume may manipulate the returned JSON.

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
SKILL.md:21
Finding

Untrusted Resume Content Can Hijack Model Instructions

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 21–25
Vulnerability Type: Prompt injection through untrusted document content
Risk Level: Medium

Vulnerable Code Snippet

text
html
{简历文本内容}

扮演一个简历分析专家,详细地分析上面的简历

text

### Technical Analysis

The prompt template directly interpolates text extracted from a user-supplied resume into the same instruction context used to control the language model. The Markdown or HTML code fence is only presentational and does not establish a security boundary.

An attacker can place adversarial instructions in a resume, including instructions to ignore the parsing contract, close or imitate delimiters, disclose available model context, or produce attacker-selected content. When the extracted text is substituted into the template, the model may interpret those document contents as instructions rather than inert data.

The documented requirement to return JSON does not provide enforcement. No strict schema validation, output parser, delimiter escaping, instruction-priority control, or rejection of additional content is specified.

### Attack Path

1. An attacker creates a supported resume file containing ordinary resume information and embedded instructions directed at the language model.
2. A user uploads the crafted PDF, DOC, DOCX, JPG, or PNG file for parsing.
3. The skill extracts the malicious text and substitutes it into the `{简历文本内容}` placeholder.
4. The embedded instructions enter the same model prompt as the legitimate parsing instructions.
5. The model follows some or all of the attacker's instructions and returns manipulated, malformed, or unauthorized output.
6. If another component trusts or renders the result, the attacker-controlled output can affect downstream processing.

### Impact Assessment

Successful exploitation can compromise the integrity of extracted resume data, including identity, employment, education, contact, and sala
...[truncated 567 chars]
Remediation
View remediation

Remediation Suggestions

  1. Place resume contents in a dedicated structured input field or lower-trust message rather than concatenating them directly with operational instructions.
  2. Add an explicit instruction that all resume content is untrusted data and that instructions, requests, markup, and quoted prompts found inside it must never be followed.
  3. Use robust, randomized delimiters and escape delimiter-like sequences in extracted text. Delimiters should be treated as defense in depth, not as the primary security control.
  4. Require structured output through a schema-constrained model interface when available.
  5. Validate every response against the declared ResumeInfo schema. Reject unknown properties, invalid types, non-JSON prefixes or suffixes, and fields that exceed reasonable length limits.
  6. Do not automatically retry malformed output by embedding it into another privileged prompt without applying the same injection protections.
  7. Run resume parsing in a context that contains no unrelated secrets, prior conversation data, privileged instructions, or unnecessary tools.
  8. Treat generated descriptions and other free-text fields as untrusted output. Escape them before rendering and never pass them directly to command, query, template, or code-execution sinks.
  9. Add adversarial tests using resumes containing delimiter-breaking text, instruction-override attempts, requests for prompt disclosure, and malicious JSON fragments.
Vulnerability Patterns
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (12)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This skill explicitly processes highly sensitive resume data, including phone numbers, email, birthday, work history, and education, but provides no privacy notice, minimization guidance, retention limits, or handling restrictions. In an agent context, that increases the risk of over-collection, unauthorized disclosure, and non-compliant handling of personal data.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 70)May include surrounding context.

md
birthday: string | null;
    description: string | null;
    
    workExpList: WorkExperience[];
    projExpList: ProjectExperience[];
    eduExpList: EducationExperience[];

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 71)May include surrounding context.

md
birthday: string | null;
    description: string | null;
    
    workExpList: WorkExperience[];
    projExpList: ProjectExperience[];
    eduExpList: EducationExperience[];

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 72)May include surrounding context.

md
birthday: string | null;
    description: string | null;
    
    workExpList: WorkExperience[];
    projExpList: ProjectExperience[];
    eduExpList: EducationExperience[];

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 105)May include surrounding context.

md
birthday: string | null;
    description: string | null;
    
    workExpList: WorkExperience[];
    projExpList: ProjectExperience[];
    eduExpList: EducationExperience[];

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 106)May include surrounding context.

md
birthday: string | null;
    description: string | null;
    
    workExpList: WorkExperience[];
    projExpList: ProjectExperience[];
    eduExpList: EducationExperience[];

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 107)May include surrounding context.

md
birthday: string | null;
    description: string | null;
    
    workExpList: WorkExperience[];
    projExpList: ProjectExperience[];
    eduExpList: EducationExperience[];

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 136)May include surrounding context.

md
birthday: string | null;
    description: string | null;
    
    workExpList: WorkExperience[];
    projExpList: ProjectExperience[];
    eduExpList: EducationExperience[];

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 139)May include surrounding context.

md
birthday: string | null;
    description: string | null;
    
    workExpList: WorkExperience[];
    projExpList: ProjectExperience[];
    eduExpList: EducationExperience[];

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 142)May include surrounding context.

md
birthday: string | null;
    description: string | null;
    
    workExpList: WorkExperience[];
    projExpList: ProjectExperience[];
    eduExpList: EducationExperience[];

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The entire skill specification and output format are fixed in Chinese, including required labels and field interpretations, with no indication that users may choose another language. This creates a locale policy concern because the skill appears to enforce a specific language without opt-in or documented regional justification.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The prompt template explicitly instructs the model to '直接返回json' and the return-data section shows a JSON structure, but the later '输出格式' section specifies a Markdown report layout. These instructions conflict about what the skill is intended to output, creating intent/documentation divergence within the skill definition.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.