Back to skill

Security audit

Bolt Sprint

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real Bolt sprint-management skill, but it gives an agent broad live write/delete access to Bolt data and sends API tokens to a user-configured URL with limited safety guardrails.

Install only if you trust the Bolt instance URL and the publisher. Use HTTPS for non-local Bolt servers, keep BOLT_API_TOKEN narrowly scoped and out of logs, avoid the unpinned npx install path unless you verify the package, and require explicit confirmation before deletes, sprint close, file deletion, or batch updates.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/bolt.sh:29
Finding

API token and project data can be transmitted over untrusted or plaintext HTTP endpoints

Content
View full analysis
/dev/null || uuidgen 2>/dev/null || date +%s%N) curl -sf -X POST \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $idem_key" \ "${AUTH_ARGS[@]}" \ -d "$body" \ "$BASE$path" } # Wrapper: PATCH request with JSON body bolt_patch() { local path="$1" local body="$2" local idem_key idem_key=$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen 2>/dev/null || date +%s%N) curl -sf -X PATCH \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $idem_key" \ "${AUTH_ARGS[@]}" \ -d "$body" \ "$BASE$path" } ``` The documentation explicitly recommends plaintext examples: ```bash export BOLT_BASE_URL="http://localhost:4000" export BOLT_API_TOKEN="your-token-here" ``` ### Technical Analysis `BOLT_BASE_URL` is accepted without parsing or validating its scheme, hostname, or trust boundary. When `BOLT_API_TOKEN` is present, the script forwards it in the `x-bolt-token` header to every constructed destination. Request bodies can additionally contain project details, story descriptions, notes, assignee identities, and agent activity. Network communication is necessary for the declared Bolt management functio ...[truncated 1544 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
README.md:43
Finding

Unpinned npx installation can execute registry-controlled third-party code

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/bolt.sh:116
Finding

Unescaped CLI arguments permit JSON request-body injection

Content
View full analysis
}" STATUS="${2:?Missing status: waiting|in_progress|completed}" bolt_post "/api/v1/stories/$STORY_ID/move" "{\"status\":\"$STATUS\"}" ;; note) STORY_ID="${1:?Usage: bolt.sh note '' [author] [kind]}" BODY="${2:?Missing note body}" AUTHOR="${3:-AI}" KIND="${4:-note}" bolt_post "/api/v1/stories/$STORY_ID/notes" \ "{\"body\":$(echo "$BODY" | jq -Rs .),\"author\":\"$AUTHOR\",\"kind\":\"$KIND\"}" ;; label-add) STORY_ID="${1:?Usage: bolt.sh label-add }" LABEL="${2:?Missing label}" bolt_post "/api/v1/stories/$STORY_ID/labels" "{\"label\":\"$LABEL\"}" ;; log-event) SESSION_ID="${1:?Usage: bolt.sh log-event '' [type]}" MESSAGE="${2:?Missing message}" TYPE="${3:-action}" bolt_post "/api/v1/agent/sessions/$SESSION_ID/events" \ "{\"message\":$(echo "$MESSAGE" | jq -Rs .),\"type\":\"$TYPE\"}" ;; ``` ### Technical Analysis The note body and event message are encoded with `jq -Rs`, but `STATUS`, `AUTHOR`, `KIND`, `LABEL`, and `TYPE` are inserted directly between JSON quotation marks. A value containing a quotation mark, backslash, newline, or JSON delimiter can terminate the intended string and alter the resulting document. For example, a crafted value conceptually shaped like: ```text completed","unexpected":"attacker-controlled ``` changes the request from a single intended field into a JSON object containing an additional field. Depending on the endpoint’s schema enforcement and duplicate-key handling, this can create malformed requests, override intended values, or add attacker-selected properties. This flaw does not by itself produce shell-command execution because the interpolated data remains ...[truncated 1200 chars]
Remediation
View remediation
&2 exit 1 ;; esac payload=$(jq -n --arg status "$STATUS" '{status: $status}') bolt_post "/api/v1/stories/$STORY_ID/move" "$payload" ``` 2. Apply the same approach to notes, labels, and events: ```bash payload=$(jq -n \ --arg body "$BODY" \ --arg author "$AUTHOR" \ --arg kind "$KIND" \ '{body: $body, author: $author, kind: $kind}') ``` 3. Enforce allowlists for finite enumerations: - Status: `waiting`, `in_progress`, `completed` - Event type: `action`, `observation`, `thought`, `error` - Note kind: values explicitly supported by the Bolt API 4. Validate identifiers and labels against documented length and character constraints. 5. Add tests containing quotation marks, backslashes, newlines, Unicode, and JSON delimiters. 6. Retain strict server-side schema validation as a second defensive layer and reject unknown properties or ambiguous duplicate keys. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (19)

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [agent_skills]

High
Category
YARA Match
Confidence
80% confidence
Finding

YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

Content

Scanner excerpt · README.md (reported line 3)May include surrounding context.

md
# Bolt-skill

[![Agent Skill](https://img.shields.io/badge/agentskills.io-compatible-6366f1?style=flat-square&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0xMiAyQTEwIDEwIDAgMCAwIDIgMTJhMTAgMTAgMCAwIDAgMTAgMTAgMTAgMTAgMCAwIDAgMTAtMTBBMTAgMTAgMCAwIDAgMTIgMm0wIDJhOCA4IDAgMCAxIDggOCA4IDggMCAwIDEtOCA4IDggOCAwIDAgMS04LTggOCA4IDAgMCAxIDgtOG0tMSA0djZsNS0zbC01LTN6Ii8+PC9zdmc+)](https://agentskills.io)
[![License: MIT](https://img.shields.io/badge/License-MIT-f59e0b?style=flat-square)](LICENSE)
[![Version](https://img.shields.io/badge/version-1.0.0-22c55e?style=flat-square)](SKILL.md)
[![Bolt API](https://img.shields.io/badge/Bolt-REST%20API-0ea5e

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The code is broadly aligned with Bolt sprint/story management, including creating/updating stories, moving workflow state, getting digests, and logging agent activity. However, there is a notable declared-vs-actual mismatch: the description claims file attachment support, but no attachment-related endpoint or command exists in the code. The code also exposes some extra read/administrative capabilities—project/sprint/story listing, health checks, labels/notes, and audit log access—that are not mentioned in the description. The strongest mismatch is the missing declared attachment capability; the extra commands are secondary but still undeclared capabilities.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The markdown advertises capabilities such as creating, updating, deleting stories, uploading files, and running batch operations, but it does not warn users that these actions can modify or remove project data. Because this README is the user-facing skill description, it should disclose that the skill can perform write and delete actions against the Bolt system.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

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

Batch-close multiple stories

bash
curl -s -X POST -H "Content-Type: application/json" \
  ${BOLT_API_TOKEN:+-H "x-bolt-token: $BOLT_API_TOKEN"} \
  -d '{"items":[{"id":"s1","status":"completed"},{"id":"s2","status":"completed"}]}' \
  "$BOLT_BASE_URL/api/v1/stories/batch/move"

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 25)May include surrounding context.

export BOLT_API_TOKEN="your-token-here" # Optional: only needed if server was started with BOLT_API_TOKEN

text

The base curl pattern for authenticated requests:

```bash
curl -s \

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documentation includes POST and PATCH examples that mutate remote project data but does not clearly warn users that these commands perform live write operations. In an agent setting, this increases the chance of unintended state changes, duplicate actions, or accidental workflow manipulation when examples are copied or executed automatically.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown API reference describes project deletion, including a force=true option that can remove projects even when related sprints or stories exist, but it provides no warning about data loss or irreversible effects. Under the markdown-file criteria, destructive behaviors that could affect user data should include an explicit warning.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The documentation states DELETE /api/v1/stories/{id} deletes a story, but it does not warn users that the action may permanently remove user data. For markdown skill documentation, destructive operations should be accompanied by clear cautions so users understand the impact before invoking them.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The API reference documents DELETE /api/v1/files/{id} without any caution that deleting a file can affect user data and system integrity by removing uploaded artifacts or their records. Markdown documentation for such behaviors should clearly disclose destructive consequences.

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/workflows.md (reported line 13)May include surrounding context.

bash
# 1. Verify connection
curl -s "$BOLT_BASE_URL/health"

# 2. List projects
curl -s \

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

These examples include sprint lifecycle operations such as creation, start, and close that go beyond the stated skill scope of managing stories and sprint workflows as described in the metadata. Undocumented write capabilities are risky because they let an agent perform irreversible or high-impact project-management actions that a user may not realize the skill can take.

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/workflows.md (reported line 54)May include surrounding context.

md
SPRINT_ID=$(echo $SPRINT | jq -r '.id')

# 2. Create stories for the sprint
curl -s -X POST \
  -H "Content-Type: application/json" \
  ${BOLT_API_TOKEN:+-H "x-bolt-token: $BOLT_API_TOKEN"} \
  -H "Idempotency-Key: $(uuidgen)" \

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The batch update examples demonstrate wide-impact state changes across multiple stories without a strong warning, approval step, or mandatory dry-run flow. In an agent setting, this increases the chance of accidental mass modification, causing broad workflow disruption, loss of planning integrity, or unauthorized reassignment/completion of work items.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The workflow documentation exposes access to an audit-log endpoint that is not described in the skill manifest, expanding the skill's effective capabilities beyond what a user or reviewer would expect. Hidden or undocumented read access is dangerous because an agent may retrieve sensitive operational history, actor activity, or metadata without explicit consent or review.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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/bolt.sh (reported line 50)May include surrounding context.

sh
local body="${2:-{}}"
  local idem_key
  idem_key=$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen 2>/dev/null || date +%s%N)
  curl -sf -X POST \
    -H "Content-Type: application/json" \
    -H "Idempotency-Key: $idem_key" \
    "${AUTH_ARGS[@]}" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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/bolt.sh (reported line 64)May include surrounding context.

sh
local body="$2"
  local idem_key
  idem_key=$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen 2>/dev/null || date +%s%N)
  curl -sf -X PATCH \
    -H "Content-Type: application/json" \
    -H "Idempotency-Key: $idem_key" \
    "${AUTH_ARGS[@]}" \

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The README instructs users to export BOLT_API_TOKEN, which is a credential, but it does not include any caution about protecting the token or avoiding exposure in shared shells/logs. For markdown files, credential-related behavior should be accompanied by a brief warning when it may affect privacy or system integrity.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.