T03 · Remote Payload Retrieval and Execution
- Location
README.md:51- Finding
Unverified Remote Installer Is Executed Directly by Bash
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
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.
README.md:51Unverified Remote Installer Is Executed Directly by Bash
install.sh:4Installation Uses Mutable Repository State and Unpinned Dependencies
scripts/totp_add.py:13TOTP Seeds Are Exposed Through Process Arguments and Shell History
install.sh:5Installer Recursively Deletes a Caller-Controlled Destination
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.
One-line install:
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.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
import platform
import subprocess
from totp_common import KEYCHAIN_SERVICE
try:
import keyring
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
import platform
import subprocess
from totp_common import KEYCHAIN_SERVICE
try:
import keyring
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
import platform
import subprocess
from totp_common import KEYCHAIN_SERVICE
try:
import keyring
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
import platform
import subprocess
from totp_common import KEYCHAIN_SERVICE
try:
import keyring
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
import platform
import subprocess
from totp_common import KEYCHAIN_SERVICE
try:
import keyring
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
import platform
import subprocess
from totp_common import KEYCHAIN_SERVICE
try:
import keyring
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
import platform
import subprocess
from totp_common import KEYCHAIN_SERVICE
try:
import keyring
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
import platform
import subprocess
from totp_common import KEYCHAIN_SERVICE
try:
import keyring
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
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