Back to skill

Security audit

FinTS Banking

Security checks for vulnerabilities and agentic risk

Overview

This banking skill is mostly coherent, but its asynchronous transfer instructions can submit a real transfer without repeating the required final approval gate.

Review this skill carefully before installing. Only use it if you trust the fints-agent-cli package and can verify the version you install. For transfers, do not use the asynchronous transfer-submit flow unless you first run a side-effect-free preflight, inspect every transfer field, and explicitly approve the exact transaction with APPROVE TRANSFER in the same session.

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
SKILL.md:154
Finding

Asynchronous Transfer Workflow Bypasses the Mandatory Approval Gate

Content
View full analysis
\ --to-iban \ --to-name "" \ --amount \ --reason "" ``` Expected: - `Pending ID: ` Continue/poll: ```bash fints-agent-cli transfer-status --id --wait ``` ``` ### Technical Analysis The asynchronous workflow labels direct execution of `transfer-submit` as a “Safe submit flow,” but it does not instruct the agent to: 1. Perform a dry run or equivalent preflight. 2. Display and validate all transfer fields. 3. Obtain the exact final confirmation phrase `APPROVE TRANSFER`. 4. Verify that no transfer field changed after approval. This conflicts with the mandatory transfer gate defined earlier in `SKILL.md`, which requires those controls before executing a real transfer. Because `transfer-submit` submits the transaction and returns a pending identifier, approval deferred until status polling would occur too late. The synchronous workflow correctly separates dry-run and execution, while the asynchronous workflow provides only the real submission command. An agent following the workflow-specific instructions could therefore interpret them as an authorized exception to the general gate. ### Attack Path 1. A transfer is prepared using the asynchronous workflow. 2. The agent follows the documented “Safe submit flow.” 3. The agent invokes `fints-agent-cli transfer-submit` without first running a preflight or obtaining `APPROVE TRANSFER`. 4. The CLI sends the transfer request to the configured bank. 5. The bank may authorize, queue, or complete the transfer through its FinTS and TAN/SCA process. 6. Subsequent `transfer-status` calls only inspect or continue a transfer that has alrea ...[truncated 646 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
COMMANDS.md:194
Finding

Command Reference Omits Approval Controls for Asynchronous Transfers

Content
View full analysis
\ --to-iban \ --to-name "" \ --amount \ --reason "" ``` Expected: - `Pending ID: ` Poll: ```bash fints-agent-cli transfer-status --id --wait ``` ``` ### Technical Analysis The command reference provides a directly executable asynchronous submission command without placing a dry-run or explicit user-confirmation step immediately before it. Although `COMMANDS.md` defines a mandatory safe transfer gate elsewhere, this operation-specific procedure omits that gate and does not state that the command may only be run after `APPROVE TRANSFER`. Operational command references are likely to be followed locally at the relevant command section. The inconsistency creates a fail-open workflow in which the generic policy can be overlooked or interpreted as applying only to the synchronous transfer example. ### Attack Path 1. An agent or operator consults the asynchronous transfer section. 2. Transfer parameters are populated from the current task. 3. The documented `transfer-submit` command is executed directly. 4. A pending transfer is created without the required dry-run and final approval. 5. The agent polls the pending identifier, but polling cannot restore the missing pre-submission authorization. ### Impact Assessment The workflow may cause a real bank transfer to be submitted without explicit final user authorization. Potential impact includes unauthorized movement of funds, disclosure of transfer metadata to the bank and recipient, operational disputes, and financial loss. The action remains subject to bank-side authentication, transaction limits, and TAN/SCA enf ...[truncated 120 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
SKILL.md:4
Finding

Unpinned Third-Party Banking CLI Dependency

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (6)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · COMMANDS.md (reported line 79)May include surrounding context.

md
Expected success lines:
- `Config saved: ...`
- `PIN saved in Keychain: ...`
- `Onboarding + bootstrap completed.`

### `bootstrap`

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

md
Expected success lines:
- `Config saved: ...`
- `PIN saved in Keychain: ...`
- `Onboarding + bootstrap completed.`

### `bootstrap`

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · COMMANDS.md (reported line 101)May include surrounding context.

md
---
name: fints-banking
description: "Support for German personal online banking following FinTS banking standard. Out of the box support for many german banks. Uses system keychain to keep credentials safe. Native Human-in-the-loop experince for transactions. Built in recovery and onboarding flows."
metadata: {"openclaw":{"emoji":"🏦","homepage":"https://github.com/h4gen/fints-agent-cli","requires":{"bins":["fints-agent-cli"]},"install":[{"id":"uv","kind":"uv","package":"fints-agent-cli","bins":["fints-agent-cli"],"label":"Install fints-agent-cli (uv)"}]}}
---

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

md
---
name: fints-banking
description: "Support for German personal online banking following FinTS banking standard. Out of the box support for many german banks. Uses system keychain to keep credentials safe. Native Human-in-the-loop experince for transactions. Built in recovery and onboarding flows."
metadata: {"openclaw":{"emoji":"🏦","homepage":"https://github.com/h4gen/fints-agent-cli","requires":{"bins":["fints-agent-cli"]},"install":[{"id":"uv","kind":"uv","package":"fints-agent-cli","bins":["fints-agent-cli"],"label":"Install fints-agent-cli (uv)"}]}}
---

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

md
---
name: fints-banking
description: "Support for German personal online banking following FinTS banking standard. Out of the box support for many german banks. Uses system keychain to keep credentials safe. Native Human-in-the-loop experince for transactions. Built in recovery and onboarding flows."
metadata: {"openclaw":{"emoji":"🏦","homepage":"https://github.com/h4gen/fints-agent-cli","requires":{"bins":["fints-agent-cli"]},"install":[{"id":"uv","kind":"uv","package":"fints-agent-cli","bins":["fints-agent-cli"],"label":"Install fints-agent-cli (uv)"}]}}
---

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

md
---
name: fints-banking
description: "Support for German personal online banking following FinTS banking standard. Out of the box support for many german banks. Uses system keychain to keep credentials safe. Native Human-in-the-loop experince for transactions. Built in recovery and onboarding flows."
metadata: {"openclaw":{"emoji":"🏦","homepage":"https://github.com/h4gen/fints-agent-cli","requires":{"bins":["fints-agent-cli"]},"install":[{"id":"uv","kind":"uv","package":"fints-agent-cli","bins":["fints-agent-cli"],"label":"Install fints-agent-cli (uv)"}]}}
---

Static analysis

No suspicious patterns detected.