T08 · Insecure Dependencies
- Location
bootstrap_deps.py:14- Finding
Unpinned Third-Party Package Allows Reviewed Behavior to Change
- Content
View full analysis
=0.1.1", ] ``` ```python print("[clawhealth-garmin] Installing/upgrading dependencies:", ", ".join(REQS)) _run([str(vpy), "-m", "pip", "install", "--upgrade", *REQS]) ``` ### Technical Analysis The Skill delegates its core Garmin authentication and health-data processing to the external `clawhealth` package. The requirement uses a lower-bound version constraint rather than an exact, audited version, and `--upgrade` explicitly permits pip to install newer releases. No lock file, package hashes, or transitive dependency constraints are present. Consequently, the code executed after installation can differ from the code evaluated when this Skill was reviewed. A compromised package release, compromised maintainer account, malicious transitive dependency, or future release with insecure behavior could therefore enter the environment without a corresponding Skill update. This risk is particularly relevant because the dependency is expected to process: - Garmin usernames and passwords - MFA and authenticated session data - Detailed health and activity records - Local SQLite databases and configuration files - Environment variables inherited from the OpenClaw process ### Attack Path 1. An attacker compromises the `clawhealth` package publishing account, release pipeline, or one of its unconstrained transitive dependencies. 2. The attacker publishes a version satisfying `clawhealth>=0.1.1`. 3. A user runs `bootstrap_deps.py`, directly or through the installation command in `SKILL.md`. 4. `pip install --upgrade` selects and installs the attacker-controlled release. 5. Package installation hooks may execute during installation, and the installed package subsequently executes when the Skill invokes the CLI. 6. During normal Garmin operations, the mal ...[truncated 761 chars]- Remediation
View remediation
