Back to skill

Security audit

bank-scan-household-splitter

Security checks for vulnerabilities and agentic risk

Overview

This skill is purpose-built for bank and legal document sorting, but it uploads full identity and application images to an external vision API without a clear consent or privacy control.

Review before installing. Use this only if you are allowed to send the scanned IDs, bank forms, and legal materials to the Doubao/Volcengine API, and avoid running it on regulated or client-confidential files without explicit approval. Prefer adding an upload confirmation, redaction or local-only mode, and masked logging before production use.

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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • 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 (16)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill claims a full local-first pipeline with extraction, matching, cross-validation, and segregated manual-review outputs, but the described implementation does not actually enforce those safety and correctness controls. In a banking and legal document context, this mismatch can cause operators to trust automation that may silently omit validation steps, mishandle records, or mix households incorrectly.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill explicitly states that document images stay local except for the recognition step, which means IDs and application forms containing highly sensitive personal data are sent to an external vision model. Without a clear privacy warning, consent step, retention notice, and third-party data handling disclosure, users may unknowingly exfiltrate regulated personal and financial identity data.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The workflow includes code and instructions to transmit images of身份证 and bank application materials to an external API, but there is no mandatory user confirmation or safety interlock before sending this sensitive content. In context, this is especially dangerous because the materials contain government IDs, names, ID numbers, and financial application data that may be subject to strict privacy, banking, and legal confidentiality obligations.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

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

md
import sys, os, json, base64, urllib.request, time, glob, re

def get_env_key(var_name, env_path=None):
    """优先读环境变量;没有则依次找常见 .env 位置(不写死任何机器路径)"""
    if os.environ.get(var_name):
        return os.environ[var_name]
    cands = [env_path] if env_path else []

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · scripts/doubao_batch_classify.py (reported line 10)May include surrounding context.

python
import sys, os, json, base64, urllib.request, time, glob, re

def get_env_key(var_name, env_path=None):
    """优先读环境变量;没有则依次找常见 .env 位置(不写死任何机器路径)"""
    if os.environ.get(var_name):
        return os.environ[var_name]
    cands = [env_path] if env_path else []

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · scripts/doubao_batch_classify.py (reported line 14)May include surrounding context.

python
if os.environ.get(var_name):
        return os.environ[var_name]
    cands = [env_path] if env_path else []
    cands += [os.path.expanduser("~/.env"),
              os.path.join(os.path.expanduser("~"), ".config", ".env"),
              os.path.join(os.getcwd(), ".env")]
    for p in cands:

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · scripts/doubao_batch_classify.py (reported line 15)May include surrounding context.

python
if os.environ.get(var_name):
        return os.environ[var_name]
    cands = [env_path] if env_path else []
    cands += [os.path.expanduser("~/.env"),
              os.path.join(os.path.expanduser("~"), ".config", ".env"),
              os.path.join(os.getcwd(), ".env")]
    for p in cands:

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · scripts/doubao_batch_classify.py (reported line 16)May include surrounding context.

python
if os.environ.get(var_name):
        return os.environ[var_name]
    cands = [env_path] if env_path else []
    cands += [os.path.expanduser("~/.env"),
              os.path.join(os.path.expanduser("~"), ".config", ".env"),
              os.path.join(os.getcwd(), ".env")]
    for p in cands:

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The code transmits full images of IDs, applications, and contracts to an external API without any built-in warning, consent prompt, or policy guard in the script. Because this skill is specifically designed for bulk householding of bank and legal document scans, the data is likely to include PII and regulated financial information at scale, making undisclosed external transmission especially dangerous.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill describes capabilities that require filesystem access, environment variable use, and outbound network calls, but it does not declare an explicit tool/permission scope. This creates an authorization ambiguity where a high-risk workflow handling sensitive identity documents could run with broader capabilities than users realize or approve.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

该技能是 markdown 文件,适用 SQP-1。L018 的触发词列表包含“归户”“OCR 分类”等高度泛化表述,且未给出排除条件或负面示例,容易与大量普通文档整理、OCR 或归档场景重叠,造成非预期调用。

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

L026 再次列出触发词,其中“扫描件拆分”“材料按户分开”“OCR 分类”等表达未限定行业、输入结构或输出目标,也没有说明哪些相似请求不应触发该技能。重复且宽泛的触发定义会增加误调用风险。

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script base64-encodes full scanned document images and sends them to a remote vision API. In this skill context, the images contain highly sensitive identity and banking documents, so transmitting raw images off-host creates significant privacy, compliance, and data-handling risk, especially if users are not clearly informed that third-party processing occurs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script prints model output directly to stdout, which may include names, ID numbers, and issuing authority data extracted from identity documents. In shared terminals, CI logs, remote shells, or captured session transcripts, this can leak sensitive personal data beyond the intended processing workflow.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

文件整体以中文命名、描述和示例输出,且未见提供语言/locale 选择机制。按规则,若技能强制特定语言而没有用户 opt-in 或明确说明适用语言范围,可能构成自然语言策略问题。

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The docstring states '断点续传+重试+usage累计', implying accumulated usage across resumed processing. However, when resuming from an existing output file, the script reloads prior classification results but resets token counters to zero, so usage totals reflect only the current invocation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.