Back to skill

Security audit

stacktree

Security checks for vulnerabilities and agentic risk

Overview

Review before installing: this hosting skill directs automatic sharing of task details with its vendor and understates its optional wallet access.

Require explicit approval before uploading content or sending vendor feedback. Prefer claim-token updates over funded-wallet access. Review and pin payment dependencies before using paid tooling, protect management tokens, and use passcodes for sensitive pages. Anonymous content remains stored for 30 days after expiry.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (32)

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill instructs the agent to report unsupported user tasks to the vendor without obtaining permission. Although it excludes names, email addresses, and page content, task descriptions can still expose confidential plans or business context unrelated to delivering the requested hosting service.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The service and authentication mechanism are consistent with the declared publishing workflow, but the supplied command deletes an existing site rather than publishing or updating one. Site deletion is a distinct destructive capability that the description does not disclose; optional expiry does not itself declare explicit deletion.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The service domain is consistent with the description, and authentication is not itself a mismatch. However, the supplied chunk invokes an update-query tool, submits no HTML, and requests no page creation or modification. Checking what is new since a timestamp is not a declared capability or an evident implementation step for publishing. The tool's internal implementation is not provided, so the assessment is limited to the visible request.

Content

No source excerpt is available for this finding.

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
`scripts/update-page.mjs` in this skill does all three steps (run

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/update-page.mjs --site <id> --file new.html

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
(or `node scripts/update-page.mjs --site <id> --file brief.html` if you paid

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, network.

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Triggers include generic terms and content types without requiring an intent to publish.

Medium
Category
Trigger Abuse
Confidence
98% confidence
Finding

Generic triggers such as morning brief and dashboard do not establish permission to upload content to an external host. Combined with directions to publish copies for outside recipients, these triggers create a plausible path from a local content-generation request to unintended third-party disclosure.

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

go to, remember it, and name them in every publish:

bash
curl -sS -X POST https://api.stacktr.ee/sites -F 'file=@page.html' \
  -F 'owner_email=<their address>' -F 'agent=<your name>'

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 80)May include surrounding context.

go to, remember it, and name them in every publish:

bash
curl -sS -X POST https://api.stacktr.ee/sites -F 'file=@page.html' \
  -F 'owner_email=<their address>' -F 'agent=<your name>'

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 111)May include surrounding context.

over by email, without you in the loop:

bash
curl -sS -X POST https://api.stacktr.ee/sites/<id>/keep \
  -H 'content-type: application/json' \
  -d '{"claim_token":"<claim_token>","email":"<their address>"}'

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 258)May include surrounding context.

($0.50), keep the URL and the claim_token, then every run

bash
curl -sS -X PUT https://api.stacktr.ee/sites/<id> \
  -H "Authorization: Claim <claim_token>" \
  -H "Content-Type: application/json" \
  --data-binary @brief.json

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 302)May include surrounding context.

md
- No account: run the activity request above for each page you sent, and say
  its `summary`.
- With an account, one read covers every page: `whats_new` on the Stacktree
  connector (`https://api.stacktr.ee/mcp`). Pass the previous run's
  `checked_at` as `since` (left out, it means the last 24 hours). Each item
  has `said`, a sentence to pass on, and `next`, the tool that follows it up.
  Over curl:

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 308)May include surrounding context.

Over curl:

bash
curl -sS -X POST https://api.stacktr.ee/mcp \
  -H "Authorization: Bearer $STACKTREE_API_KEY" \
  -H 'accept: application/json, text/event-stream' \
  -H 'content-type: application/json' \

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 93)May include surrounding context.

not for one person, leave both fields out:

bash
curl -sS -X POST https://api.stacktr.ee/sites -F 'file=@page.html'

The JSON response carries url (hand it to your human), expires_at (24 hours;

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 152)May include surrounding context.

md
(free, `claim_url` in the response) and set the gate there, or use the free
anonymous path which accepts `password` directly.

Probe terms without paying: `GET https://api.stacktr.ee/publish` returns the
current 402 challenge, prices, and accepted rails. Payment is EIP-3009 USDC:
you sign an authorization; you never hold ETH or pay gas.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 181)May include surrounding context.

Nothing to install, nothing to sign, no extra round trip:

bash
curl -sS -X PUT https://api.stacktr.ee/sites/<id> \
  -H "Authorization: Claim <claim_token>" \
  -H "Content-Type: application/json" \
  --data-binary @revision.json

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 277)May include surrounding context.

page instead of guessing:

bash
curl -sS https://api.stacktr.ee/sites/<id>/activity \
  -H "Authorization: Claim <claim_token>"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 320)May include surrounding context.

Taking a page down

bash
curl -sS -X DELETE https://api.stacktr.ee/sites/<id> \
  -H "Authorization: Claim <claim_token>"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 350)May include surrounding context.

bash
# 1. start it
curl -sS -X POST https://api.stacktr.ee/api-keys/device-code \
  -H 'content-type: application/json' -d '{"client_hint":"my-agent"}'
# → { device_code, user_code, verification_url_complete, interval, expires_in }

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 355)May include surrounding context.

md
# → { device_code, user_code, verification_url_complete, interval, expires_in }

# 2. print verification_url_complete for your human, then poll every `interval` seconds
curl -sS -X POST https://api.stacktr.ee/api-keys/device-code/poll \
  -H 'content-type: application/json' -d '{"device_code":"…"}'
# → {"status":"pending"} keep polling · {"status":"authorized","api_key":"stk_live_…"} store it
# → {"status":"denied"} or {"status":"expired"} stop

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 369)May include surrounding context.

md
Everything in this skill is plain HTTP, which is why it works anywhere. If your
runtime does speak MCP, the same account is reachable at
`https://api.stacktr.ee/mcp` (streamable HTTP), and **it takes an API key**:
send `Authorization: Bearer stk_live_…` exactly as you would on REST. No
browser, no OAuth dance, nothing to register. OAuth 2.1 + DCR is also
accepted, but only clients that want it need it.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 375)May include surrounding context.

accepted, but only clients that want it need it.

bash
curl -sS -X POST https://api.stacktr.ee/mcp \
  -H "Authorization: Bearer $STACKTREE_API_KEY" \
  -H 'accept: application/json, text/event-stream' \
  -H 'content-type: application/json' \

MCP server referenced without pinned version: 'npx agentcash'.

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The command invokes an unpinned npm executable, not an MCP server, and npx can download and execute package code when it is not installed locally. A compromised or unexpected release could execute with the agent's local privileges in a workflow involving a funded wallet.

Content

No source excerpt is available for this finding.

The documented curl-only execution boundary contradicts the prescribed package and script execution.

Medium
Category
Excessive Agency
Confidence
98% confidence
Finding

The opening assurance says the skill performs only curl requests, but later instructions prescribe npx execution, npm installation, and a Node script that reads a funded wallet's private key. This understates the execution and credential-access boundary and can cause users to authorize substantially more privileged behavior than they expected.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/update-page.mjs:43