Back to skill

Security audit

Kanboard Skill

Security checks for vulnerabilities and agentic risk

Overview

This Kanboard skill is coherent, but it gives an agent broad project, user, permission, and deletion powers with weak safety guidance around credentials and irreversible actions.

Install only if you intend to let the agent make real changes in Kanboard. Prefer a least-privilege user API token over the broad Application API token, require HTTPS for KANBOARD_URL, avoid shared systems where process arguments are visible, and manually confirm deletes, user changes, permission changes, and bulk operations.

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

Error
Location
SKILL.md:48
Finding

Kanboard credentials may be exposed through insecure transport and process arguments

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 48–56; related configuration at lines 535–540
Vulnerability Type: Credential exposure through unrestricted transport and command-line arguments
Risk Level: High

Vulnerable Code

bash
kb() {
  local method="$1"
  local params="${2:-{}}"
  local user="${KANBOARD_USER:-jsonrpc}"
  local pass="${KANBOARD_PASS:-$KANBOARD_API_TOKEN}"

  curl -s -X POST \
    -u "$user:$pass" \
    -H "Content-Type: application/json" \
    -d "{\"jsonrpc\":\"2.0\",\"method\":\"$method\",\"id\":1,\"params\":$params}" \
    "${KANBOARD_URL}/jsonrpc.php" | jq .
}

The documented configuration permits an arbitrary URL without enforcing HTTPS:

bash
# Required
export KANBOARD_URL="https://kanboard.example.com"
export KANBOARD_API_TOKEN="your_token_from_settings_page"

# Optional (for User API / "My…" procedures)
export KANBOARD_USER="your_username"
export KANBOARD_PASS="your_password_or_personal_token"

Technical Analysis

The helper sends Kanboard credentials using HTTP Basic authentication through curl -u. Two credential-exposure conditions are present:

  1. Transport security is not enforced. KANBOARD_URL is accepted without checking its scheme or destination. If it is set to an http:// URL, Basic authentication credentials can be observed in plaintext by a network-positioned attacker. If configuration is manipulated to reference an attacker-controlled HTTPS origin, the credentials are delivered directly to that origin.
  2. Credentials are supplied as a command-line argument. The expression -u "$user:$pass" can place the username and password or API token in the curl process argument list. Depending on operating-system process visibility, container configuration, monitoring, and audit tooling, another local user or service may capture the secret while the request is running.

The default credential is particularly sensi ...[truncated 2271 chars]

Remediation
View remediation

Remediation Suggestions

  1. Enforce HTTPS before every request.

    • Parse and validate KANBOARD_URL.
    • Reject URLs whose scheme is not exactly https.
    • Do not silently downgrade to HTTP.
    • Continue using normal TLS certificate and hostname verification.
  2. Restrict the destination.

    • Configure an explicit trusted Kanboard origin instead of accepting arbitrary runtime destinations where practical.
    • Reject embedded credentials, unexpected ports, redirects to different origins, and malformed URLs.
    • Consider curl --proto '=https' --proto-redir '=https' and disable cross-origin credential forwarding.
  3. Keep credentials out of command-line arguments.

    • Use a permission-restricted curl configuration file, protected credential helper, or equivalent secret-injection mechanism that does not expose the secret in process arguments.
    • If a temporary credential file is unavoidable, create it with mode 0600, use a secure temporary-file API, and remove it immediately with reliable cleanup traps.
    • Ensure secrets are not emitted in shell tracing, debug output, logs, or error messages.
  4. Apply least privilege.

    • Prefer a dedicated User API account limited to the required projects and operations.
    • Avoid the unrestricted Application API token unless the workflow specifically requires it.
    • Separate read-only and administrative automation credentials.
  5. Harden request behavior.

    • Add --fail-with-body, --show-error, and suitable connection and request timeouts.
    • Define an explicit redirect policy and do not forward authentication to an untrusted redirected host.
    • Validate configuration before executing any API operation.
  6. Rotate potentially exposed credentials.

    • Revoke and regenerate credentials if the helper has been used with HTTP, an untrusted destination, permissive process visibility, or command-line collection tooling.
    • Review K ...[truncated 75 chars]
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (4)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger list includes broad phrases such as 'add comment' and 'create task' that can appear in ordinary conversation, making accidental invocation of this skill more likely. Because the skill can perform authenticated state-changing operations against a project management system, unintended activation could lead to unauthorized or surprising modifications.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill documents use of API tokens, login/password authentication, and explicitly notes that the Application API skips permission checks, but it does not prominently warn that these credentials are sensitive or that actions may run with elevated privileges. In practice, this increases the chance of unsafe use, overprivileged configuration, and accidental execution of high-impact operations across projects.

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 · SKILL.md (reported line 52)May include surrounding context.

md
local user="${KANBOARD_USER:-jsonrpc}"
  local pass="${KANBOARD_PASS:-$KANBOARD_API_TOKEN}"

  curl -s -X POST \
    -u "$user:$pass" \
    -H "Content-Type: application/json" \
    -d "{\"jsonrpc\":\"2.0\",\"method\":\"$method\",\"id\":1,\"params\":$params}" \

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The skill exposes destructive operations such as removing projects, tasks, columns, users, and bulk-closing tasks without an overarching caution or safety gating. In an agent context, documenting these commands without confirmation requirements increases the likelihood of accidental or irreversible data changes.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.