Back to skill

Security audit

Bank Statement Converter

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it says, but it handles very sensitive bank statements and PDF passwords through a third-party API without enough warning or safer secret handling.

Review the provider's privacy, retention, and security terms before using this skill with real bank statements. Avoid pasting real PDF passwords directly into shell commands; prefer local decryption or a safer client flow that reads secrets without storing them in shell history.

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

Encrypted PDF Password Exposed in Command-Line Arguments and Shell History

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 82–85
Vulnerability Type: Plaintext sensitive data exposure through command-line usage
Risk Level: Medium

Vulnerable Code:

bash
curl -s -X POST \
  -H "Authorization: $BANKSTATEMENT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"passwords": [{"uuid": "bb2f3c62-331e-42ee-a931-d25a5ee0946f", "password": "yourpdfpassword"}]}' \
  https://api2.bankstatementconverter.com/api/v1/BankStatement/setPassword | jq

Technical Analysis

The documentation instructs users to insert an encrypted PDF's password directly into a curl command. When a real password replaces yourpdfpassword, the secret becomes part of the command-line arguments.

Depending on the operating system and shell configuration, the password may be:

  • Persisted in the user's shell history.
  • Exposed temporarily through process inspection interfaces or monitoring tools.
  • Included in terminal logs, support bundles, session recordings, or command auditing.
  • Disclosed if the command is copied into tickets, chat messages, or diagnostic output.

Although the request uses HTTPS, transport encryption does not prevent local disclosure before the request is transmitted. The behavior is related to the skill's stated conversion function, but the secret-handling method is unsafe.

Attack Path

  1. A user replaces yourpdfpassword with the actual password for a bank-statement PDF.
  2. The user runs the documented command in an interactive shell.
  3. The shell records the full command in its history, or a local process-monitoring or audit mechanism captures its arguments.
  4. A local user, administrator, malware process, history collector, or person with access to diagnostic records retrieves the command.
  5. The observer extracts the plaintext PDF password.
  6. If the observer can obtain the encrypted statement, the password may be used to access its financial content ...[truncated 648 chars]
Remediation
View remediation

Remediation Suggestions

  • Do not instruct users to place passwords literally in interactive command lines.
  • Read the password without terminal echo, for example with read -r -s, and clear the variable immediately after use.
  • Generate the JSON body through standard input or a temporary file created with mode 0600, rather than embedding the password in curl arguments.
  • If a temporary file is necessary, create it safely with mktemp, set restrictive permissions, register a cleanup trap, and delete it immediately after the request.
  • Warn users that the password is sent to a third-party conversion service and direct them to review that service's retention and privacy policies.
  • Recommend disabling shell-history recording for unavoidable secret-bearing operations and avoiding terminal session recording.
  • Prefer a client implementation that accepts secrets through protected standard input or another mechanism that does not expose them in process arguments.
  • Apply equivalent protected-secret handling to the API key, ideally through a credential manager or a narrowly scoped environment supplied only to the command that requires it.
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 (5)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill instructs users to upload bank statements to an external API but does not explicitly warn that highly sensitive financial documents and related metadata leave the local environment and are transmitted to a third party. Because bank statements commonly contain account numbers, balances, transactions, and personal identifiers, the missing disclosure creates a real privacy and data-handling risk.

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

Check processing status (poll if needed)

bash
curl -s -X POST \
  -H "Authorization: $BANKSTATEMENT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '["bb2f3c62-331e-42ee-a931-d25a5ee0946f"]' \

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

Check processing status (poll if needed)

bash
curl -s -X POST \
  -H "Authorization: $BANKSTATEMENT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '["bb2f3c62-331e-42ee-a931-d25a5ee0946f"]' \

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill tells users to submit PDF passwords to the external service for encrypted statements without warning that the decryption secret itself is transmitted off-device. Sending both the protected document and its password to a third party materially increases exposure, since compromise or misuse at the service could reveal the full contents of sensitive financial records.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

This endpoint transmits the PDF password to the external service, which is a sensitive credential-like secret protecting confidential financial documents. If intercepted, logged, retained, or mishandled by the provider, the password can be used to decrypt the user's statement and expose account and transaction data.

Content

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

If upload returns pdfType: UNKNOWN or indicates password needed:

bash
curl -s -X POST \
  -H "Authorization: $BANKSTATEMENT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"passwords": [{"uuid": "bb2f3c62-331e-42ee-a931-d25a5ee0946f", "password": "yourpdfpassword"}]}' \