Back to skill

Security audit

Jd Truth Detector

Security checks for vulnerabilities and agentic risk

Overview

This is a straightforward job-description analysis skill that uses user-provided inputs and a configured LLM endpoint, with privacy and dependency hygiene caveats.

Install only if you are comfortable sending job descriptions and any resume content to the LLM endpoint you configure. Prefer a trusted or local endpoint for sensitive resumes, avoid URL mode if you do not want the job site contacted, and consider pinning dependencies with a lockfile before production use.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (10)

Lp3

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding
The skill documentation advertises capabilities that read environment variables, access local files, write output files, and make network requests, but it does not declare any permissions. This creates a transparency and consent gap: users or hosting platforms may not realize the skill can access sensitive resume data, API keys, local documents, or external URLs, increasing the risk of unintended data exposure or over-privileged execution.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The code sends raw resume_text to llm.chat() with no indication in this file of consent, minimization, redaction, or provider-boundary controls. Resumes commonly contain sensitive personal data (email, phone, employment history, location), so forwarding them to an external or user-configurable OpenAI-compatible LLM can create unintended privacy exposure and compliance risk.

Unpinned Dependencies

Low
Category
Supply Chain
Content
openai>=1.30.0
pyyaml>=6.0
jinja2>=3.1.0
python-docx>=1.1.0
Confidence
93% confidence
Finding
The dependency is specified with a lower bound only, so future installs may resolve to different versions over time. This weakens build reproducibility and can unintentionally pull in a newly vulnerable or incompatible release from the upstream package ecosystem.

Unpinned Dependencies

Low
Category
Supply Chain
Content
openai>=1.30.0
pyyaml>=6.0
jinja2>=3.1.0
python-docx>=1.1.0
pdfplumber>=0.11.0
Confidence
93% confidence
Finding
Using an unpinned PyYAML version allows dependency drift, making builds non-reproducible and increasing supply-chain risk if a later upstream release introduces a vulnerability or breaking behavior. This is especially relevant because YAML parsers are commonly security-sensitive when used on untrusted input.

Unpinned Dependencies

Low
Category
Supply Chain
Content
openai>=1.30.0
pyyaml>=6.0
jinja2>=3.1.0
python-docx>=1.1.0
pdfplumber>=0.11.0
beautifulsoup4>=4.12.0
Confidence
96% confidence
Finding
The Jinja2 requirement is not pinned exactly, so environments may resolve to different versions over time. Because this skill generates Markdown and shareable HTML reports, template-engine behavior matters, and dependency drift can expose the application to newly introduced template-related flaws.

Unpinned Dependencies

Low
Category
Supply Chain
Content
openai>=1.30.0
pyyaml>=6.0
jinja2>=3.1.0
python-docx>=1.1.0
pdfplumber>=0.11.0
beautifulsoup4>=4.12.0
httpx>=0.27.0
Confidence
90% confidence
Finding
An unpinned python-docx dependency permits version drift across installations, reducing reproducibility and potentially introducing future parser-related vulnerabilities without code changes. Document-processing libraries are often exposed to untrusted content and should be tightly controlled.

Unpinned Dependencies

Low
Category
Supply Chain
Content
pyyaml>=6.0
jinja2>=3.1.0
python-docx>=1.1.0
pdfplumber>=0.11.0
beautifulsoup4>=4.12.0
httpx>=0.27.0
pytest>=8.0.0
Confidence
90% confidence
Finding
The pdfplumber package is specified with only a minimum version, so later installs may pull newer releases automatically. Since the skill accepts PDF input, uncontrolled upgrades in a file-parsing library can increase exposure to parsing bugs or denial-of-service issues.

Unpinned Dependencies

Low
Category
Supply Chain
Content
jinja2>=3.1.0
python-docx>=1.1.0
pdfplumber>=0.11.0
beautifulsoup4>=4.12.0
httpx>=0.27.0
pytest>=8.0.0
Confidence
88% confidence
Finding
beautifulsoup4 is unpinned, which creates non-reproducible installs and avoidable supply-chain uncertainty. Given the skill supports URL scraping, parser behavior changes or vulnerable future releases could affect security and reliability.

Unpinned Dependencies

Low
Category
Supply Chain
Content
python-docx>=1.1.0
pdfplumber>=0.11.0
beautifulsoup4>=4.12.0
httpx>=0.27.0
pytest>=8.0.0
Confidence
90% confidence
Finding
The httpx dependency is not pinned exactly, so deployments may consume different versions over time. For a skill that fetches remote content from job sites, network-client dependency drift can introduce transport, redirect-handling, or request-processing issues unexpectedly.

Unpinned Dependencies

Low
Category
Supply Chain
Content
pdfplumber>=0.11.0
beautifulsoup4>=4.12.0
httpx>=0.27.0
pytest>=8.0.0
Confidence
87% confidence
Finding
pytest is listed with a minimum version only, allowing future dependency drift. Although typically a development dependency, unpinned tooling still weakens reproducibility and may introduce vulnerable or unstable versions into CI or packaged environments.

Static analysis

No suspicious patterns detected.