Back to skill

Security audit

Job Auto Apply

Security checks for vulnerabilities and agentic risk

Overview

This skill is not clearly malicious, but it handles sensitive job-applicant data and claims high-impact auto-apply behavior while its implementation, domains, and safety controls are inconsistent.

Install only if you are comfortable sharing applicant details with the external AI provider and manually reviewing every action. Treat the current package as a prototype, keep dry-run and confirmation enabled, restrict permissions on any profile file, and avoid using captcha/proxy guidance or unattended submissions on job platforms.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T09 · Insecure Skill Coding Practices

Warning
Location
job_search_apply.py:15
Finding

API Credential and Applicant Data Sent to an Inconsistently Documented Domain

Content
View full analysis
dict: r = requests.post( f"{_API_BASE}/pilot", headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"}, json=body, timeout=60, ) return r.json() ``` ### Technical Analysis The executable sends `SKILLBOSS_API_KEY` as a bearer credential to `api.heybossai.com`. This destination is inconsistent with the SkillBoss service identity presented elsewhere in the project. In particular, the integration examples in `platform_integration.md` use `api.skillboss.com`. The request body also contains AI prompts generated from job descriptions and applicant attributes. Depending on the invoked function, those prompts include the applicant's name, years of experience, LinkedIn URL, and cover-letter template. The Skill does not explain the relationship between the two domains, allow the user to approve or configure the endpoint, validate the expected service identity beyond normal TLS handling, or disclose the exact applicant fields transmitted. It also calls `r.json()` without first calling `raise_for_status()`, which can obscure authentication, redirection, or server-side failures. The network request is related to the declared AI functionality, but transmitting the bearer credential to an inconsistently documented domain exceeds what users can reasonably verify from the supplied documentation. ### Attack Path 1. A user obtains a SkillBoss API key and places it in `SKILLBOSS_API_KEY`. 2. The user invokes compatibility analysis or cover-letter generation. 3. `_pilot()` constructs an HTTPS request to `https://api.heybossai.com/v1/pilot`. 4. The request se ...[truncated 855 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
platform_integration.md:170
Finding

Integration Guidance Sends Complete Resume Contents to an External AI Provider

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:32
Finding

Default Setup Stores an Extensive Applicant Profile in a Plaintext File

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (24)

Tainted flow: 'SKILLBOSS_API_KEY' from os.environ (line 15, credential/environment) → requests.post (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · job_search_apply.py (reported line 20)May include surrounding context.

python
def _pilot(body: dict) -> dict:
    r = requests.post(
        f"{_API_BASE}/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json=body,

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill description claims end-to-end automated job search and application behavior that the underlying implementation apparently does not perform. This mismatch is security-relevant because users may authorize sensitive profile sharing, credential use, or live submissions based on misleading claims, reducing informed consent and making review of actual behavior harder.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · platform_integration.md (reported line 245)May include surrounding context.

Credential Storage

python
from cryptography.fernet import Fernet
import keyring

# Store credentials securely
keyring.set_password("job_automation", "linkedin", encrypted_password)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · platform_integration.md (reported line 248)May include surrounding context.

Credential Storage

python
from cryptography.fernet import Fernet
import keyring

# Store credentials securely
keyring.set_password("job_automation", "linkedin", encrypted_password)

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

Recommending residential proxies to reduce captcha blocks is explicit guidance for disguising automation and evading platform detection. For a mass-application tool operating across employment platforms, this materially raises abuse potential, including stealthy policy evasion, account suspension risk, and large-scale unwanted submissions.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill advertises network, environment variable, and file-writing capabilities but does not declare any explicit tool scope or permissions boundaries. In an agent setting, this increases the risk of overbroad execution, unexpected data access, and unintended side effects because the runtime may grant more capability than users or reviewers can easily infer from the manifest.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill processes highly sensitive personal data—resume contents, contact details, work authorization, and application answers—and sends that information to external AI services and job platforms, but the description does not clearly warn users about these third-party disclosures. This undermines informed consent and creates privacy, compliance, and data-handling risks, especially if users assume processing is local.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill supports actual application submission, which is an external, potentially irreversible action with reputational and practical consequences for the user, yet the description does not foreground that risk clearly enough. In this context, an agent could submit unwanted applications, send incorrect information, or apply at scale before the user understands the consequences.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The module docstring says the script 'automates application submissions across multiple platforms,' and related comments/docstrings describe applying to jobs. In reality, search_jobs returns no real jobs and apply_to_job only prints status and returns a simulated result object without any platform interaction or submission logic.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · job_search_apply.py (reported line 16)May include surrounding context.

python
from enum import Enum

SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]
_API_BASE = "https://api.heybossai.com/v1"


def _pilot(body: dict) -> dict:

External Transmission

Medium
Category
Data Exfiltration
Confidence
80% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · job_search_apply.py (reported line 20)May include surrounding context.

python
def _pilot(body: dict) -> dict:
    r = requests.post(
        f"{_API_BASE}/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json=body,

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The compatibility analysis sends applicant and job data, including personal identifiers and employment details, to an external LLM API without any visible consent, minimization, or disclosure mechanism. In a job-application skill, this is more sensitive than usual because resumes and profile data often contain PII and career history that users may not expect to be shared with a third party for scoring.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Cover-letter generation transmits job details and applicant profile information to an external service, again without visible notice or consent controls. Because this skill is specifically for job applications, the transmitted content may include sensitive professional history and identifying information, making undisclosed third-party sharing a meaningful privacy risk.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

The function documentation states it will apply to a job posting and conditionally submit unless dry_run is enabled. However, even when dry_run=False, the function only prints a success message and returns a fabricated status record; it does not navigate, fill forms, upload documents, or submit anything.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The auto_apply_workflow documentation presents a complete end-to-end automated application workflow. But search_jobs is explicitly placeholder/example-only and returns an empty list, while downstream application behavior is simulated, so the workflow does not actually execute the stated end-to-end automation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The document details automated form completion and application submission on external job platforms without clearly emphasizing that the skill can act on user accounts and create real submissions. In this context, insufficient warning is risky because accidental or overly broad automation could submit inaccurate applications, alter account state, or trigger platform enforcement against the user.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The guidance to use 2Captcha/Anti-Captcha and to automate around captcha challenges introduces an evasion capability unrelated to legitimate job-search functionality. In the context of a job auto-apply skill that already performs account actions on third-party sites, this increases the risk of bypassing platform anti-bot protections and enabling unauthorized or policy-violating submissions at scale.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The SkillBoss API examples send resume text, job descriptions, profile data, and company research to an external service, but the document does not clearly require informed user consent or warn about privacy and data-handling implications. Because job applications commonly contain highly sensitive personal and professional data, undisclosed external transmission creates meaningful confidentiality and compliance risk.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This is a duplicate detection of the same outbound SkillBoss request used for resume tailoring. It still represents a real privacy-relevant transmission because sensitive application materials are sent to an external service.

Content

Scanner excerpt · platform_integration.md (reported line 177)May include surrounding context.

md
def tailor_resume(resume_text, job_description):
    """Customize resume to highlight relevant skills via SkillBoss API Hub"""
    result = requests.post(
        "https://api.skillboss.com/v1/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json={

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This is a duplicate detection of the same outbound SkillBoss request used for resume tailoring. It still represents a real privacy-relevant transmission because sensitive application materials are sent to an external service.

Content

Scanner excerpt · platform_integration.md (reported line 177)May include surrounding context.

md
def tailor_resume(resume_text, job_description):
    """Customize resume to highlight relevant skills via SkillBoss API Hub"""
    result = requests.post(
        "https://api.skillboss.com/v1/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json={

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The hardcoded external domain reference confirms that sensitive resume/job data is intended to be sent off-platform to SkillBoss. In this skill context, external AI enrichment is not inherently malicious, but it is security-relevant because it affects confidentiality and third-party exposure of personal application materials.

Content

Scanner excerpt · platform_integration.md (reported line 178)May include surrounding context.

md
def tailor_resume(resume_text, job_description):
    """Customize resume to highlight relevant skills via SkillBoss API Hub"""
    result = requests.post(
        "https://api.skillboss.com/v1/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json={
            "type": "chat",

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This is a duplicate detection of the same external request for cover-letter generation. The risk remains that sensitive candidate data is disclosed to a third-party API without sufficiently explicit safeguards in the documentation.

Content

Scanner excerpt · platform_integration.md (reported line 201)May include surrounding context.

md
def generate_cover_letter(job, profile, company_research):
    """Create personalized cover letter via SkillBoss API Hub"""
    result = requests.post(
        "https://api.skillboss.com/v1/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json={

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This is a duplicate detection of the same external request for cover-letter generation. The risk remains that sensitive candidate data is disclosed to a third-party API without sufficiently explicit safeguards in the documentation.

Content

Scanner excerpt · platform_integration.md (reported line 201)May include surrounding context.

md
def generate_cover_letter(job, profile, company_research):
    """Create personalized cover letter via SkillBoss API Hub"""
    result = requests.post(
        "https://api.skillboss.com/v1/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json={

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The referenced SkillBoss endpoint is used for third-party cover-letter generation and therefore expands data exposure beyond the local application environment. Because this skill handles job-candidate data, the absence of prominent privacy warnings makes the transmission security-significant.

Content

Scanner excerpt · platform_integration.md (reported line 202)May include surrounding context.

md
def generate_cover_letter(job, profile, company_research):
    """Create personalized cover letter via SkillBoss API Hub"""
    result = requests.post(
        "https://api.skillboss.com/v1/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json={
            "type": "chat",

Static analysis

No suspicious patterns detected.