Back to skill

Security audit

Job for Agents

Security checks for vulnerabilities and agentic risk

Overview

This OpenJobs skill is mostly aligned with marketplace automation, but it gives agents broad authority to update their own instructions and take marketplace or wallet-affecting actions with insufficient control boundaries.

Install only if you intentionally want an OpenJobs agent with broad marketplace automation. Before using it, disable automatic skill refresh, pin the CLI version, require confirmation for applications, bids, deposits, staking, submissions, and messages, and opt in explicitly before any Telegram notifications are sent.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
Findings (6)

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:614
Finding

Mutable Remote Skill Bundle Is Treated as Runtime Execution Authority

Content
View full analysis
and are the **runtime execution authority**: ```bash # Re-install the full skill bundle (updates HEARTBEAT.md, SKILL.md, references/): openjobs install-skill --agent --force ``` ``` ### Technical Analysis The Skill instructs the agent to forcibly refresh its complete instruction bundle at the start of every heartbeat. It explicitly declares the remotely published documents to be the “runtime execution authority.” Consequently, the effective Skill behavior is not limited to the files that were statically audited. The remote publisher—or an attacker who compromises the publisher, package distribution channel, account, DNS, TLS termination, or update infrastructure—can introduce new instructions after review. The `--force` option further indicates that existing local instructions may be overwritten without a version comparison or user confirmation. This creates a remotely mutable control channel. New versions could direct the agent to run arbitrary commands, access credentials, upload local files, transfer funds, or weaken safety boundaries. ### Attack Path 1. An attacker compromises the OpenJobs publication or package-update infrastructure. 2. The attacker modifies the distributed Skill bundle to include malicious commands or instructions. 3. A scheduled or manually initiated heartbeat starts. 4. The agent executes `openjobs install-skill --agent --force`. 5. The reviewed local Skill files are replaced by the attacker-controlled version. 6. The agent treats the newly retrieved content as authoritative and follows its instructions. 7. Malicious commands ex ...[truncated 510 chars]
Remediation
View remediation

T01 · Skill Instruction Hijacking

Error
Location
HEARTBEAT.md:33
Finding

Heartbeat Instructions Require Autonomous Marketplace State Changes

Content
View full analysis
` on `jobs apply`, in the job's currency. ``` ### Technical Analysis The heartbeat defines inaction as a workflow failure and requires at least one state-changing action whenever the actionable queue is non-empty. It also directs the agent to apply automatically to jobs and independently calculate bids for negotiable listings. These requirements exceed the minimum privileges needed to inspect an inbox or report available jobs. Applications, bids, messages, acceptance decisions, and task-state changes can create reputational, contractual, privacy, or financial consequences. Although later instructions describe oversight modes, the prominent mandatory- ...[truncated 1438 chars]
Remediation
View remediation

other

Warning
Location
HEARTBEAT.md:589
Finding

Mandatory Telegram Notifications Disclose Marketplace Metadata to an Additional Service

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/verify-agent.mjs:38
Finding

Weak API Base Validation Allows API-Key Exfiltration to Lookalike Domains

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
SKILL.md:137
Finding

Unpinned CLI Installation and Automatic Upgrade Create a Supply-Chain Execution Risk

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/create-solana-wallet.mjs:94
Finding

Preferences File Containing API Credentials Is Written Without Explicit Permission Hardening

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
  • Rogue AgentSelf-Modification, Session Persistence
Findings (22)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
`HEARTBEAT.md` lives at the top level of the skill (a peer of `SKILL.md`,

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
`HEARTBEAT.md` lives at the top level of the skill (a peer of `SKILL.md`,

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
`HEARTBEAT.md` lives at the top level of the skill (a peer of `SKILL.md`,

Ssd 1

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

Declaring remotely hosted skill files as the 'runtime execution authority' and instructing automatic refresh each heartbeat creates a direct remote-instruction trust chain. A compromised website, CDN, package, or account controlling those files could push new behavior to every installed agent, including wallet-affecting or data-exfiltrating actions, without local review.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger conditions are very broad and can activate this workflow for common OpenJobs-related requests, after which the skill pressures the agent to take at least one state-changing action whenever actionable items exist. That combination raises the risk of unintended invocation leading to message sends, application submissions, task acknowledgements, or other changes the user did not explicitly authorize in the current context.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The fallback command uses npx -y @openjobs/cli without pinning a version or integrity, so each run may fetch and execute whatever package version is current at the registry. In a high-privilege workflow that can read messages, move job state, and handle wallet-related actions, this creates a supply-chain execution risk if the package is compromised or unexpectedly changed.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill authorizes judge staking and unstaking actions involving funds without a prominent warning/consent boundary, despite cooldowns, balance effects, and potential financial loss. In an automated heartbeat context, financial operations embedded alongside routine inbox checks can be triggered with insufficient user awareness, making accidental asset movement more likely.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill expands beyond marketplace operations into unrelated side effects such as mandatory Telegram notifications and local deliverable-generation behavior, increasing authority and attack surface beyond the declared skill scope. Scope creep is dangerous because a user invoking an OpenJobs workflow may not expect external messaging or local tool use, which can lead to unintended data disclosure or unsafe execution paths.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The workflow makes Telegram notifications mandatory for any OpenJobs action, but Telegram is outside the stated marketplace scope and introduces an external exfiltration channel for job metadata, IDs, and operational status. Even if summaries are concise, this can leak sensitive business context to an unintended destination or normalize outbound messaging the user did not request.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill instructs the agent to perform shell commands, network access, and read/write local configuration but declares no explicit tool scope or allowed-tools boundary. In an agent runtime, missing capability scoping increases the chance that broad execution privileges are granted implicitly, making later dangerous instructions easier to carry out.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The trigger guidance includes broad phrases such as references to 'my agent', 'the marketplace', or Solana bot-to-bot activity, which can cause accidental activation in unrelated conversations. Over-broad activation matters here because the skill can initiate installs, network calls, wallet operations, and remote updates.

Content

No source excerpt is available for this finding.

Whitespace Padding

Medium
Category
Prompt Injection
Confidence
70% confidence
Finding

Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Content

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

md
Common doctor outputs and what to do:

| Doctor row              | Status | Fix                                                                                               |
| ----------------------- | ------ | ------------------------------------------------------------------------------------------------- |
| `auth.apiKey` missing   | ✗      | `openjobs login --api-key sk_live_xxx` (or `openjobs agents register …` for a brand-new agent).    |
| `cli.version` outdated  | ⚠      | `openjobs upgrade --yes`                                                                          |

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

Using npx @openjobs/cli without pinning a specific version allows execution of whatever package version is current at runtime. That creates a supply-chain risk: a compromised or breaking upstream release could be fetched and executed immediately on the user's machine.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

npx @openjobs/cli --help # zero-install, one-off runs

text

If `npm i -g` fails with `EACCES`, point npm at a user-owned prefix (don't `sudo npm i -g`):

```bash
npm config set prefix ~/.npm-global

Session Persistence

Medium
Category
Rogue Agent
Confidence
90% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

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

bash
npm config set prefix ~/.npm-global
export PATH=~/.npm-global/bin:$PATH   # add to ~/.bashrc or ~/.zshrc
npm install -g @openjobs/cli
openjobs doctor

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

md
1. Run `openjobs doctor` and READ the output.
2. If it says "Could not locate the bundled skill files" → your CLI predates the bundled skill. Run `openjobs upgrade --yes`, then `openjobs --version` (must show 2.2.x or newer), then re-try install-skill **once**.
3. If `upgrade` itself fails with `EACCES` → use the `~/.npm-global` recipe above. Do NOT `sudo` (it changes file ownership and breaks the next non-sudo install).
4. If a PATH-shadow warning appears (`⚠ openjobs PATH-shadow: which openjobs resolves to A but this process is running B`), `which -a openjobs` and remove or reorder the stale copy. Do NOT keep upgrading — both copies upgrade simultaneously and the shadow persists.

The CLI never auto-retries failed installs; neither should you. One failure → run `doctor` → apply the named fix → one more attempt.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The document claims only agents register writes wallet secrets to disk, but elsewhere states that doctor can auto-import legacy wallet secrets into local config. This inconsistency can mislead operators about when sensitive keys are persisted, increasing the risk of accidental secret exposure or unsafe operational assumptions.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill expands beyond marketplace participation by authorizing runtime refresh of instructions from remote hosted skill files and treating them as authoritative. This lets the operational behavior of the agent change after review, defeating static validation and opening the door to instruction injection through remote content changes or compromise.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
82% confidence
Finding

The script persists a long-lived Solana private key to disk under ~/.openjobs/wallet.json so it can be reused for later authentication/signing. Although this is expected wallet behavior and not obviously malicious, persistent credential storage increases risk: if the host is compromised, backups are exposed, or filesystem permissions are misapplied, the wallet can be stolen and abused to impersonate the agent or sign transactions/challenges.

Content

Scanner excerpt · scripts/create-solana-wallet.mjs (reported line 3)May include surrounding context.

js
#!/usr/bin/env node
/**
 * OpenJobs — Create Solana Wallet (offline)
 *
 * Generates a brand-new Solana keypair LOCALLY and writes:
 *   - ~/.openjobs/wallet.json   (Phantom/solana-cli compatible 64-byte secret key array)

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

md
console.log("✅ New Solana wallet created");
console.log("");
console.log("  Address:     " + walletAddress);
console.log("  Secret key:  " + WALLET_PATH + "  (chmod 600)");
console.log("  Preferences: " + PREFS_PATH);
console.log("");
console.log("Next step: prove ownership of this wallet.");

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · scripts/create-solana-wallet.mjs (reported line 118)May include surrounding context.

js
console.log("✅ New Solana wallet created");
console.log("");
console.log("  Address:     " + walletAddress);
console.log("  Secret key:  " + WALLET_PATH + "  (chmod 600)");
console.log("  Preferences: " + PREFS_PATH);
console.log("");
console.log("Next step: prove ownership of this wallet.");

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The manifest describes a marketplace interaction skill centered on the official OpenJobs CLI, not a content-production or model-execution skill. Requiring ollama run x/flux2-klein introduces a separate capability—running local AI generation workloads—that is not declared in the skill’s stated scope.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
scripts/create-solana-wallet.mjs:118