T03 · Remote Payload Retrieval and Execution
- Location
README.md:57- Finding
Unverified Remote Installer Is Piped Directly into a Shell
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill appears purpose-built for Garmin health syncing, but it asks users to weaken account security and relies on broad sensitive-data access with under-scoped safeguards.
Review carefully before installing. This skill will access your Garmin account, cache long-lived tokens locally, store sensitive health data as readable Markdown, and may run automatically on a schedule. Do not disable Garmin 2FA unless you accept the account-takeover risk, and prefer installing uv through a trusted package manager with reviewed, pinned dependencies.
README.md:57Unverified Remote Installer Is Piped Directly into a Shell
scripts/sync_garmin.py:1Sensitive Runtime Dependencies Are Not Pinned to Reviewed Versions
scripts/sync_garmin.py:470Untrusted Garmin Activity Names Are Written into Agent-Readable Markdown Without Sanitization
The README explicitly instructs users to disable two-factor authentication on their Garmin account in order to use the skill. This weakens account security for the entire Garmin account, not just this integration, and materially increases the risk of account takeover if credentials are stolen or reused.
The README tells users to disable 2FA without an explicit security warning about the consequences. Omitting that warning makes the guidance more dangerous because users may treat it as routine setup instead of understanding they are reducing a key account-protection control.
The skill syncs highly sensitive health data into local markdown files and makes that data available to OpenClaw, but the README does not clearly warn users about local exposure, retention, or who/what can read those files. Health metrics such as sleep, heart rate, stress, SpO2, HRV, weight, and activity history are sensitive personal data that could be exposed through filesystem access, backups, indexing, or downstream agent use.
The documentation states that the skill uses cloudscraper to bypass Cloudflare protection on Garmin's SSO. Tooling designed to evade anti-bot protections increases legal, operational, and security risk, and may break unpredictably or encourage users to normalize bypassing platform defenses.
The documentation describes working around Garmin and Cloudflare anti-bot measures and frames failures as something to retry or update around. This normalizes service-defense evasion and can expose users to account lockouts, ToS violations, and brittle authentication behavior that may fail in unsafe or unexpected ways.
The skill clearly instructs the agent to run a Python sync script that performs network access to Garmin Connect and writes markdown files to disk, yet it declares no explicit tool scope such as allowed-tools or permissions. This creates an authorization gap: an agent/runtime may permit broader-than-intended file and network actions, making the skill harder to safely sandbox and review.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
The password is prompted interactively via `getpass` — it is never echoed to screen, stored in shell history, or passed as a command argument. On success the user will see `Success! Tokens cached in ~/.garminconnect`. After that, all syncs use cached tokens only — no credentials are needed.
Do not ask the user for their password in chat and do not pass passwords as command-line arguments or via stdin piping, as these methods can expose credentials in process listings or conversation history.
## Syncing Data
The script writes highly sensitive health data such as sleep, heart rate, stress, HRV, SpO2, weight, and activities into local markdown files without an explicit warning, consent step, or guidance on securing the output. On multi-user systems, synced folders, backups, or repos, this can unintentionally expose private medical and lifestyle information to other people or services.
The README includes a shell pipeline that downloads and immediately executes a remote install script. While common in developer tooling, this pattern creates supply-chain risk because a compromised server, DNS path, or script update could execute arbitrary code on the user's system.
- Python 3.10+
- [uv](https://docs.astral.sh/uv/) (no pip install needed — dependencies are inline)
- macOS: `brew install uv`
- Linux/WSL: `curl -LsSf https://astral.sh/uv/install.sh | sh`
- Windows: `powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"`
- A Garmin Connect account (two-factor authentication must be disabled — see [Troubleshooting](#troubleshooting))
The manifest says the skill provides sleep, activity, heart rate, stress, body battery, HRV, SpO2, and weight data. However, the code also fetches and exports training readiness, respiration, fitness age, and intensity minutes, which expands the skill's functional scope beyond the stated description.
No suspicious patterns detected.