Back to skill

Security audit

DBQ — 多数据库查询助手

Security checks for vulnerabilities and agentic risk

Overview

This database skill is mostly coherent and disclosed, but it has real safety issues around production database access, credential exposure, and SQL policy bypasses.

Review carefully before installing, especially for prod. Use least-privileged read-only database accounts, avoid DB_QUERY_ASSUME_YES for writes, do not use --keychain-get, restrict log access or disable full SQL logging, and require verified TLS or a trusted private network for remote databases.

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 (5)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/db_core.py:648
Finding

SQL Policy Bypass Through Stacked Statements

Content
View full analysis
str: """Return the SQL operation level: READ / DML / DDL / BLOCKED.""" s = stripped_sql.upper() for p in _BLOCKED_PREFIXES: if s.startswith(p): return "BLOCKED" for p in _DDL_PREFIXES: if s.startswith(p): return "DDL" for p in _DML_PREFIXES: if s.startswith(p): return "DML" for p in _READ_PREFIXES: if s.startswith(p): return "READ" return "BLOCKED" ``` ```python # scripts/query.py:395-399 op_type = validate_sql(args.sql, args.db_alias, env, args.config, dry_run=args.dry_run) sql = args.sql.strip() is_write = op_type in ("DML", "DDL") ``` ```python # scripts/db_core.py:153 cursor.execute(sql) ``` ### Technical Analysis The normal query path classifies the complete SQL string solely by its initial keyword. It does not parse the input into statements or require that the input contain exactly one statement. An input beginning with `SELECT` is therefore classified as `READ`, even if it contains a second DML or DDL statement after a semicolon. The original, unmodified string is subsequently passed to `cursor.execute()`. This bypasses controls that only run when `is_write` is true: - `readonly: false` authorization for DML - `allow_ddl: true` authorization for DDL - DELETE and UPDATE WHERE-clause validation - Dry-run handling - Production write confirmation - Write-operation log ...[truncated 1585 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/query.py:217
Finding

Database Credentials Can Be Printed in Plaintext

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/db_core.py:105
Finding

Full SQL Statements Are Persisted in Plaintext Logs

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/db_core.py:27
Finding

Database Connections Do Not Enforce Verified Transport Encryption

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
references/drivers.md:4
Finding

Third-Party Dependencies Are Installed Without Version or Integrity Pinning

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (112)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill is presented as 'security-first' and effectively read-oriented, but the documentation also exposes write operations, DDL execution, keychain credential management, and config generation. This mismatch can cause operators or upstream policy engines to trust the skill more than warranted, leading to unsafe invocation in sensitive environments such as prod databases.

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 · scripts/db_config.py (reported line 17)May include surrounding context.

python
SKILL_DIR = Path(__file__).resolve().parent.parent
ASSETS_DIR = SKILL_DIR / "assets"
ENV_FILE = ASSETS_DIR / ".env"
LOG_DIR = SKILL_DIR / "logs"

DEFAULT_ENV = os.environ.get("DB_QUERY_DEFAULT_ENV", "dev")

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/db_config.py (reported line 113)May include surrounding context.

python
SKILL_DIR = Path(__file__).resolve().parent.parent
ASSETS_DIR = SKILL_DIR / "assets"
ENV_FILE = ASSETS_DIR / ".env"
LOG_DIR = SKILL_DIR / "logs"

DEFAULT_ENV = os.environ.get("DB_QUERY_DEFAULT_ENV", "dev")

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/test.py (reported line 134)May include surrounding context.

python
SKILL_DIR = Path(__file__).resolve().parent.parent
ASSETS_DIR = SKILL_DIR / "assets"
ENV_FILE = ASSETS_DIR / ".env"
LOG_DIR = SKILL_DIR / "logs"

DEFAULT_ENV = os.environ.get("DB_QUERY_DEFAULT_ENV", "dev")

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/test.py (reported line 254)May include surrounding context.

python
SKILL_DIR = Path(__file__).resolve().parent.parent
ASSETS_DIR = SKILL_DIR / "assets"
ENV_FILE = ASSETS_DIR / ".env"
LOG_DIR = SKILL_DIR / "logs"

DEFAULT_ENV = os.environ.get("DB_QUERY_DEFAULT_ENV", "dev")

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest describes a security-first multi-database SQL assistant that is read-only by default with gated DML/DDL. In this file, the module docstring and argument help explicitly present the tool as a query/write utility, and the main execution path validates, confirms, and executes DML/DDL statements rather than limiting behavior to read-only querying.

Content

No source excerpt is available for this finding.

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

md
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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

md
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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

md
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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

md
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/db_config.py (reported line 180)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/db_config.py (reported line 210)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/query.py (reported line 15)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/query.py (reported line 28)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/query.py (reported line 191)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/query.py (reported line 200)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/query.py (reported line 202)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/query.py (reported line 254)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/query.py (reported line 292)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/query.py (reported line 338)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/query.py (reported line 339)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/query.py (reported line 342)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/test.py (reported line 36)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/test.py (reported line 290)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

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 · scripts/test.py (reported line 291)May include surrounding context.

python
python query.py <db_alias> --desc "user_*"                   # 通配符匹配
    python query.py <db_alias> --ddl user_info                   # 建表 DDL
    python query.py <db_alias> --ping                                # 连接测试
    python query.py --keychain-set <alias> --env prod                # 存密码
"""

from __future__ import annotations

Static analysis

No suspicious patterns detected.