Back to skill

Security audit

Resume Tailor

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Chinese-language job-preparation assistant that uses resume content, web research, and a local DOCX renderer without hidden persistence, credential access, or destructive behavior.

Before installing, treat resumes as sensitive personal data, review any rewritten claims for accuracy, and install dependencies in an isolated environment. The main practical concern is dependency hygiene, not hidden behavior: the publisher should pin python-docx and clarify the skill is intended for Chinese-language job-preparation workflows.

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

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Unpinned Third-Party Dependency Allows Unreviewed Future Releases

Content
View full analysis

Vulnerability Details

File Location: requirements.txt:1
Related Locations: README.md:11-16, generate_resume.py:15-20
Vulnerability Type: Unpinned third-party dependency and insufficient supply-chain integrity controls
Risk Level: Medium

Vulnerable Code

requirements.txt:1:

text
python-docx>=1.1.0

The installation instructions in README.md:11-16 also install the latest resolver-selected release without integrity verification:

bash
# Install dependency
pip install python-docx

# Generate sample resume
python scripts/generate_resume.py examples/sample_resume.json 示例简历.docx

The dependency is imported and trusted at runtime in generate_resume.py:15-20:

python
try:
    from docx import Document
    from docx.shared import Pt, Inches, RGBColor
    from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_TAB_ALIGNMENT
    from docx.oxml.ns import qn
except ImportError:

Technical Analysis

The lower-bound-only version constraint permits any future python-docx release at or above version 1.1.0. The README is less restrictive because it installs the package without any version constraint. The project provides no lockfile, upper version bound, package hashes, or other integrity verification.

Consequently, the dependency installed by a user may differ from the version reviewed during the audit. Python package installation can execute package-controlled build hooks, while subsequent imports execute package initialization code. If the legitimate package distribution or an authorized publisher account were compromised, the existing dependency rules could automatically accept a malicious future release.

This finding does not establish that the current python-docx package is malicious. The vulnerability is the project's failure to constrain and verify the external code it installs and executes.

Attack Path

  1. An attacker compromises the upstre ...[truncated 1271 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin python-docx to an exact version that has been reviewed and tested:

    text
    python-docx==<reviewed-version>
    
  2. Generate and verify cryptographic hashes for the dependency and its transitive dependencies, then require hash validation:

    bash
    python -m pip install --require-hashes -r requirements.txt
    
  3. Commit a reproducible lockfile containing exact versions and hashes for all transitive dependencies.

  4. Update the README so its installation command uses the locked requirements rather than installing an unconstrained package directly:

    bash
    python -m pip install --require-hashes -r requirements.txt
    
  5. Perform dependency updates through a controlled review process that includes release-note review, vulnerability scanning, and functional testing.

  6. Install and execute dependencies inside a dedicated, non-privileged virtual environment or isolated build container. Avoid installing packages as an administrator or root user.

Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (10)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

声明描述的是一个覆盖调研、改写、面试准备的多步骤求职辅助 Skill,且输入应支持 PDF/Word/文本简历,并结合目标公司、岗位和 JD 进行处理。实际代码是一个独立的 Python 脚本,用 python-docx 将既定结构的 JSON 数据渲染成统一样式的 Word 简历。代码没有网络检索、没有解析 JD、没有对简历内容进行语义改写、没有生成面试材料,也没有处理 PDF/Word/文本输入。虽然“输出统一排版的 .docx”与声明中的一小部分相关,但这只是整个声明能力中的一个子功能,而且代码甚至不包含“改写”逻辑,仅负责格式化。因此描述与实际行为存在明显且实质性的能力不匹配。

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest description lists broad activation scenarios such as “求职”, “改简历”, and “准备面试…等”, which are common everyday phrases and do not clearly bound when this skill should or should not activate. Because the trigger scope is open-ended and lacks exclusion conditions or negative examples, the skill could be invoked unintentionally for general career-advice conversations.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The file provides example utterances for invoking the skill, but it does not define whether these are the only supported triggers or what conditions exclude activation. Phrases like “帮我准备” and “帮我全套准备” are generic within job-search discussions and may collide with ordinary conversation if used as activation guidance.

Content

No source excerpt is available for this finding.

Ssd 4

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This section explicitly promotes '能力迁移表述' and even gives the example of packaging course projects as product capability, then prepares interview talking points to defend those translated claims. In a job-application context, that can facilitate deceptive self-presentation and help users sustain misleading claims under interviewer scrutiny, even if the skill separately says not to fabricate experience.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The module docstring presents usage and behavior only in Chinese, and the script later defaults to a Chinese output filename and Chinese section labels, indicating a fixed language/locale experience. The file does not offer any user opt-in, language selection, or justification that the tool is intended only for a Chinese-language or region-specific context.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The dependency is specified as python-docx>=1.1.0, which allows any future release to be installed and makes builds non-reproducible. This can introduce accidental exposure to newly published vulnerable or breaking versions through the supply chain, even if no currently known exploit is guaranteed here.

Content

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

text
python-docx>=1.1.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
83% confidence
Finding

The manifest does not pin python-docx, so it is not possible to verify whether the resolved version avoids historical XXE-related advisories affecting older releases. In this skill's context, users may upload untrusted resume files, which makes document-processing dependencies more security-sensitive because vulnerable parsers could be exposed to attacker-controlled content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This JSON file contains user-facing natural-language content exclusively in Chinese, including field values for education, experience, and skills. Under the policy rule for language/locale, this can be considered a forced language choice because no opt-in, alternative locale, or justification is provided.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The sample content is entirely presented in Chinese, including field values for name, education, experience, and skills, which reflects a fixed language/locale choice. For a general-purpose skill artifact, this can violate language/locale policy when no user choice or explicit region-specific justification is provided.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.