Back to skill

Security audit

Auto Authenticator Local

Security checks for vulnerabilities and agentic risk

Overview

This local TOTP helper is coherent in purpose, but its install and seed-entry paths create review-worthy risk for MFA secrets and local files.

Review before installing. Prefer a pinned, inspectable release or manual install instead of curl | bash, avoid entering real TOTP seeds on the command line, and do not set OPENCLAW_SKILL_DIR to any directory containing valuable files. The core local-authenticator idea is not itself malicious, but the current packaging and seed-entry design need care.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
Findings (4)

T03 · Remote Payload Retrieval and Execution

Error
Location
README.md:51
Finding

Unverified Remote Installer Is Executed Directly by Bash

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
install.sh:4
Finding

Installation Uses Mutable Repository State and Unpinned Dependencies

Content
View full analysis
=25.0.0 ``` ### Technical Analysis The installer clones the repository's default branch or updates an existing checkout with `git pull --ff-only`. It does not check out an immutable reviewed commit, verify a signed tag, or validate repository content against a known digest. The dependency declaration accepts any `keyring` release at or above version 25.0.0. No upper bound, exact version, lockfile, or package hash is provided. Pip may consequently install future versions and transitive dependencies that were not covered by this audit. Python packages can execute code during installation or when imported by the Skill. The reviewed dependency name does not exhibit obvious typosquatting or dependency-confusion indicators. The vulnerability is the lack of reproducibility and integrity controls, not evidence that the current `keyring` package is malicious. ### Attack Path 1. An attacker compromises the upstream repository, dependency publication account, or a permitted transitive package. 2. The attacker publishes altered repository content or a package version satisfying `keyring>=25.0.0`. 3. A user runs the installer. 4. Git retrieves mutable repository state, or pip resolves the attacker-controlled package version. 5. Malicious code executes during package installation, import, or later Skill invocation. ### Impact Assessment A compromised repository or dependency can execute arbitr ...[truncated 334 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/totp_add.py:13
Finding

TOTP Seeds Are Exposed Through Process Arguments and Shell History

Content
View full analysis
int: parser = argparse.ArgumentParser(description="Store a TOTP seed in macOS Keychain.") parser.add_argument("--alias", required=True, help="Short local alias for the account.") parser.add_argument("--seed", required=True, help="Base32 TOTP seed.") parser.add_argument("--issuer", default="", help="Optional issuer label.") parser.add_argument("--account", default="", help="Optional account label.") args = parser.parse_args() try: seed = normalize_seed(args.seed) backend = store_seed(args.alias, seed, issuer=args.issuer, account=args.account) ``` The macOS fallback also places the secret in the `security` process argument vector: ```python def _store_with_macos_security(alias: str, seed: str, issuer: str = "", account: str = "") -> None: label = f"{issuer} {account}".strip() or alias subprocess.run( [ "security", "add-generic-password", "-U", "-a", alias, "-s", KEYCHAIN_SERVICE, "-l", label, "-w", seed, ], check=True, capture_output=True, text=True, ) ``` ### Technical Analysis The only supported interface for adding a seed requires `--seed` on the command line. Shells commonly retain commands in history, and proce ...[truncated 1514 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
install.sh:5
Finding

Installer Recursively Deletes a Caller-Controlled Destination

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • 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 (57)

Chaining Abuse

High
Category
Tool Misuse
Confidence
97% confidence
Finding

The | bash construct turns a remote content fetch into immediate shell execution, which is a high-risk chaining pattern because any compromise of the fetched content becomes instant arbitrary command execution. In the context of a local authenticator handling MFA seeds, successful exploitation could expose stored secrets or subvert authentication workflows, making the risk more severe than for a generic utility.

Content

Scanner excerpt · README.md (reported line 54)May include surrounding context.

One-line install:

bash
curl -fsSL https://raw.githubusercontent.com/LucasZH7/auto-authenticator-local/main/install.sh | bash

This installer clones the repository into ~/.openclaw/skills/auto-authenticator-local by default and installs Python dependencies locally for the tool.

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

python
import platform
import subprocess

from totp_common import KEYCHAIN_SERVICE

try:
    import keyring

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

python
import platform
import subprocess

from totp_common import KEYCHAIN_SERVICE

try:
    import keyring

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

python
import platform
import subprocess

from totp_common import KEYCHAIN_SERVICE

try:
    import keyring

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

python
import platform
import subprocess

from totp_common import KEYCHAIN_SERVICE

try:
    import keyring

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

python
import platform
import subprocess

from totp_common import KEYCHAIN_SERVICE

try:
    import keyring

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

python
import platform
import subprocess

from totp_common import KEYCHAIN_SERVICE

try:
    import keyring

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

python
import platform
import subprocess

from totp_common import KEYCHAIN_SERVICE

try:
    import keyring

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

python
import platform
import subprocess

from totp_common import KEYCHAIN_SERVICE

try:
    import keyring

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None

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

python
from totp_common import KEYCHAIN_SERVICE

try:
    import keyring
    from keyring.errors import KeyringError
except Exception:  # pragma: no cover - exercised through backend selection
    keyring = None