Back to skill

Security audit

job-hunt

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its job-search purpose, but its setup and web-search tooling include credential and browser-automation risks users should review before installing.

Review this before installing if you plan to use live discovery, AnySearch API keys, or your logged-in browser. Prefer a pinned/verified installer, run setup in a user-scoped environment, avoid setting ANYSEARCH_API_BASE_URL unless you fully trust the endpoint, and understand that candidate profiles and application records are stored locally for reuse.

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 (3)

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding
Unpinned Python Dependencies Are Automatically Installed During Setup## Vulnerability Details **File Location**: `requirements.txt:1-3`, invoked by `scripts/setup_dependencies.py:183-190` **Vulnerability Type**: Supply-chain exposure through mutable dependency resolution **Risk Level**: Medium ### Vulnerable Code `requirements.txt:1-3`: ```text PyYAML>=6.0 python-docx>=1.1.0 PyMuPDF>=1.24 ``` `scripts/setup_dependencies.py:183-190`: ```python environment = root / "venv" python = environment / ("Scripts/python.exe" if os.name == "nt" else "bin/python") if not python.exists(): venv.EnvBuilder(with_pip=True).create(environment) run([ python, "-m", "pip", "install", "--disable-pip-version-check", "-r", SKILL / "requirements.txt", ]) ``` ### Technical Analysis All three Python dependencies use open-ended minimum-version constraints. Consequently, every new installation may resolve to a different package release. The setup routine automatically passes these mutable requirements to `pip` without a lock file, exact versions, or package hashes. Python packages can run build or installation logic during dependency installation. If a future matching release is compromised, malicious, or otherwise replaced upstream, the setup process can execute that release before the Skill performs its normal work. A benign but incompatible future release could also alter document parsing or rendering behavior. The private virtual environment limits package placement, but it does not sandbox installation-time code. Such code executes with the same operating-system identity and filesystem/network permissions as the agent running setup. ### Attack Path 1. An attacker compromises an upstream dependency account, release process, or distribution artifact. 2. The attacker publishes a version satisfying one of the open constraints, such as a future `PyMuPDF` release above `1.24`. 3. A user or agent runs `scripts/setup_dependencies.py`. 4. `pip ...[truncated 745 chars]
Remediation
## Remediation Suggestions 1. Replace minimum-version constraints with exact, reviewed versions. 2. Generate a hash-locked dependency file containing hashes for all direct and transitive packages. 3. Install with hash enforcement, for example: ```bash python -m pip install --require-hashes -r requirements.lock ``` 4. Update dependencies through a controlled review process rather than resolving new versions during first-run setup. 5. Run vulnerability and provenance checks against the resolved dependency set in CI. 6. Where practical, use a trusted internal package mirror and disable unexpected source distributions. 7. Keep the private virtual environment, but do not treat it as a security sandbox.

T08 · Insecure Dependencies

Warning
Location
README_EN.md:63
Finding
Installation Instructions Execute an Unpinned npx Package## Vulnerability Details **File Location**: `README_EN.md:63-67` **Vulnerability Type**: Mutable package execution through `npx` **Risk Level**: Medium ### Vulnerable Code ```markdown ### Option 1: install with `npx skills` ```bash npx skills add addsumtech/job-hunt ``` ``` ### Technical Analysis The documented command invokes the `skills` npm package without specifying an exact version. When the package is not already present, `npx` can retrieve the currently resolved registry release and execute it immediately. This creates a mutable code-execution path: the code that runs during installation can change after the Skill itself has been reviewed. No integrity hash, expected package version, or publisher verification is supplied in the documented command. The repository argument identifies the Skill source but does not constrain the implementation of the `skills` installer that processes it. ### Attack Path 1. An attacker compromises the npm package, its maintainer account, or its release pipeline. 2. A malicious release becomes the version resolved by the unpinned `npx skills` command. 3. A user follows the documented installation instructions. 4. `npx` downloads and executes the malicious package. 5. The package runs with the user's privileges and can modify agent Skill directories or other user-owned files. ### Impact Assessment Exploitation can result in arbitrary code execution as the installing user. The attacker could tamper with the installed Skill, modify agent configuration, read user-accessible files, or establish additional user-level persistence. The command does not itself request administrative privileges, so the direct privilege scope is normally limited to the invoking user.
Remediation
## Remediation Suggestions 1. Pin the installer to a reviewed version: ```bash npx skills@<reviewed-version> add addsumtech/job-hunt ``` 2. Document the expected npm publisher, package provenance, and release checksum. 3. Avoid recommending confirmation-skipping options for first-time installation. 4. Prefer a verified release archive or signed repository checkout where possible. 5. Add explicit instructions for inspecting the resolved package version before execution. 6. Review and deliberately update the pinned installer version when security fixes are required.

T09 · Insecure Skill Coding Practices

Warning
Location
third_party/anysearch/anysearch_cli.js:13
Finding
AnySearch API Credential Can Be Forwarded to an Arbitrary or Plaintext Endpoint## Vulnerability Details **File Location**: `third_party/anysearch/anysearch_cli.js:13-77` **Vulnerability Type**: Credential exposure through unrestricted endpoint override and plaintext HTTP support **Risk Level**: Medium ### Vulnerable Code ```javascript const API_BASE_URL = ( process.env.ANYSEARCH_API_BASE_URL || "https://api.anysearch.com" ).replace(/\/$/, ""); function restRequest( method, endpointPath, apikey, payload = undefined, params = [] ) { const urlObj = new URL(API_BASE_URL + endpointPath); for (const [key, value] of params) { urlObj.searchParams.append(key, value); } const body = payload === undefined ? "" : JSON.stringify(payload); const options = { hostname: urlObj.hostname, port: urlObj.port || undefined, path: urlObj.pathname + urlObj.search, method, headers: { "Content-Type": "application/json", "X-Anysearch-Client": CLIENT_HEADER, }, }; if (body) { options.headers["Content-Length"] = Buffer.byteLength(body); } if (apikey) { options.headers["Authorization"] = `Bearer ${apikey}`; } return new Promise((resolve, reject) => { const transport = urlObj.protocol === "http:" ? http : https; const req = transport.request(options, (res) => { let data = ""; res.on("data", (chunk) => (data += chunk)); res.on("end", () => { // Response processing omitted. }); }); if (body) { req.write(body); } req.end(); }); } ``` The API key is initialized from the process environment later in the same file: ```javascript const opts = { apiKey: process.env.ANYSEARCH_API_KEY || "" }; ``` ### Technical Analysis `ANYSEARCH_API_BASE_URL` can replace the default API origin with any URL accepted by the JavaScript URL parser. The request function then attaches the AnySearch bearer credential to th ...[truncated 2155 chars]
Remediation
## Remediation Suggestions 1. Require HTTPS for every API endpoint: ```javascript if (urlObj.protocol !== "https:") { throw new Error("AnySearch API endpoints must use HTTPS"); } ``` 2. Allowlist `api.anysearch.com` by default and reject other hosts. 3. If custom endpoints are a required enterprise feature, require an explicit command-line opt-in and user confirmation before sending credentials. 4. Do not forward `ANYSEARCH_API_KEY` to a custom origin automatically. Require a separate credential variable scoped to that custom endpoint. 5. Reject URLs containing embedded usernames or passwords. 6. Document exactly which query fields and URLs are transmitted to the external service. 7. Consider restricting API keys by origin, account scope, quota, and expiration where supported. 8. Add tests confirming that plaintext HTTP and unapproved hosts are rejected before an authorization header is created.
Vulnerability Patterns
  • 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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (316)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill writes and overwrites local profile files, manages backups, and maintains multilingual persistence on disk. Persistent storage of user CV/profile data is expected only if clearly disclosed and consented to; here it is a meaningful privacy and data-retention concern.

Static analysis

Detected: suspicious.dangerous_exec, suspicious.dynamic_code_execution, suspicious.obfuscated_code

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/browser_session.mjs:180

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
evals/lint_assertions.py:211

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/tests/opencli-dom.test.cjs:21

Potential obfuscated payload detected.

Warn
Code
suspicious.obfuscated_code
Location
scripts/tests/test_cross_format_parity.py:192

Potential obfuscated payload detected.

Warn
Code
suspicious.obfuscated_code
Location
scripts/tests/test_render_artifact_integrity.py:44

Potential obfuscated payload detected.

Warn
Code
suspicious.obfuscated_code
Location
scripts/tests/test_render_cv.py:16