Back to skill

Security audit

Local-Passwords-Manager

Security checks for vulnerabilities and agentic risk

Overview

This is a real local password manager, but it handles credentials with weak safeguards that users should review before installing.

Install only if you accept local credential storage with these limitations. Avoid entering real passwords as command-line arguments, do not use export unless you can protect and delete the CSV securely, verify cryptography is installed before adding secrets, and consider tightening file permissions on the vault, key, and any exports.

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
password_manager.py:12
Finding

Credentials Are Silently Stored in Plaintext When Encryption Is Unavailable

Content
View full analysis
str: """加密密码""" if not ENCRYPTION_AVAILABLE: return password cipher = get_cipher() if cipher: return cipher.encrypt(password.encode()).decode() return password ``` ### Technical Analysis The application fails open when the `cryptography` dependency is unavailable. Instead of refusing to accept or persist credentials, `encrypt_password()` returns the original password unchanged. The caller then stores that value in `passwords.json` as though it were encrypted. A console warning is insufficient protection because users or automated agents may overlook it. This also contradicts the documented claim that passwords are encrypted at rest. The final `return password` creates an additional fail-open path if a cipher is unexpectedly unavailable. ### Attack Path 1. The application runs in an environment where `cryptography` is absent or cannot be imported. 2. `ENCRYPTION_AVAILABLE` is set to `False`. 3. A user or agent invokes the `add` or `import` command. 4. `encrypt_password()` returns the original credential without encryption. 5. `save_passwords()` writes the plaintext credential to `~/.openclaw/workspace/passwords.json`. 6. Any local user or process with read access to that file can recover the credential directly. ### Impact Assessment An attacker who can read the vault file can obtain every credential added while encryption was unavailable. The exposure includes passwords for all represented services and accounts and may consequently enab ...[truncated 146 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
password_manager.py:473
Finding

Passwords Are Accepted Through Process Command-Line Arguments

Content
View full analysis
<账号> <密码> [备注] [姓名] [标签]") sys.exit(1) service = sys.argv[2] username = sys.argv[3] password = sys.argv[4] note = sys.argv[5] if len(sys.argv) > 5 else "" name = sys.argv[6] if len(sys.argv) > 6 else "" tags = sys.argv[7] if len(sys.argv) > 7 else "" add_password(service, username, password, note, name, tags) ``` ```python elif command == "update": if len(sys.argv) < 5: print("用法: update <服务名> <账号> <新密码>") sys.exit(1) update_password(sys.argv[2], sys.argv[3], sys.argv[4]) ``` The documented interface reinforces this unsafe pattern: ```bash python3 scripts/password_manager.py add GitHub user1@email.com 123456 python3 scripts/password_manager.py update GitHub user1@email.com newpass123 ``` ### Technical Analysis Passwords and replacement passwords are obtained directly from `sys.argv`. Command-line arguments can be exposed through shell history, process inspection facilities, terminal recording, orchestration logs, debugging output, audit systems, and agent or tool invocation transcripts. This disclosure occurs before encryption and is therefore independent of the cryptographic protection applied to the vault. Quoting or escaping a password does not prevent it from being present in the process argument vector. ### Attack Path 1. A user follows the documented `add` or `update` command format and supplies a password as a command-line argument. 2. The shell may record the complete command in history. 3. While the command is running, another permitted local process may inspect its argument v ...[truncated 587 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
password_manager.py:27
Finding

Credential Vault and Temporary File Are Created Without Explicit Restrictive Permissions

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
password_manager.py:345
Finding

Plaintext Credential Exports Are Written Without Restrictive Permissions

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
SKILL.md:238
Finding

Security-Critical Dependency Is Installed Without Version or Hash Pinning

Content
View full analysis
Remediation
View remediation
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 (10)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The documented purpose does not fully disclose sensitive behaviors including access to a local encryption key file, CSV import/export, tag management, and bulk deletion operations. In a password-management context, undisclosed export and deletion capabilities are especially dangerous because they enable silent exfiltration or destructive modification of credential stores beyond what a user may reasonably expect.

Content

No source excerpt is available for this finding.

Vague Triggers

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrases are broad enough to activate on ordinary requests like '查一下xxx' or '搜索xxx', which may be unrelated to credential handling. Because this skill can retrieve, modify, delete, export, or copy passwords, accidental invocation could disclose secrets or alter stored credentials in response to ambiguous user input.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill documents password export and clipboard-copy behavior without prominent warnings about the security consequences. Exporting plaintext credentials to CSV or placing them on the clipboard creates high-risk disclosure channels, since other local processes, users, backups, or sync tools may access that data.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The export function decrypts every stored password and writes them to a plaintext CSV file without a prominent warning or safeguard. In a password-manager context, this creates a single bulk-compromise artifact that can be copied, synced, indexed, or recovered from disk far more easily than the encrypted store.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill declares shell, file-read, and file-write behavior but does not define any explicit tool scope or permissions boundaries. For a password manager handling highly sensitive secrets, missing scope declarations increases the chance the agent can invoke powerful actions without clear review or least-privilege constraints.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The module claims encrypted local storage, but when the cryptography dependency is missing it silently degrades to plaintext storage while continuing to operate. For a password manager, this is especially dangerous because users are likely to trust the security claim and store highly sensitive credentials that may then be saved unencrypted on disk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

User-facing strings throughout the file, including the module description, warnings, usage text, and command output, are written only in Chinese. This creates a language policy concern because the skill forces one locale without opt-in, fallback, or documentation that it is intended solely for a Chinese-language environment.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill adds CSV import/export functionality that is outside the narrowly described password CRUD scope, and the export path writes decrypted passwords to disk in bulk. In a password-manager context, scope expansion matters because it materially increases the attack surface and creates a mass-exfiltration path for all stored credentials.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

Importing plaintext passwords from CSV is inherently sensitive, and the code performs this operation without warning the user that the source file contains raw credentials. While import itself can be legitimate, the lack of safety messaging and handling guidance increases the chance that users leave sensitive CSV files exposed or mishandle them.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The manifest advertises support for multi-account storage, encrypted storage, timestamps, notes/URL/name fields, and full-field search, but does not mention tags, bulk tagging, tag listing, tag-based filtering, or mass deletion by tag/search/empty-tags. These are additional record-management operations beyond the stated user intents of remembering, querying, modifying, deleting, and searching passwords.

Content

No source excerpt is available for this finding.