Back to skill

Security audit

BDJobs Job Apply

Security checks for vulnerabilities and agentic risk

Overview

The skill matches BDJobs automation, but it stores and prints sensitive login data and can make live account changes without strong confirmation gates.

Review this carefully before installing. Use it only in a private environment where command output is not logged broadly, and do not enter BDJobs credentials unless you accept local plaintext storage and transmission to BDJobs-related APIs. Manually review each job, cancellation, and salary change before running live action scripts, and rotate or remove stored tokens/passwords after use.

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

Error
Location
scripts/bdjobs-login.js:42
Finding

BDJobs Credentials and Authentication Tokens Stored in Plaintext

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/bdjobs-login.js:77
Finding

Reusable Authentication Tokens Disclosed Through Standard Output

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/bdjobs-search.js:145
Finding

Full Resume Duplicated into Search Results and Standard Output

Content
View full analysis
[String(j.jobId), j])).values()]; console.log(JSON.stringify(unique.slice(0, 50), null, 2)); ``` ### Technical Analysis The script reads the complete resume and inserts the same `resumeText` value into every result object. It then prints up to 50 result objects to stdout. The resume is therefore duplicated many times even though it is not needed to describe the returned jobs. Resumes commonly contain names, telephone numbers, email addresses, physical locations, education history, employment history, and other personal information. Repetition increases the amount of sensitive data captured by transcripts and logs and makes redaction or deletion more difficult. The resume is not shown being transmitted to the external job-search endpoint by this code. The confirmed disclosure channel is local standard output and any systems that capture it. ### Attack Path 1. The user stores a resume in `data/resume.md`. 2. The user or Agent runs `scripts/bdjobs-search.js`. 3. The script loads the complete resume into `resumeText`. 4. Each accepted job object receives a copy of the resume. 5. Up to ...[truncated 731 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (26)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

There is a clear description-to-code mismatch. The declared purpose describes a full BDJobs automation skill with multiple user-facing capabilities, but the supplied code is only a stub that prints a console message and contains no functional implementation. This is a materially different actual behavior because the code does not perform the advertised actions at all.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description describes a BDJobs automation skill with network/service-oriented job-search and application-management functionality. The supplied code chunk only initializes a local job profile artifact by writing provided resume text into data/resume.md. While resume setup could be loosely related to a job application workflow, this code does not implement the core declared capabilities and its primary purpose is materially different from the stated BDJobs automation behavior.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 62)May include surrounding context.

md
3. Run `scripts/bdjobs-fetch-jobs.js` with `--keyword`, `--isFresher`, `--postedWithin`, `--pg`, and `--jobLocation` to fetch raw job lists from `GetJobSearch`

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 133)May include surrounding context.

md
3. Run `scripts/bdjobs-fetch-jobs.js` with `--keyword`, `--isFresher`, `--postedWithin`, `--pg`, and `--jobLocation` to fetch raw job lists from `GetJobSearch`

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 135)May include surrounding context.

md
3. Run `scripts/bdjobs-fetch-jobs.js` with `--keyword`, `--isFresher`, `--postedWithin`, `--pg`, and `--jobLocation` to fetch raw job lists from `GetJobSearch`

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

Printing the full logged-in data object exposes sensitive tokens directly to stdout, which is commonly captured by terminal logs, orchestrators, CI systems, telemetry, and debugging tools. Because these values appear to be active session credentials, disclosure can enable immediate account takeover or unauthorized job-application actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill directs collection and local storage of BDJobs usernames, passwords, resume content, and auth tokens in plaintext-like local files without any explicit consent, masking, encryption, retention limits, or access controls. If the skill directory, logs, backups, or downstream tools are exposed, an attacker could reuse credentials and session artifacts to take over the user's BDJobs account and harvest sensitive personal data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill enables automated job applications, cancellations, and salary updates on a live user account without requiring an explicit confirmation checkpoint immediately before each account-changing action. In context, these are real external side effects that can affect a user's employment prospects, account state, and professional reputation if triggered mistakenly or through prompt manipulation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The reference explicitly instructs the skill to use local files for profile and authentication data, including logged-in session material such as token, refreshToken, encryptId, and decodeId. Storing and handling these credentials without any warning, protection guidance, or minimization increases the chance of credential leakage, unauthorized account access, and session hijacking if the local environment or logs are exposed.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This script performs a real job application POST and persists the result based solely on a command-line jobId, with no in-script user confirmation, preview, or final consent gate before the irreversible action. In the context of an automation skill that can search and auto-apply to jobs, this creates a meaningful risk of unauthorized or unintended applications being submitted on behalf of the user, potentially harming the user's employment prospects and account reputation.

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 · references/api.md (reported line 44)May include surrounding context.

md
}

function buildSearchUrl({ keyword, isFresher, pg, jobLocation, postedWithin }) {
  const u = new URL('https://api.bdjobs.com/Jobs/api/JobSearch/GetJobSearch');
  const params = {
    Icat: '', industry: '', category: '', org: '', jobNature: '', Fcat: '', location: jobLocation || '',
    Qot: '', jobType: '', jobLevel: '', postedWithin: String(postedWithin || ''), deadline: '', keyword: keyword || '', pg: String(pg || 1),

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 · scripts/bdjobs-fetch-jobs.js (reported line 20)May include surrounding context.

js
}

function buildSearchUrl({ keyword, isFresher, pg, jobLocation, postedWithin }) {
  const u = new URL('https://api.bdjobs.com/Jobs/api/JobSearch/GetJobSearch');
  const params = {
    Icat: '', industry: '', category: '', org: '', jobNature: '', Fcat: '', location: jobLocation || '',
    Qot: '', jobType: '', jobLevel: '', postedWithin: String(postedWithin || ''), deadline: '', keyword: keyword || '', pg: String(pg || 1),

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 · scripts/bdjobs-search.js (reported line 30)May include surrounding context.

js
}

function buildSearchUrl({ keyword, isFresher, pg, jobLocation, postedWithin }) {
  const u = new URL('https://api.bdjobs.com/Jobs/api/JobSearch/GetJobSearch');
  const params = {
    Icat: '', industry: '', category: '', org: '', jobNature: '', Fcat: '', location: jobLocation || '',
    Qot: '', jobType: '', jobLevel: '', postedWithin: String(postedWithin || ''), deadline: '', keyword: keyword || '', pg: String(pg || 1),

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code reads credentials from a local JSON file and sends them over HTTPS to external BDJobs authentication endpoints. There is no confirmation prompt, warning message, or explanatory comment/docstring disclosing that sensitive credentials will be transmitted.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script stores authentication artifacts including access token, refresh token, and account identifiers in a local JSON file and then includes them in console output. This creates multiple leakage paths: other local processes, logs, CI output, shell history collectors, or support artifacts could expose reusable credentials that allow account access or session hijacking.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The script writes bearer-style authentication material to disk in a predictable location under the working directory without any evident access controls or user disclosure. If the file is read by another local user, bundled into backups, committed accidentally, or collected by tooling, an attacker may reuse the token and refresh token to access or maintain access to the victim's BDJobs account.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script sends a persistent user identifier (GUID) to a remote BDJobs-related endpoint without any in-file validation, minimization, or user-consent check at the point of use. In this skill’s context, that network call is core functionality, but it still exposes account-linked data flow and could leak or misuse personal activity information if the endpoint, configuration, or surrounding execution environment is compromised.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

This code sends the user's GUID to a remote applied-jobs API and also fetches job data from external BDJobs endpoints, then emits records containing resumeText loaded from disk alongside job details. The file has no confirmation prompt, user-facing disclosure, or explanatory comments warning that personal data and profile-linked identifiers are being used in network-backed processing.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The request body includes userGuid, which is account-identifying data, and sends it to a remote HTTPS endpoint. This file has no confirmation prompt, explanatory comment/docstring, or user-facing disclosure before transmitting that data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The script stores the full API response in data/lastSalaryUpdateResult.json without any filtering, retention control, or protection. If the response contains personal data, account metadata, or server-side tokens/details, that information becomes available to other local processes or users with filesystem access, increasing the risk of privacy leakage and unintended disclosure.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The file specifies "Dhaka/Bangladesh (GMT+6)" as the time zone, which imposes a specific locale in configuration without any indication that the user selected it or that the skill is region-specific. This can violate language/locale policy when a skill assumes a locale by default rather than offering choice or documenting the constraint.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The file states that data/appliedJobIds.json will be refreshed and later modified on success, but it does not warn users that local state files will be written or changed. For markdown descriptions, SQP-2 requires warnings when behavior can affect user data or system integrity.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The script reads account-related local files containing login and user details with no in-file access control checks, integrity validation, or disclosure of sensitive-data handling. In isolation this is expected for automation, but in an agent skill that processes credentials and account state, unguarded local reads increase the risk of privacy exposure or use of stale/tampered identity data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

On successful cancellation, the script modifies appliedJobIds.json by removing the job ID. Although this is part of local state tracking, the file write occurs without any confirmation, explanatory comment, or user-facing notice in the code.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The script writes lastUndoResult.json to the local data directory, which is a file-modifying operation. In this file there is no confirmation prompt, comment, or user-facing notice explaining that undo results will be persisted to disk.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dangerous_exec, suspicious.exposed_secret_literal

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/bdjobs-apply.js:37

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/bdjobs-undo.js:37

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/bdjobs-update-salary.js:36

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
scripts/bdjobs-login.js:60