Back to skill

Security audit

password-manager-migrator

Security checks for vulnerabilities and agentic risk

Overview

This skill is an offline password-manager migration planner that does not read vault files itself, but users must handle any manual vault exports very carefully.

Before installing, understand that the tool itself appears offline and metadata/count based, but password-manager exports are highly sensitive. Keep exports local, offline, outside synced folders, avoid spreadsheets or extra copies when possible, and delete temporary exports after confirming the import. Use --src and --dst with the script despite the older --from/--to examples in SKILL.md.

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
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (7)

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

python
("safari", "bitwarden"): (
        "Bitwarden Safari/ICloud importer (via export from Safari settings)",
        ["logins"],
        ["TOTP (iCloud keychain OTPs don't export)", "secure notes (export separately)",
         "passkeys"],
        "Apple hides exports on iOS; use the Mac to export."),
    ("keepass", "1password"): (

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The worksheet instructs users to export both source and target vault data, which typically produces plaintext or broadly readable sensitive files containing passwords, notes, and metadata. Omitting any warning about secure handling, temporary storage, encryption, or prompt deletion increases the chance users will leave exports exposed on disk, sync them to cloud folders, or mishandle them during migration.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Recommending jq, diff, or spreadsheets on exported vault data encourages moving secret-bearing data into tools and formats that may create additional copies, shell history, temp files, autosaves, or cloud-backed documents. Without guardrails, users may paste secrets into insecure spreadsheet software or leave normalized CSVs in accessible locations, expanding the exposure surface during migration.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Recovery codes are equivalent to backup authentication factors and can bypass TOTP if exposed. Telling users to save them as secure notes without stressing their sensitivity, limiting copies, or verifying they are stored only in the new manager may lead to unsafe storage in plaintext notes, screenshots, downloads, or clipboard history.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

These lines discuss password-encrypted and unencrypted export formats and recommend temporary storage plus secure deletion, but they do not explicitly warn that unencrypted exports contain all vault secrets in plaintext and pose immediate compromise risk if copied, synced, or left behind. Because this markdown file describes handling highly sensitive credential data, a clear user-facing warning about privacy and security impact is expected.

Content

No source excerpt is available for this finding.

Dynamic attribute access via getattr()

Low
Category
Dangerous Code Execution
Confidence
50% confidence
Finding

Dynamic getattr() with a non-literal attribute name can access arbitrary object attributes, potentially bypassing access controls.

Content

Scanner excerpt · scripts/vault_migrate.py (reported line 230)May include surrounding context.

python
deltas = []
    ok = True
    for kind in ("logins", "notes", "cards"):
        pre = getattr(a, f"pre_{kind}")
        post = getattr(a, f"post_{kind}")
        if pre is None or post is None:
            continue

Dynamic attribute access via getattr()

Low
Category
Dangerous Code Execution
Confidence
50% confidence
Finding

Dynamic getattr() with a non-literal attribute name can access arbitrary object attributes, potentially bypassing access controls.

Content

Scanner excerpt · scripts/vault_migrate.py (reported line 231)May include surrounding context.

python
ok = True
    for kind in ("logins", "notes", "cards"):
        pre = getattr(a, f"pre_{kind}")
        post = getattr(a, f"post_{kind}")
        if pre is None or post is None:
            continue
        d = post - pre

Static analysis

No suspicious patterns detected.