Back to skill

Security audit

Local Password Generator & Strength Check

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent local password utility, but its password checker asks users to put real passwords directly on the command line, which can expose them locally.

Review before installing. The generator appears local and uses Python's secrets module, and no exfiltration or persistence was found. Avoid checking real passwords with this version because the checker takes the password on the command line; use only throwaway examples unless the skill is changed to read from a non-echo prompt or stdin with clear warnings.

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
scripts/check.py:79
Finding

Password Exposure Through Command-Line Arguments

Content
View full analysis

Vulnerability Details

File Location: scripts/check.py:79-80; documented usage at SKILL.md:32-35
Vulnerability Type: Sensitive information exposure through process arguments and shell history
Risk Level: Medium

Vulnerable code:

python
parser = argparse.ArgumentParser(description="Check password strength")
parser.add_argument("password", help="Password to check")
args = parser.parse_args()

Documented invocation:

bash
python3 scripts/check.py "your-password-here"

Technical Analysis

The password-strength checker requires the password to be supplied as a positional command-line argument. Command-line arguments are not an appropriate channel for secrets because they may be:

  • Saved in the user's shell history.
  • Captured by terminal auditing, telemetry, or command logging.
  • Temporarily exposed through process inspection facilities, subject to operating-system permissions and configuration.
  • Recorded by wrapper scripts, job runners, or endpoint-monitoring products.

Although the script does not transmit or persist the password itself, the input mechanism unnecessarily exposes the plaintext password outside the process. This conflicts with the Skill's intended handling of sensitive password data.

Attack Path

  1. A user follows the documented instructions and runs the checker with a real password:
    bash
    python3 scripts/check.py "VictimRealPassword"
    
  2. The shell may write the complete command, including the password, into its history.
  3. While the process is running, its arguments may also be available to an authorized local process-inspection or monitoring facility.
  4. A local user, administrator, support tool, monitoring agent, log collector, or later shell-history reader obtains the plaintext password.
  5. If the password is reused for another account or service, the exposed value may be used in subsequent credential-based attacks.

I

...[truncated 545 chars]

Remediation
View remediation

Remediation Suggestions

  • Remove the positional password argument and read the password interactively with getpass.getpass(), which suppresses terminal echo:
    python
    import getpass
    
    password = getpass.getpass("Password to check: ")
    
  • Pass the resulting local variable to calculate_entropy() rather than reading the secret from argparse.
  • Update SKILL.md so users invoke only:
    bash
    python3 scripts/check.py
    
  • If non-interactive operation is necessary, provide an explicitly documented standard-input mode and warn users against passing secrets as command-line arguments. Avoid environment variables because they may also be exposed through process or diagnostic interfaces.
  • Do not print, log, cache, or persist the submitted password.
  • Add tests confirming that passwords do not appear in process arguments or normal output.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (3)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The code matches part of the description: it is a local password-strength checker using only standard library modules, and it analyzes uppercase, lowercase, digits, symbols, entropy, and estimated crack time. However, the declared purpose also prominently claims secure random password generation with support for custom length and character types. No password generation functionality exists in the supplied code, nor are there options for choosing length or character classes for generated passwords. This is a material description-versus-behavior mismatch because a key advertised capability is absent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The code aligns with the password-generation portion of the description: it operates locally, uses no external services, and supports configurable uppercase, lowercase, digits, symbols, and length. However, the declared description also claims the skill can check password strength, and there is no functionality in the supplied code for evaluating or scoring an existing password. Because a substantive advertised capability is missing from the actual behavior, this is a description-behavior mismatch.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The example python3 scripts/check.py "your-password-here" encourages users to place a secret directly on the command line, where it may be stored in shell history and exposed via process listings to other local users or monitoring tools. In a password utility, this is especially risky because the secret being handled is inherently high-value credential material.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.