Back to skill

Security audit

Resume Optimizer

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent resume optimizer, but its export helper has insufficiently constrained file-writing behavior and unpinned document-export dependencies.

Review this skill before installing. Use it only in a controlled workspace, avoid shared directories for sensitive resumes, export only when needed, choose plain filenames without slashes or '..', and pin/audit the Python dependencies before running the export helper.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (2)

T08 · Insecure Dependencies

Warning
Location
scripts/requirements.txt:1
Finding

Unpinned Third-Party Dependencies Allow Non-Reproducible Package Installation

Content
View full analysis
=0.8.11 reportlab>=4.0.0 ``` `SKILL.md:617`: ```bash pip install python-docx reportlab ``` ### Technical Analysis The dependency declarations use unbounded minimum-version constraints, while the documented installation command does not specify versions or validate package hashes. Consequently, each installation may retrieve a different package release from the configured Python package index. The package names correspond to expected PyPI projects, and the audit found no evidence that the currently declared dependencies are malicious. Nevertheless, the installation process lacks integrity and reproducibility controls. Any future package version satisfying these constraints is accepted automatically. A compromised upstream release, compromised package index, or maliciously configured package mirror could therefore introduce code that executes during installation or when the exporter imports the dependency. ### Attack Path 1. An attacker compromises a future permitted release of `python-docx` or `reportlab`, or controls the package index or mirror configured in the execution environment. 2. A user follows the documented command or installs from `scripts/requirements.txt`. 3. `pip` resolves the attacker-controlled version because no exact version or cryptographic hash is required. 4. Malicious package code executes during installation or when `export_resume.py` imports and uses the package. 5. The code runs with the privileges of the user or service account performing the installation or resume export. ### Impact Assessment Successful exploitation could provide arbitrary code execution with the privileges of the installing or exporting process. Depending on that account's permissions ...[truncated 326 chars]
Remediation
View remediation
reportlab== ``` 2. Generate a lock file containing cryptographic hashes and install with hash enforcement: ```bash python -m pip install --require-hashes -r requirements.txt ``` 3. Replace the unpinned command in `SKILL.md` with installation from the reviewed requirements or lock file. 4. Use the official package index over TLS and disable untrusted supplemental indexes. 5. Review dependency updates before changing pinned versions, including transitive dependency changes and published security advisories. 6. Run installation and document conversion under a minimally privileged, isolated environment. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/export_resume.py:381
Finding

Unsanitized Output Name Allows Path Traversal and File Overwrite

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (17)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description presents a broad, multi-stage resume optimization system whose core functions include analysis, rewriting, JD matching, scoring, comparison reporting, and export. The supplied code only implements the export portion: converting an already prepared markdown resume into Word/PDF with formatting and font handling. Export is indeed mentioned in the description, but it is only one final component of the declared skill, whereas the actual code lacks the primary optimization, evaluation, and comparison behaviors. Therefore the code chunk does not accurately represent the declared overall purpose and should be flagged as a mismatch.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill instructs the agent to read user files, write output files, and invoke shell commands for export, but it does not declare any explicit tool scope or permission boundary. This creates a least-privilege failure: an integrator or runtime may grant broader filesystem or shell access than users expect, increasing the chance of unintended file access or writes during resume processing and export.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The activation list includes broad phrases such as “帮我看看简历” and “简历改一下”, which are common conversational requests and may match many loosely related interactions. While the file includes some non-applicable cases, it does not tightly constrain when these phrases should or should not invoke the skill beyond a general description.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill explicitly writes markdown and exported .docx/.pdf resume files to disk, but the description does not prominently warn users about local file creation and persistence. Because resumes contain highly sensitive personal data, silent or poorly disclosed disk writes increase privacy and data retention risk, especially in shared or managed environments.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The description is written entirely in Chinese and the tags explicitly include "中文", which indicates the skill is oriented to a specific language/locale. There is no accompanying note that users may choose another language or that the Chinese-only behavior is a justified regional constraint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The document is written as a Chinese-only guide and begins with a Chinese title, with no indication that users may opt for another language or locale. Under the policy, forcing a specific language without user opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file is written entirely in Chinese and prescribes Chinese-only user-facing handling without an explicit language negotiation step. In a multilingual assistant, this can cause unsafe or exclusionary behavior by miscommunicating important privacy, discrimination, or data-handling guidance to users who do not understand Chinese, leading to consent and usability failures.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file is entirely written in Chinese and provides no indication that the skill should adapt to the user's language preference or offer alternatives. In a resume-optimization skill, forcing one language can degrade usability, cause incorrect outputs for non-Chinese users, and lead to inappropriate handling of bilingual or English resume/JD content, especially when ATS-targeted wording accuracy matters.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file contains natural-language guidance that assumes Chinese as the default output language, including explicit Chinese-only phrasing patterns and Chinese character limits. Because there is no opt-in, language selection, or stated region-specific justification in these lines, it may violate the policy against forcing a specific language or locale.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The module docstring describes a document export strategy centered on Chinese typography and claims cross-platform Chinese display support. This natural-language guidance imposes a locale-specific output policy in the skill text without an explicit user opt-in or justification that the tool is strictly region-specific.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/export_resume.py (reported line 203)May include surrounding context.

python
]
    for c in candidates:
        try:
            subprocess.run([c, "--version"], capture_output=True, timeout=10)
            return c
        except (FileNotFoundError, subprocess.TimeoutExpired, OSError):
            continue

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/export_resume.py (reported line 230)May include surrounding context.

python
docx_path,
    ]
    try:
        result = subprocess.run(cmd, capture_output=True, text=True, timeout=120)
        if result.returncode == 0:
            pdf_path = str(Path(docx_path).with_suffix(".pdf"))
            if Path(pdf_path).exists():

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The overview states that the skill uses the Chinese job market as its primary scenario and presents Chinese as the default operating context, while only saying it is compatible with English resumes. This may create a language/locale bias if the user has not opted into Chinese output or a China-specific optimization standard.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency is specified with a lower bound only, so builds can resolve to different versions over time, including vulnerable or incompatible releases. In a skill that processes user-supplied resume content and exports documents, dependency drift increases supply-chain risk and makes security posture unverifiable.

Content

Scanner excerpt · scripts/requirements.txt (reported line 1)May include surrounding context.

text
python-docx>=0.8.11
reportlab>=4.0.0

Unverifiable Dependency: python-docx has 2 known advisory(ies) (CVE-2016-5851 (Improper Restriction of XML External Entity Reference in python-docx); CVE-2016-5851 (python-docx before 0.8.6 allows context-dependent attackers to conduct XML Exter)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
86% confidence
Finding

python-docx has known historical XXE-related advisories, and because the manifest does not pin a version, it is impossible to verify that deployment avoids affected releases. In a document-processing workflow, XML parsing issues can expose local files or trigger unintended network access if an old vulnerable version is installed.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

The reportlab dependency is also unpinned, which means installation may pull any future matching version and leaves exposure to known vulnerable releases unclear. This is more concerning here because the skill explicitly exports Word/PDF files, making reportlab a likely runtime path for attacker-influenced input.

Content

Scanner excerpt · scripts/requirements.txt (reported line 2)May include surrounding context.

text
python-docx>=0.8.11
reportlab>=4.0.0

Unverifiable Dependency: reportlab has 8 known advisory(ies) (CVE-2023-33733 (Reportlab vulnerable to remote code execution); CVE-2020-28463 (Server-side Request Forgery (SSRF) via img tags in reportlab); CVE-2019-19450 (ReportLab vulnerable to remote code execution via paraparser) +5 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
94% confidence
Finding

reportlab has multiple serious historical advisories, including RCE/SSRF classes, and the unpinned manifest makes it impossible to prove that only patched versions are used. Given this skill's stated PDF export functionality and likely handling of user-provided text/content, exploitation risk is materially increased if an unsafe version is resolved.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.