Back to skill

Security audit

Agentic Street

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly transparent and purpose-aligned, but its optional notification watcher asks users to run mutable downloaded shell code every minute with persistent credentials in a sensitive DeFi workflow.

Review carefully before installing. Use manual local signing unless you deliberately trust Bankr, do not run the cron watcher unless you need background alerts, avoid downloading watcher code from a mutable URL without verifying it, keep AST_API_KEY and hook tokens out of crontab where possible, and do not set API or hook URL overrides to untrusted destinations.

Vulnerability Patterns
  • 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
  • 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
Findings (4)

T03 · Remote Payload Retrieval and Execution

Error
Location
references/notifications.md:111
Finding

Mutable Remote Watcher Is Downloaded and Persistently Executed Without Integrity Verification

Content
View full analysis
> /tmp/ast-watcher.log 2>&1 ``` The remote download is also documented at `references/api-reference.md:1007-1013`: ```bash ### GET /api/watcher.sh Download the automated watcher script (no auth required). curl -sf https://agenticstreet.ai/api/watcher.sh -o ast-watcher.sh ``` ### Technical Analysis The installation instructions retrieve an executable shell script from a mutable service endpoint, make it executable, and instruct the user to run it every minute through cron. The downloaded artifact is not tied to a release version, repository commit, checksum, signature, or other immutable identity. The bundled `scripts/ast-watcher.sh` was inspected and did not contain an embedded malicious payload. The vulnerability is that the code ultimately installed by a user may differ from the audited bundled script. A later compromise of the service, DNS or hosting infrastructure, deployment pipeline, or maintainer account could replace the remote watcher with arbitrary shell code. Because cron repeatedly invokes the downloaded file, a one-time compromise of the download endpoint can establish recurring execution under the installing user's account. The cron process also supplies sensitive credentials to the script, increasing the consequences of payload substitution. # ...[truncated 1489 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
references/notifications.md:120
Finding

API and Hook Tokens Are Stored Directly in Plaintext Crontab Configuration

Content
View full analysis
> /tmp/ast-watcher.log 2>&1 ``` ### Technical Analysis The recommended cron command embeds both bearer credentials directly into the crontab entry. These credentials consequently become persistent configuration data rather than ephemeral process environment values. This approach conflicts with the general guidance in `SKILL.md:411` that credentials should be supplied through environment variables. Although the cron syntax technically creates environment variables for the invoked process, their values remain stored in plaintext inside the crontab. Crontab content may be exposed through configuration backups, administrative diagnostics, support bundles, screenshots, shell-history entries created while installing the job, or local accounts and management tools authorized to inspect scheduled tasks. The recommended `/tmp/ast-watcher.log` destination does not intentionally log secrets, but use of a shared temporary directory also makes operational metadata more broadly visible than necessary. ### Attack Path 1. A user substitutes real credentials into the documented cron command. 2. The cron entry persistently stores those credentials in plaintext. 3. An attacker gains access to the user's cron configuration, a backup, a diagnostic archive, installation shell history, or an administrative interface that displays scheduled commands. 4. The attacker extracts `AST_API_KEY` and `OPENCLAW_HOOK_TOKEN`. 5. The attacker uses the API token to impersonate the agent within its permitted API scope or uses the hook token to submit requests to a reachable OpenClaw hook. 6. The credentials remain usable until they expire or are explicitly r ...[truncated 727 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/ast-watcher.sh:8
Finding

Credential-Bearing Requests Permit Arbitrary Destination Overrides

Content
View full analysis
/dev/null) || exit 0 # Extract count using bash pattern matching (no jq) COUNT=$(echo "$RESPONSE" | grep -o '"count":[0-9]*' | grep -o '[0-9]*$') [ -z "$COUNT" ] || [ "$COUNT" -eq 0 ] && exit 0 LAST_ID=$(echo "$RESPONSE" | grep -o '"lastEventId":[0-9]*' | grep -o '[0-9]*$') [ -z "$LAST_ID" ] && exit 0 curl -sf --max-time 15 -X POST "${HOOK_URL}/hooks/agent" \ -H "Authorization: Bearer $HOOK_TOKEN" \ -H "Content-Type: application/json" \ -d "{ \"message\": \"AGENTIC STREET ALERT: ${COUNT} pending event(s) in your vaults.\", \"name\": \"AgenticStreet\", \"sessionKey\": \"hook:agenticstreet:batch-${LAST_ID}\", \"wakeMode\": \"now\", \"deliver\": true, \"channel\": \"${CHANNEL}\", \"timeoutSeconds\": 90 }" 2>/dev/null || true # Acknowledge receipt (if this fails, next poll re-delivers — agent deduplicates via sessionKey) curl -sf --max-time 5 -X POST "${API_URL}/notifications/ack" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d "{\"lastEventId\": $LAST_ID}" 2>/dev/null || true ``` The same unrestricted API override pattern is used in: - `scripts/ast-deposit.sh:8-13` - `scripts/ast-veto.sh:7-11` - `scripts/ast-browse.sh:7-14` ### Technical Analysis `AST_API_URL` and `OPENCLAW_HOOK_URL` are accepted without scheme, hostname, port, or pat ...[truncated 2359 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:298
Finding

Unpinned NPM Packages Are Downloaded and Executed

Content
View full analysis
Remediation
View remediation
`, rather than resolving the current latest release. 2. Replace `clawhub@latest` with a specific audited version. 3. Publish and verify package provenance, signatures, and registry integrity metadata. 4. Use a lockfile with integrity hashes where the installation model permits it. 5. Review package contents and lifecycle scripts before execution. 6. Disable unnecessary NPM lifecycle scripts during installation where compatible with the package. 7. Run MCP servers with minimal filesystem, environment, and network privileges. 8. Establish an explicit update process that reviews release differences before changing pinned versions. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
Findings (67)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The documented behavior goes beyond simple fund browsing and management by including watcher behavior, notification polling, webhook delivery, and local hook interaction, yet that operational scope is not reflected in a clear permission model. Hidden or underemphasized behavior increases the chance that users enable networked automation they did not fully assess, which is more dangerous in a finance-related skill.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
84% confidence
Finding

The skill recommends storing registration credentials in a plaintext JSON file under the home directory. Even though the example shows registrationId, the same section instructs polling for and storing an API key, so users may co-locate live credentials in a world-readable or weakly protected file, enabling impersonation for authenticated write operations.

Content

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

Save your registrationId! You need it to poll for your API key after your human claims you.

Recommended: Save your credentials to ~/.config/agentic-street/credentials.json:

json
{

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding

The skill clearly instructs use of shell commands and network-capable tooling, but it does not declare an explicit tool scope such as permissions or allowed-tools. That omission weakens sandboxing and review because a host may grant broader execution than users expect, increasing the chance of unintended command execution or outbound requests during use.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
83% confidence
Finding

Using npx clawhub@latest install agenticstreet pulls and executes mutable remote code at install time, so a compromised package, dependency, or future malicious release could execute arbitrary code on the user's machine. In a skill that handles API keys and financial workflows, supply-chain exposure is especially sensitive.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% 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 95)May include surrounding context.

Install locally:

bash
mkdir -p ~/.agentic-street/skills/agentic-street
curl -s https://agenticstreet.ai/skill.md > ~/.agentic-street/skills/agentic-street/SKILL.md
curl -s https://agenticstreet.ai/api/skill/references/api-reference.md > ~/.agentic-street/skills/agentic-street/api-reference.md
curl -s https://agenticstreet.ai/api/skill/references/depositing.md > ~/.agentic-street/skills/agentic-street/depositing.md

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

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

bash
mkdir -p ~/.agentic-street/skills/agentic-street
curl -s https://agenticstreet.ai/skill.md > ~/.agentic-street/skills/agentic-street/SKILL.md
curl -s https://agenticstreet.ai/api/skill/references/api-reference.md > ~/.agentic-street/skills/agentic-street/api-reference.md
curl -s https://agenticstreet.ai/api/skill/references/depositing.md > ~/.agentic-street/skills/agentic-street/depositing.md
curl -s https://agenticstreet.ai/api/skill/references/fund-creation.md > ~/.agentic-street/skills/agentic-street/fund-creation.md

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

bash
mkdir -p ~/.agentic-street/skills/agentic-street
curl -s https://agenticstreet.ai/skill.md > ~/.agentic-street/skills/agentic-street/SKILL.md
curl -s https://agenticstreet.ai/api/skill/references/api-reference.md > ~/.agentic-street/skills/agentic-street/api-reference.md
curl -s https://agenticstreet.ai/api/skill/references/depositing.md > ~/.agentic-street/skills/agentic-street/depositing.md
curl -s https://agenticstreet.ai/api/skill/references/fund-creation.md > ~/.agentic-street/skills/agentic-street/fund-creation.md

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

Step 2: Check terms

bash
curl https://agenticstreet.ai/api/funds/0xVAULT_ADDRESS/terms

Note the raise address (you need this for depositing — not the vault address), fees (managementFeeBps, performanceFeeBps), fundDuration, and strategy metadata.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

The MCP setup recommends npx -y agentic-street-mcp without pinning a specific package version, which executes whatever version is current on npm at runtime. That creates a supply-chain execution path that could expose local environment variables, wallet-related data, or alter transaction flows if the package is ever compromised.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
76% confidence
Finding

The skill recommends optional submission of transactions to api.bankr.bot using a separate API key, which introduces third-party transmission into a sensitive financial workflow. Even though private keys are not sent, transaction intent, wallet-linked behavior, and potentially exploitable submission control are delegated to an external service, increasing trust and privacy risk.

Content

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

Via Bankr (if you have the Bankr skill):

bash
curl -X POST https://api.bankr.bot/agent/submit \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $BANKR_KEY" \
  -d '{

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The document quickly moves from unsigned transaction generation to signing/broadcasting without an upfront warning that these actions can trigger irreversible on-chain financial effects. In an agentic DeFi skill, this omission is dangerous because users or autonomous agents may treat example flows as routine API calls rather than capital-moving blockchain operations.

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/api-reference.md (reported line 46)May include surrounding context.

Submitting with Bankr

bash
curl -X POST https://api.bankr.bot/agent/submit \
  -H "X-API-Key: $BANKR_KEY" \
  -H "Content-Type: application/json" \
  -d '{

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 · references/api-reference.md (reported line 46)May include surrounding context.

Submitting with Bankr

bash
curl -X POST https://api.bankr.bot/agent/submit \
  -H "X-API-Key: $BANKR_KEY" \
  -H "Content-Type: application/json" \
  -d '{

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 · references/fund-creation.md (reported line 167)May include surrounding context.

Submitting with Bankr

bash
curl -X POST https://api.bankr.bot/agent/submit \
  -H "X-API-Key: $BANKR_KEY" \
  -H "Content-Type: application/json" \
  -d '{

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest describes fund browsing, investing, proposing/vetoing trades, withdrawals, and fee/fund lifecycle actions. This reference additionally defines a self-service registration and claim flow that creates and retrieves API keys for arbitrary agents, which is an account/bootstrap capability rather than an obvious implementation detail of DeFi fund operations themselves.

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/api-reference.md (reported line 353)May include surrounding context.

| walletAddress | string | No | 0x-prefixed wallet address on Base. Rejected if wallet already has an active key. |

bash
curl -X POST https://agenticstreet.ai/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "agentName": "Alpha Fund Manager",

External Transmission

Medium
Category
Data Exfiltration
Confidence
76% confidence
Finding

The claim flow transmits a claim token and tweet URL to obtain an API key, but the documentation does not warn that whoever possesses the claim token can complete the process and retrieve credentials. In an agent setting, accidental exposure of claim URLs/tokens in logs, prompts, or chats could allow unauthorized API-key issuance.

Content

Scanner excerpt · references/api-reference.md (reported line 415)May include surrounding context.

| walletAddress | string | No | 0x-prefixed wallet address on Base |

bash
curl -X POST https://agenticstreet.ai/api/auth/claim \
  -H "Content-Type: application/json" \
  -d '{
    "claimToken": "abc123def456...",

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/api-reference.md (reported line 514)May include surrounding context.

| depositWindow | number | Deposit window in seconds (informational) |

bash
curl -X POST https://agenticstreet.ai/api/metadata/pin \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

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/api-reference.md (reported line 560)May include surrounding context.

Note: fundDuration and depositWindow are strings, not numbers. managementFeeBps and performanceFeeBps are numbers.

bash
curl -X POST https://agenticstreet.ai/api/funds/create \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

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/api-reference.md (reported line 601)May include surrounding context.

| amount | string | USDC amount in 6-decimal raw units (e.g. "1000000000" = 1,000 USDC) |

bash
curl -X POST https://agenticstreet.ai/api/funds/0xRAISE/deposit \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "amount": "1000000000" }'

External Transmission

Medium
Category
Data Exfiltration
Confidence
82% confidence
Finding

The adapter proposal example includes financial trade parameters and demonstrates amountOutMin: "0", which implies no slippage protection. In a DeFi trading context, documenting zero minimum output normalizes a pattern that can expose users to severe MEV, sandwiching, or catastrophic price execution.

Content

Scanner excerpt · references/api-reference.md (reported line 660)May include surrounding context.

| params | object | Action-specific parameters |

bash
curl -X POST https://agenticstreet.ai/api/funds/0xVAULT/propose \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

External Transmission

Medium
Category
Data Exfiltration
Confidence
79% confidence
Finding

The raw-call proposal path allows arbitrary calldata for any protocol, which is a powerful capability in a fund-management skill handling real capital. Without strong warnings, validation guidance, or restrictions in the reference, integrators may generate dangerous arbitrary calls that approve unlimited spend, transfer assets, or interact with malicious contracts.

Content

Scanner excerpt · references/api-reference.md (reported line 685)May include surrounding context.

| value | string | ETH value in wei (usually "0") |

bash
curl -X POST https://agenticstreet.ai/api/funds/0xVAULT/propose \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

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/api-reference.md (reported line 729)May include surrounding context.

| shares | string | Number of shares to withdraw (raw units) |

bash
curl -X POST https://agenticstreet.ai/api/funds/0xVAULT/withdraw/request \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "shares": "5000000000" }'

Unrestricted Tool Access

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill grants unrestricted tool access without appropriate constraints. An agent with unfettered tool access can perform arbitrary actions including file modification, network requests, and code execution.

Content

Scanner excerpt · references/api-reference.md (reported line 828)May include surrounding context.

md
**Uses RAISE address, not vault.** Calling this on the vault address will revert.

Finalise a fund after deposits meet minRaise. Activates the vault and mints LP shares. Anyone can call — the contract has no access restriction.

**Body:** `{}`

Unrestricted Tool Access

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill grants unrestricted tool access without appropriate constraints. An agent with unfettered tool access can perform arbitrary actions including file modification, network requests, and code execution.

Content

Scanner excerpt · references/api-reference.md (reported line 847)May include surrounding context.

md
**Uses RAISE address, not vault.** Calling this on the vault address will revert.

Finalise a fund after deposits meet minRaise. Activates the vault and mints LP shares. Anyone can call — the contract has no access restriction.

**Body:** `{}`