Back to skill

Security audit

查询高驰(COROS)运动手表的跑步运动数据

Security checks for vulnerabilities and agentic risk

Overview

This COROS fitness-data skill appears purpose-aligned, but it should be reviewed because it asks users to store and print a reusable password-derived secret while accessing private account activity data.

Install only if you are comfortable giving the skill access to your COROS account activity. Treat COROS_PASSWORD as a real password-equivalent secret, avoid printing it, do not commit scripts/.env, prefer a secret manager or protected environment variables, and rotate your COROS password if the hash is exposed. Review or update the npm dependencies and lockfile provenance before using it in a sensitive environment.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:52
Finding

Reusable COROS Credential Exposed Through Weak Storage and Logging Guidance

Content
View full analysis
{ const hashedPassword = createHash("md5").update(password).digest("hex"); return hashedPassword; }; ``` `SKILL.md:52-58`: ```js import { genHashedPassword } from "./util.js"; const hashedPassword = genHashedPassword("your_plain_password"); console.log(hashedPassword); // Output the MD5-hashed password for COROS_PASSWORD ``` `scripts/.env:1-3`: ```env # COROS account configuration COROS_ACCOUNT=xxx COROS_PASSWORD=xxx ``` `scripts/coros.js:42-49`: ```js const response = await axios.post( COROS_URLS.LOGIN_URL, { account: this.account, accountType: 2, pwd: this.password, }, { headers: DEFAULT_HEADERS, timeout: 60000 }, ); ``` ### Technical Analysis The generated MD5 value is transmitted directly as the `pwd` login parameter. It therefore functions as a reusable password-equivalent credential rather than merely as a non-reversible password-verification record. MD5 is a fast, unsalted hash and is unsuitable for protecting passwords. More importantly, because the COROS endpoint accepts the hash itself for authentication, an attacker may not need to recover the original plaintext password: possession of the hash may be sufficient for replay. The documentation recommends storing this credential in a project-local `.env` file and demonstrates printing it to standard output. This can expose the credential through: - Accidental source-control commits. - Terminal scrollback and shell-session capture. - CI/CD logs. - Process output collected by monitoring systems. - Backups or copies of the project directory. - Excessively permissive local file permissions. The checked-in `.env` contains ...[truncated 1454 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
scripts/package-lock.json:15
Finding

Dependency Lockfile Uses a Non-Canonical Third-Party Package Mirror

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (12)

Credential Access

High
Category
Privilege Escalation
Confidence
94% confidence
Finding

The skill explicitly handles a reusable password equivalent by generating an MD5 hash for storage in .env and then using it to authenticate to the COROS API. MD5 is not appropriate for password protection, and if this hash functions as a login secret, disclosure of the .env value can enable credential replay or offline cracking against the user's account.

Content

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

import { genHashedPassword } from "./util.js";

const hashedPassword = genHashedPassword("your_plain_password"); console.log(hashedPassword); // 输出 MD5 加密后的密码,填入 .env 的 COROS_PASSWORD

text

### 计算某时间段总跑量

Known Vulnerable Dependency: axios==1.13.6 — 16 advisory(ies): CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +13 more

High
Category
Supply Chain
Confidence
90% confidence
Finding

The lockfile pins axios 1.13.6, and the static finding reports multiple known advisories affecting that version, including SSRF- and prototype-pollution-related issues. In a skill that queries external COROS data over HTTP, a vulnerable HTTP client is directly relevant because it may process attacker-influenced URLs, redirects, headers, or proxy settings.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: form-data==4.0.5 — 1 advisory(ies): CVE-2026-12143 (form-data: CRLF injection in form-data via unescaped multipart field names and f)

High
Category
Supply Chain
Confidence
81% confidence
Finding

form-data 4.0.5 is flagged for CRLF injection via unescaped multipart field names and filenames. If any part of this skill uploads data or forwards user-controlled fields to external services, an attacker may be able to manipulate multipart boundaries or inject crafted headers, potentially altering downstream requests.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: axios==1.13.6 — 16 advisory(ies): CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +13 more

High
Category
Supply Chain
Confidence
98% confidence
Finding

The package explicitly depends on axios 1.13.6, which the finding reports as having multiple known advisories, including SSRF-related and prototype-pollution-assisted attack paths. In a skill that retrieves external COROS data, HTTP client behavior is security-sensitive, so a vulnerable axios version can materially increase risk of request manipulation, credential leakage, or abuse of outbound network access depending on how the library is used elsewhere in the skill.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
86% confidence
Finding

The skill documentation indicates use of environment-stored COROS credentials and account login, but it does not declare any explicit tool scope or permission boundary. This weakens reviewability and least-privilege guarantees, making it easier for a runtime or operator to expose secrets or enable broader capability use than users expect.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill instructs users to supply COROS account identifiers and a password-derived value, but provides no warning about the sensitivity of those credentials or the risks of storing them in local environment files. Users may incorrectly assume this is low risk and store long-lived account secrets insecurely or share them across systems.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This code posts COROS account credentials to a remote service during login, and later uses the authenticated client to retrieve activity data. While these network operations are central to the skill's purpose, the file provides no user-facing warning, confirmation, or explicit disclosure that credentials and personal activity data will be sent to external endpoints.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The accept-language header is fixed to zh-CN,zh;q=0.9, which imposes a specific language/locale setting. Under the policy, forcing a locale without user opt-in or documented justification is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: follow-redirects==1.15.11 — 1 advisory(ies): CVE-2026-40895 (follow-redirects leaks Custom Authentication Headers to Cross-Domain Redirect Ta)

Low
Category
Supply Chain
Confidence
84% confidence
Finding

follow-redirects 1.15.11 is reported as leaking custom authentication headers across cross-domain redirects. Because this skill likely calls third-party APIs and may carry bearer tokens or session headers to access user fitness data, a redirect-based header leak could expose credentials to an attacker-controlled domain.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
90% confidence
Finding

The dependency on axios uses a caret range (^1.13.6), which permits automatic installation of future patch and minor releases rather than a fully fixed version. This weakens supply-chain reproducibility and can unexpectedly introduce vulnerable or malicious code if an upstream release is compromised or regresses security.

Content

Scanner excerpt · scripts/package.json (reported line 13)May include surrounding context.

json
"license": "ISC",
  "description": "",
  "dependencies": {
    "axios": "^1.13.6",
    "dotenv": "^17.3.1"
  },
  "type": "module"

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
88% confidence
Finding

The dotenv dependency is also specified with a caret range (^17.3.1), so builds are not fully deterministic and may silently consume newer upstream releases. While this is not direct code execution by itself, it increases supply-chain risk and makes auditing and incident response harder.

Content

Scanner excerpt · scripts/package.json (reported line 14)May include surrounding context.

json
"description": "",
  "dependencies": {
    "axios": "^1.13.6",
    "dotenv": "^17.3.1"
  },
  "type": "module"
}

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

This file contains natural-language comments and console output exclusively in Chinese, which imposes a specific language/locale without any visible opt-in or alternative. Under the policy, hard-coded language constraints can be a natural-language policy violation when no user choice is offered.

Content

No source excerpt is available for this finding.