Back to skill

Security audit

Humanod

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent with its purpose, but it gives an agent paid real-world hiring and payment authority while instructing it to pass API keys in URLs.

Review this skill carefully before installing. Use only a restricted, rotatable Humanod API key if available, avoid putting keys in chat or URLs, and require explicit user confirmation before creating tasks, hiring workers, approving submissions, changing prices, or canceling tasks. Do not use it for surveillance, photographing private people or restricted property, trespass, harassment, or collecting personal/sensitive data without authorization and consent.

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

T09 · Insecure Skill Coding Practices

Warning
Location
system_prompt.md:7
Finding

API Credential Exposure Through URL Query Parameters

Content
View full analysis

Vulnerability Details

File Locations:

  • system_prompt.md:7-10
  • system_prompt.md:65-66
  • openapi.yaml:15-19
  • The same query parameter is repeated at openapi.yaml:39-43, openapi.yaml:63-67, openapi.yaml:88-92, openapi.yaml:116-120, openapi.yaml:142-146, openapi.yaml:168-172, and openapi.yaml:191-195

Vulnerability Type: API credential disclosure through query-string authentication
Risk Level: Medium

Vulnerable Code

From system_prompt.md:7-10:

markdown
## 🔐 Authentication (CRITICAL)
**At the very beginning of the conversation**, you MUST verify if you have the user's **Humanod API Key**.
- If the user hasn't provided it, ask: *"Hello! To manage your Humanod missions, please provide your API Key (from https://www.humanod.app/developer/keys)."*
- Once you have the key, **ALWAYS** append it as a parameter `?api_key=YOUR_KEY` (or in the `api_key` param field) for **EVERY** API call you make.

From system_prompt.md:65-66:

markdown
2. User: "sk-12345"
3. Call `POST /tasks?api_key=sk-12345`...

From openapi.yaml:15-19:

yaml
      parameters:
      - name: api_key
        in: query
        required: false
        schema:
            type: string

The OpenAPI document repeats this query-string credential parameter for every operation even though it also defines and applies an HTTP bearer authentication scheme.

Technical Analysis

The system prompt requires the agent to append the Humanod API key to every request URL. Credentials placed in query strings can be retained by reverse-proxy access logs, API server logs, browser history, debugging output, observability platforms, network traces, and error-reporting systems. They can also be exposed when complete request URLs are copied or shared.

This is unnecessary because openapi.yaml already defines BearerAuth and applies it globally. An authorization header limits routine credential exposure compared with embedding the credential in the URL.

T ...[truncated 1830 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove the instruction requiring ?api_key=YOUR_KEY from system_prompt.md.
  2. Remove the credential-bearing example at system_prompt.md:65-66.
  3. Delete the api_key query parameter from every operation in openapi.yaml.
  4. Use only the existing bearer authentication scheme:
http
Authorization: Bearer REDACTED_API_KEY
  1. Store and inject the API key through the agent platform's protected credential mechanism instead of requesting it in ordinary conversation.
  2. Ensure authorization headers and secret values are redacted from application logs, telemetry, traces, and error reports.
  3. Configure gateways and servers not to accept credentials in query parameters, preventing accidental fallback to the insecure mechanism.
  4. Rotate any Humanod API key that has previously been transmitted in a URL.
  5. Review historical proxy, server, monitoring, and conversation logs for exposed keys and restrict or purge those records where appropriate.
  6. Preserve the existing explicit-confirmation requirement for financially consequential operations, but enforce authorization and ownership checks independently on the server.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
Findings (10)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill explicitly enables real-world photo capture, location verification, and local data collection by third-party humans, but it provides no warning or guardrails around privacy, consent, sensitive locations, or collection of personal data. In this context, an agent could easily commission surveillance-like tasks or gather identifying information from the physical world without the user being prompted to consider legality, ethics, or data minimization.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill describes escrow, payment release, refunds, and repeated task creation, which can cause real monetary loss, but it does not clearly warn that tool calls may spend actual funds. In an agent setting, this omission is risky because automated or repeated task creation could unintentionally authorize multiple paid jobs or approve submissions without adequate human review.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This skill exposes multiple high-impact real-world actions—creating paid physical tasks, accepting applicants, approving submissions that release funds, and canceling tasks—without embedding any constraints, guardrails, or negative examples in the API description. In an agent context, that broad capability surface increases the chance an LLM could autonomously trigger spending, hiring, or physical-world actions from ambiguous or malicious prompts.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The acceptApplication endpoint initiates a hiring decision with real-world execution consequences, but the spec lacks any warning or confirmation guidance. That omission is dangerous for agent integrations because an LLM could hire the wrong person or commit to a paid physical task without clear user intent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The validateSubmission endpoint can approve work and release funds based only on an approved boolean, but the spec provides no warning that this is financially irreversible or sensitive. In an autonomous agent setting, a malicious prompt or misinterpretation could cause premature approval, leading to direct monetary loss and failed dispute controls.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The cancelTask endpoint performs a destructive state change affecting active work and funds, yet the specification does not describe any warning, confirmation, or precondition checks. In agent-driven use, this makes accidental or prompt-injected cancellation more likely, potentially disrupting jobs and causing unintended refunds or workflow loss.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill explicitly asks users to paste a live API key into the conversation and does not warn that the credential is sensitive, should be minimally scoped, or should not be exposed beyond the required integration path. This increases the chance of credential leakage through chat history, logs, screenshots, prompt injection chains, or reuse in unintended contexts.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The prompt normalizes broad reuse of the user's API key by requiring it to be appended on every request, reinforcing a pattern of repeatedly handling and propagating a sensitive secret in natural language-driven workflows. In this context, the skill controls real-world task hiring and payment actions, so habitual credential reuse increases the blast radius if the key is exposed or the model is induced to disclose or misuse it.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The prompt establishes a strict confirmation requirement for any state-changing action, but its example workflow undermines that control by implying task creation can proceed immediately after receiving an API key. In an agent that can hire people and spend money, inconsistent instruction hierarchies can lead to unintended purchases, postings, or approvals if the model follows the example instead of the policy.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The instruction to pay a fair wage using a fixed euro-denominated benchmark imposes a specific regional currency/locale assumption in the skill's natural-language policy. The file does not say the service is EU-only or let the user choose a different locale or currency basis.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.prompt_injection_instructions

Prompt-injection style instruction pattern detected.

Warn
Code
suspicious.prompt_injection_instructions
Location
system_prompt.md:1