T09 · Insecure Skill Coding Practices
- Location
SKILL.md:40- Finding
Mandatory Plaintext Persistence of Sensitive Candidate Data
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This job-search helper is mostly coherent, but it automatically keeps persistent plaintext records of sensitive career and interview data without clear user consent or cleanup controls.
Install only if you are comfortable with the skill maintaining a persistent local job-search profile. Before using it, decide where those files will live, review and delete memory files when needed, avoid storing unnecessary salary or interview-sensitive notes, and sanitize generated HTML resumes or prefer PDF/static output before sharing them.
SKILL.md:40Mandatory Plaintext Persistence of Sensitive Candidate Data
assets/resume-template.html:239Unescaped Candidate Data and Unvalidated URLs in Generated Resume HTML
{{PROJECT_DESCRIPTION}}
assets/resume-template.html:8Generated Resumes Automatically Load a Third-Party Web Resource
The skill mandates reading and updating a persistent MEMORY.md containing sensitive candidate data such as name, school, job targets, interview history, weaknesses, and application progress across sessions. This creates a privacy and retention risk because the user is not clearly warned, consent is not requested, and the scope of stored personal data is broader than strictly necessary for many interactions.
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
<body>
<div class="page">
<!-- ===== PLACEHOLDER STRUCTURE ===== -->
<!-- Replace all {{VARIABLES}} with actual candidate data -->
<!-- Reorder sections based on target position relevance -->
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
<!-- Replace all {{VARIABLES}} with actual candidate data -->
<!-- Reorder sections based on target position relevance -->
<!-- Header -->
<div class="header">
<div>
<div class="name">{{CANDIDATE_NAME}}</div>
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
</div>
</div>
<!-- Experience — ORDER: most relevant first -->
<div class="section">
<div class="section-title">实习经历</div>
The manifest says the skill triggers when users mention broad intents like “找工作”, “面试准备”, and quoted phrases like “帮我找工作”. These are common conversational requests and the file does not provide boundaries, exclusions, or negative examples to distinguish when this skill should activate versus a general assistant response.
The “触发条件” section enumerates many generic intents such as “投递”, “内推”, and “自我介绍”, which can arise in many ordinary conversations. There is no explanation of what should not trigger the skill, so invocation scope is still too broad and may cause unintended activation.
The cross-session memory requirement operationalizes continuous collection and updating of sensitive candidate records across runs, including progress tracking, weaknesses, and interview notes. In a job-search context, this is especially sensitive because it can reveal identity, career intentions, rejection history, and behavioral assessments, all of which could be misused if retained without clear consent and controls.
The skill directs creation of cv.md and config/profile.yml with personal profile information, including target direction, city preference, salary expectation, job stage, and graduation year, without a user-facing privacy notice. Persisting these structured files increases the chance of unintended retention, secondary use, or exposure of personally identifying and career-sensitive information.
The statement “默认中国校招适配” establishes a default regional and hiring-market orientation. Although the file mentions compatibility with other regions earlier, it does not clearly offer users a choice before defaulting to a specific locale context.
The document declares lang="zh-CN", which forces a specific locale by default. Under the policy, locale constraints should either be optional for the user or clearly justified as region-specific; this file provides no opt-in or justification.
The title suffix 简历 and multiple section headings later in the file are fixed in Chinese, which semantically enforces a specific language choice. Because the template does not offer an alternative language selection or document a justified regional scope, this is a natural-language policy violation.
The entire skill document is written in Chinese and prescribes report content and evaluation outputs in Chinese-formatted terms without indicating that users may choose another language or locale. Under the policy, forcing a specific language without user opt-in is a natural-language locale constraint that should be documented or made optional.
This markdown file contains user-facing instructional content exclusively in Chinese, and there is no indication that language selection is optional or that the locale restriction is intentional. Under the stated policy, forcing a specific language without user opt-in can be a natural-language policy violation.
No suspicious patterns detected.