Back to skill

Security audit

Konto API

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward helper for querying a personal finance API, with no hidden persistence or destructive behavior found.

Install only if you trust the Konto service and the configured KONTO_URL. Keep ~/.openclaw/secrets/konto.env private, use HTTPS, avoid sharing command output because it may contain financial details, and prefer the narrowest endpoint needed instead of broad summaries or long transaction histories.

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
scripts/konto.sh:2
Finding
Unvalidated API destination can disclose the bearer token<![CDATA[ ## Vulnerability Details **File Location**: `scripts/konto.sh`, lines 2–13 **Vulnerability Type**: Unrestricted transmission of an authorization credential to a configurable destination **Risk Level**: Medium ### Vulnerable Code ```bash source ~/.openclaw/secrets/konto.env URL="${KONTO_URL:-https://konto.angelstreet.io}" AUTH="Authorization: Bearer $KONTO_API_KEY" case ${1:-summary} in summary) curl -s -H "$AUTH" "$URL/api/v1/summary" ;; accounts) curl -s -H "$AUTH" "$URL/api/v1/accounts" ;; invest*) curl -s -H "$AUTH" "$URL/api/v1/investments" ;; loans) curl -s -H "$AUTH" "$URL/api/v1/loans" ;; assets) curl -s -H "$AUTH" "$URL/api/v1/assets" ;; tx*|trans*) curl -s -H "$AUTH" "$URL/api/v1/transactions?months=${2:-6}${3:+&category=$3}" ;; analytics) curl -s -H "$AUTH" "$URL/api/v1/analytics/${2:-demographics}" ;; ``` ### Technical Analysis The script obtains `KONTO_URL` from `~/.openclaw/secrets/konto.env` and uses it directly as the destination for requests carrying the `Authorization: Bearer $KONTO_API_KEY` header. It does not validate the URL scheme or hostname before transmitting the credential. Consequently, an accidental or malicious configuration can direct requests to an arbitrary server. The script also permits an `http://` URL, which would transmit the bearer credential without TLS transport confidentiality. Although `curl` verifies HTTPS certificates by default, that protection does not ensure the selected host is an authorized Konto API server. The vulnerable behavior affects every supported command because each request reuses the same unvalidated URL and authorization header. ### Attack Path 1. An attacker, compromised provisioning process, or unsafe configuration change modifies `KONTO_URL` in `~/.openclaw/secrets/konto.env`, for example: ```bash export KONTO_URL="https://attacker.example" ``` 2. The user or Agent invokes `scripts/konto.sh` with any supported operation. 3. The ...[truncated 1343 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. **Require HTTPS explicitly** - Reject URLs whose scheme is not exactly `https`. - Restrict curl to HTTPS: ```bash curl --proto '=https' --tlsv1.2 --fail --silent --show-error ... ``` 2. **Allowlist approved API hosts** - Parse and compare the configured hostname against a fixed allowlist, such as `konto.angelstreet.io`. - Reject URLs containing unexpected user information, ports, paths, fragments, or malformed hostnames. - Prefer a fixed API origin when custom deployments are not required. 3. **Validate configuration before constructing the authorization request** - Exit without making a request if `KONTO_API_KEY` is absent. - Exit if `KONTO_URL` fails scheme and hostname validation. - Normalize the base URL and reject unexpected trailing path components. 4. **Separate data configuration from executable shell content** - Avoid `source` for files intended only to contain configuration values, because sourcing executes arbitrary shell commands. - Use a non-executable configuration format with strict parsing and restrictive file permissions such as mode `0600`. 5. **Harden credential handling** - Use a credential store or secret manager where available. - Rotate the API key if it may have been sent to an untrusted or plaintext destination. - Grant the token only the minimum required scope. A hardened implementation should validate the origin before attaching the authorization header and terminate on every validation or transport error. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
Findings (4)

Missing User Warnings

Medium
Confidence
95% confidence
Finding
This skill explicitly interacts with a personal finance API and exposes examples for retrieving banking, loan, investment, and transaction data from an external service, but it does not warn users that highly sensitive financial information will be transmitted off-host to remote endpoints. In this context, omission of a clear disclosure materially increases the risk of unintentional data exposure, especially because the examples encourage broad queries such as full summaries and transaction history.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
This markdown file documents endpoints returning bank accounts, transactions, investments, assets, loans, and a full financial summary, which are all highly sensitive user data. The description explains how to access and use these endpoints but does not include any warning about handling personal financial information, privacy implications, or careful disclosure of results.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The quick reference explicitly instructs users to source a local secrets file and immediately use the loaded API key in authenticated requests, but it provides no warning about credential sensitivity, shell history, environment leakage, or safe secret handling. In an agent-skill context, this is more dangerous because users may copy commands verbatim, increasing the chance of exposing financial API credentials or unintentionally querying sensitive personal data.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The script sources secrets from a local environment file and uses the API key to send authenticated curl requests to a remote service. There is no confirmation prompt, logging, comment, or other user-facing disclosure in the file explaining that credentials will be loaded and account data transmitted over the network.

Static analysis

No suspicious patterns detected.