resume-jd-matcher

Security checks across malware telemetry and agentic risk

Overview

The skill has a coherent resume-matching purpose, but it handles full resume data while using hard-coded API credentials and executing an unreviewed local Python file.

Before installing, verify or remove the absolute dynamic import, replace bundled API keys with your own secure credentials or placeholders, confirm the exact input/output folders, and decide whether storing full parsed resume text is acceptable for your privacy obligations.

VirusTotal

64/64 vendors flagged this skill as clean.

View on VirusTotal

Risk analysis

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

#
ASI04: Agentic Supply Chain Vulnerabilities
High
What this means

On invocation, the skill may run unreviewed local code with access to the resume folders and generated reports.

Why it was flagged

The skill entry point executes a hard-coded workspace file that is not one of the supplied files, so the reviewed package does not show what code will actually run.

Skill content
spec_from_file_location("resume_match", r"C:\Users\Administrator\.openclaw\workspace\resume_match_v2.0.2.py"); spec.loader.exec_module(resume_match)
Recommendation

Package and import the reviewed module by relative path, remove the absolute dynamic import, and ensure the entry point uses files included in the manifest.

#
ASI03: Identity and Privilege Abuse
High
What this means

If API mode is used, resume processing could run through provider accounts and keys the user did not supply or control, and the bundled secrets are exposed to anyone installing the skill.

Why it was flagged

The bundled configuration contains real-looking API credentials for multiple AI providers even though the registry declares no primary credential.

Skill content
active_provider: "tencent" ... tencent: api_key: "sk-sp-sq7Y7eo9..."; alibaba: api_key: "sk-sp-3e0faf..."
Recommendation

Remove all real credentials from the package, use placeholders only, require user-provided secrets through a secure credential mechanism, and declare the credential requirement in metadata.

#
ASI02: Tool Misuse and Exploitation
Medium
What this means

The skill may scan or write to a different local folder than the user expects, which matters because resumes contain personal information.

Why it was flagged

The handler uses fixed folders rather than deriving the target from the user's request; the SKILL.md examples instead refer to D: drive paths.

Skill content
JD_FOLDER = r"C:\ResumeJD\JD"; JL_FOLDER = r"C:\ResumeJD\JL"; OUTPUT_FOLDER = r"C:\ResumeJD\JG"
Recommendation

Resolve paths from explicit user input or a clearly documented config file, show the folders before processing, and ask for confirmation before batch analysis.

#
ASI06: Memory and Context Poisoning
Medium
What this means

Extra copies of candidate resume contents may remain on disk after processing, increasing privacy and retention risk.

Why it was flagged

The script writes extracted full resume/JD text into JSON cache files under a parsed directory, but the user-facing documentation primarily describes Excel and log outputs.

Skill content
data = {'file_name': os.path.basename(file_path), 'folder': os.path.basename(base_dir), 'full_text': text_content, 'parse_time': ...}; with open(parsed_json, 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=2)
Recommendation

Disclose the parsed JSON cache, make it opt-in or easy to disable, document retention and cleanup, and avoid storing full text unless necessary.

#
ASI07: Insecure Inter-Agent Communication
Medium
What this means

Candidate personal data will be placed into AI/subagent session context and may be retained according to the platform's session-history behavior.

Why it was flagged

Subagent mode sends the full extracted resume text to child agent sessions for analysis, which is expected for this skill but sensitive.

Skill content
prompt includes "## 简历内容:\n{resume_text}" and sessions_spawn(task=task_data['task'], runtime="subagent", mode="run", timeoutSeconds=60)
Recommendation

Use only with resumes you are allowed to process, confirm the platform's AI/session retention policy, and consider redacting unnecessary personal data before running.