Back to skill

Security audit

Garmin Health Analysis (Maintained Fork)

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Garmin account helper for health, activity, calendar, and trip data; its sensitive access is expected for that purpose.

Install only if you are comfortable giving the skill Garmin account access and storing Garmin session tokens locally. Prefer OpenClaw-managed environment credentials over editing plaintext config.json, review trip-add/update/delete requests carefully, and use the preview output before confirming any trip replacement or deletion.

Vulnerability Patterns
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (42)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 77)May include surrounding context.

md
- Added `trip-list` / `trip-add` / `trip-update` / `trip-delete` subcommands to
  `garmin_calendar.py`.
- Endpoints: `GET|POST|PUT /jetlag-service/jetlag/trip`, `DELETE
  /jetlag-service/jetlag/trip/{id}`, `GET /jetlag-service/jetlag/status/daily/{date}`.
- **Live-tested end to end** on a real account: create → read-back → replace →
  delete, each verified against `trip-list` and cleaned up afterwards.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The description presents a comprehensive Garmin assistant with calendar management, Jet Lag Adviser features, multiple additional metric tables, natural-language querying of Garmin wellness data, and dashboard generation. The supplied code does only one narrow subset: download and analyze activity files. It authenticates to Garmin, downloads activity files in FIT/GPX/TCX, parses local FIT/GPX content, supports point lookup by distance/time, and computes simple summary stats. While FIT/GPX download is consistent with part of the description, the primary behavior of this chunk is much narrower than the declared purpose and omits several prominently claimed capabilities. Therefore the description does not accurately represent what this code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The code substantially overlaps with part of the description: it does fetch Garmin data for sleep, HRV, Body Battery, heart rate, stress, activities, and detailed activity metrics, and outputs structured JSON suitable for downstream natural-language querying. However, the declared purpose emphasizes a broader maintained fork with several major added capabilities that are absent from this code chunk: Garmin calendar, Jet Lag Adviser trip management, extra metric tables, FIT/GPX downloads, and interactive dashboards. Additionally, this code retrieves user profile information including email, which is not mentioned in the description. Because multiple prominent declared capabilities are not represented here, the description does not accurately represent what this supplied code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The supplied code is narrowly focused on reading extended Garmin wellness/time-series metrics from an authenticated client and printing JSON results. This partially aligns with the description's claim about talking to Garmin health data and some added metrics (for example fitness age, intensity minutes, hydration, hill score, weigh-ins, and intraday heart rate). However, the description emphasizes additional major capabilities—Garmin calendar access, Jet Lag Adviser trip management, FIT/GPX downloads, and interactive dashboard generation—that are not implemented in this code chunk. Because those are substantial declared features rather than minor supporting details, the description does not accurately represent what this specific code chunk actually does.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 225)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 230)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 233)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 236)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 239)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 240)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 254)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 257)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 270)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 271)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 281)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 284)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 287)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 288)May include surrounding context.

md
Use `scripts/garmin_calendar.py` for anything about travel, races or calendar entries.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/mcp_setup.md (reported line 28)May include surrounding context.

md
# Install and setup
npm install
pip3 install garminconnect fitparse gpxpy
cp .env.example .env
# Edit .env with your credentials

# Authenticate

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/mcp_setup.md (reported line 29)May include surrounding context.

md
npm install
pip3 install garminconnect fitparse gpxpy
cp .env.example .env
# Edit .env with your credentials

# Authenticate
npm run auth

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · scripts/garmin_calendar.py (reported line 26)May include surrounding context.

python
GET    /jetlag-service/jetlag/trip        list trips (with flights)
  POST   /jetlag-service/jetlag/trip        create
  PUT    /jetlag-service/jetlag/trip        replace
  DELETE /jetlag-service/jetlag/trip/{id}   delete
  GET    /jetlag-service/jetlag/status/daily/{date}  guidance
That path can CREATE and EDIT trips, so `trip-add` / `trip-update` /
`trip-delete` below write them. Requires garminconnect >= 0.3.18.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

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.

Content

Scanner excerpt · CHANGELOG.md (reported line 24)May include surrounding context.

md
### Security: confirmation gate on destructive trip operations

ClawHub's security audit flagged `trip-delete` (Medium): it checked only that
`--trip-id` was non-empty and then deleted, with no confirmation gate. Correct
finding, and it also under-reported: `trip-update` is a full **replace**, so an
incomplete flight list silently drops legs.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · CHANGELOG.md (reported line 79)May include surrounding context.

md
`garmin_calendar.py`.
- Endpoints: `GET|POST|PUT /jetlag-service/jetlag/trip`, `DELETE
  /jetlag-service/jetlag/trip/{id}`, `GET /jetlag-service/jetlag/status/daily/{date}`.
- **Live-tested end to end** on a real account: create → read-back → replace →
  delete, each verified against `trip-list` and cleaned up afterwards.
- Flight fields (all six required, one entry per leg, so a connection is two):
  `originLocation`, `originTimezone`, `originTimestamp`, `destinationLocation`,

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding

The skill advertises and documents use of environment variables, local file reads/writes, shell commands, and network access, but it does not declare any explicit tool scope such as permissions or allowed-tools. That creates an overbroad trust boundary where an agent may grant or infer powerful capabilities without a narrowly declared contract, increasing the chance of unintended command execution, credential handling, or data exfiltration.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill description is broad enough to trigger on ordinary health, sleep, heart-rate, and fitness conversations, which can cause the agent to invoke a high-privilege skill in contexts where the user did not intend Garmin account access. Because the skill can access sensitive health data and perform networked account operations, overbroad activation raises both privacy and unintended-action risk.

Content

No source excerpt is available for this finding.