Back to skill

Security audit

Decision Maker

Security checks for vulnerabilities and agentic risk

Overview

The main decision-support tool is present, but the package also includes an unrelated workflow helper that silently logs command arguments locally.

Review this package before installing. The decision-analysis script itself is simple and local, but the extra workflow script is out of scope and writes command history to disk. Avoid passing sensitive values as arguments, and prefer a version that removes the workflow helper or clearly documents and controls its logging behavior.

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

Note
Location
scripts/script.sh:5
Finding
Undisclosed Persistent Logging of User-Supplied Command Arguments## Vulnerability Details **File Location**: `scripts/script.sh:5-7`, `scripts/script.sh:35-76` **Vulnerability Type**: Plaintext storage of potentially sensitive user input **Risk Level**: Low ### Vulnerable Code ```bash DATA_DIR="${DECISION_MAKER_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/decision-maker}" DB="$DATA_DIR/data.log" mkdir -p "$DATA_DIR" ``` ```bash _log() { echo "$(date '+%m-%d %H:%M') $1: $2" >> "$DATA_DIR/history.log"; } cmd_init() { echo " Project initialized in $(pwd)" _log "init" "${1:-}" } cmd_check() { echo " Running lint + type check + tests..." _log "check" "${1:-}" } cmd_build() { echo " Building..." _log "build" "${1:-}" } cmd_test() { echo " Running test suite..." _log "test" "${1:-}" } cmd_deploy() { echo " Deploy: build -> test -> stage -> prod" _log "deploy" "${1:-}" } cmd_config() { echo " Config: $DATA_DIR/config.json" _log "config" "${1:-}" } cmd_status() { echo " Status: checking project health..." _log "status" "${1:-}" } cmd_template() { echo " Template for: $1" _log "template" "${1:-}" } cmd_docs() { echo " Generating docs..." _log "docs" "${1:-}" } cmd_clean() { echo " Cleaned build artifacts" _log "clean" "${1:-}" } ``` ### Technical Analysis The script creates a persistent data directory whenever it starts and appends the first user-supplied command argument to `history.log` for multiple commands. The logged value is written in plaintext without sensitivity filtering, explicit user consent, retention controls, or restrictive permissions established by the script. The resulting permissions depend on the caller's existing `umask`. In environments with permissive defaults or an attacker-controlled `DECISION_MAKER_DIR`, the log may be accessible to unintended local users or processes. The behavior is also not disclos ...[truncated 1508 chars]
Remediation
## Remediation Suggestions 1. Remove `scripts/script.sh` if the unrelated developer-workflow interface is not an intended part of the decision-analysis skill. 2. Disable argument logging by default and require explicit, documented opt-in if operational history is genuinely necessary. 3. Do not persist raw command arguments. Log only a fixed command identifier or redact values that may contain confidential information. 4. Establish restrictive permissions before creating storage: ```bash umask 077 mkdir -p -- "$DATA_DIR" chmod 700 -- "$DATA_DIR" ``` 5. Create the history file with owner-only permissions and verify that the resolved destination is an expected directory before writing. 6. Validate or avoid externally supplied `DECISION_MAKER_DIR` values where the execution environment may be untrusted. 7. Document what is collected, where it is stored, how long it is retained, and how users can inspect or delete it. 8. Add tests confirming that sensitive arguments are not written to persistent storage and that created files are not accessible to other users.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (7)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description says this skill is for decision analysis and decision-support methods. The supplied code does not implement any decision-making logic such as pros/cons analysis, weighted matrices, blind selection, framework recommendation, or risk assessment. Instead, it is a command-line developer tooling wrapper for project workflow tasks, with commands for initialization, checks, build, test, deploy, docs, templates, and cleanup. It also creates a local data directory and logs command usage to history.log. This is a materially different primary purpose and includes undeclared capabilities unrelated to the stated decision-analysis function.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The script’s actual behavior is a generic developer workflow helper with commands like init, build, test, deploy, and docs, which materially conflicts with the manifest’s advertised decision-analysis purpose. This kind of capability mismatch is dangerous because it can cause users or host systems to grant trust, permissions, or execution context under false pretenses, enabling unintended automation or abuse of developer environments.

Vague Triggers

Medium
Confidence
84% confidence
Finding
This markdown file includes guidance to start with `help`, but does not clearly constrain that trigger to the `decision-maker` skill context. Because `help` is a generic term used across many tools and ordinary conversation, it can create ambiguous or unintended invocations.

Natural-Language Policy Violations

Medium
Confidence
97% confidence
Finding
Across the script, all user-facing help text and generated decision templates are presented in Chinese, with only occasional English labels in parentheses. The file does not offer user opt-in for language selection or document that the skill is intentionally limited to a Chinese-language audience, which makes this a natural-language locale policy concern.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The inline banner and help text explicitly present the tool as a 'Developer workflow automation tool,' directly contradicting the manifest’s decision-making description. This inconsistency increases the likelihood of deceptive packaging or unsafe operator assumptions, especially in ecosystems where skills are selected and trusted based on metadata rather than source review.

Missing User Warnings

Low
Confidence
91% confidence
Finding
The `_log` function persistently records command activity into a user data directory without any user-facing notice, consent, retention policy, or opt-out. While the logged fields are limited, silent persistence can still expose sensitive workflow details, project names, or user-provided arguments over time, especially on shared systems or when arguments contain confidential text.

Natural-Language Policy Violations

Low
Confidence
95% confidence
Finding
The file's instructional content is written in Chinese throughout, and there is no indication that the user can opt into this language or select an alternative. Under the policy for natural-language violations, forcing a specific language without user choice can be a locale policy issue.

Static analysis

No suspicious patterns detected.