Back to skill

Security audit

Docker Xunler Downloader

Security checks for vulnerabilities and agentic risk

Overview

The skill appears purpose-built for Xunlei downloads, but needs review because it can create remote download tasks, defaults to plaintext HTTP, ships an environment-specific config, and depends on flagged request libraries.

Review before installing. Use only with a Xunlei service you control, replace the bundled config.json with your own settings, prefer HTTPS or an isolated trusted network, update/pin dependencies from an approved registry, and treat every submit command as creating a real remote download with visible metadata and resource use.

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
xunlei_docker_client.js:22
Finding

Plaintext Communication with the Xunlei Service

Content
View full analysis

Vulnerability Details

File Location: xunlei_docker_client.js:22-27; insecure default configuration in config.json:1-5
Vulnerability Type: Cleartext transmission of sensitive API data
Risk Level: Medium

Vulnerable Code

js
configure(host, port, ssl = false) {
  this.host = host;
  this.port = port;
  this.ssl = ssl;
  this.baseUrl = `${this.ssl ? 'https' : 'http'}://${host}:${port}`;
}

The bundled configuration explicitly disables TLS:

json
{
  "host": "192.168.1.40",
  "port": 2345,
  "ssl": false
}

Technical Analysis

The connection configuration defaults ssl to false, causing API requests to use HTTP unless TLS is explicitly enabled. The bundled config.json also selects this insecure mode.

Subsequent requests transmit Xunlei authentication headers, device identifiers, task metadata, filenames, and magnet links over that connection. Plain HTTP provides neither confidentiality nor transport integrity. An attacker with a network position between the Skill host and the Xunlei service can inspect or alter this traffic.

Although the service appears intended for a local network, a LAN should not be treated as a trusted security boundary. Compromised endpoints, malicious wireless clients, ARP spoofing, or misconfigured network routing could provide the required interception position.

Attack Path

  1. The Skill loads config.json and configures the service with ssl: false.
  2. configure() constructs an http://192.168.1.40:2345 base URL.
  3. A user requests task status, submits a magnet link, or invokes another Xunlei operation.
  4. The Skill sends API requests, including the pan-auth header and download data, over plaintext HTTP.
  5. An attacker on the same network performs traffic capture, ARP spoofing, malicious gateway interception, or another man-in-the-middle technique.
  6. The attacker reads sensitive download information or modifies requests ...[truncated 710 chars]
Remediation
View remediation

Remediation Suggestions

  1. Change the default to require TLS:

    js
    configure(host, port, ssl = true) {
      if (!ssl) {
        throw new Error('Plaintext HTTP connections are disabled');
      }
    
      this.host = host;
      this.port = port;
      this.ssl = true;
      this.baseUrl = `https://${host}:${port}`;
    }
    
  2. Remove the environment-specific config.json from the distributed package and provide only a sanitized example such as config.example.json.

  3. Require explicit administrative approval if legacy HTTP support is unavoidable.

  4. Ensure Axios performs normal certificate validation; do not introduce an HTTPS agent that disables certificate verification.

  5. Use a certificate whose subject matches the configured hostname. For private deployments, use an internal certificate authority and install only the required CA certificate.

  6. Restrict network access to the Xunlei service with firewall rules and network segmentation.

  7. Document that HTTP mode exposes authentication and download metadata and should only be used for isolated development environments.

T08 · Insecure Dependencies

Note
Location
package-lock.json:14
Finding

Dependencies Locked to a Third-Party Registry Mirror

Content
View full analysis

Vulnerability Details

File Location: package-lock.json:14-29 and equivalent resolved entries throughout package-lock.json
Vulnerability Type: Third-party dependency supply-chain exposure
Risk Level: Low

Vulnerable Code

json
"node_modules/asynckit": {
  "version": "0.4.0",
  "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
  "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
  "license": "MIT"
},
"node_modules/axios": {
  "version": "1.13.4",
  "resolved": "https://registry.npmmirror.com/axios/-/axios-1.13.4.tgz",
  "integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==",
  "license": "MIT",
  "dependencies": {
    "follow-redirects": "^1.15.6",
    "form-data": "^4.0.4",
    "proxy-from-env": "^1.1.0"
  }
}

All reviewed dependency artifacts are resolved through registry.npmmirror.com rather than the canonical npm registry.

Technical Analysis

The lockfile pins package downloads to a third-party registry mirror. Integrity hashes provide meaningful protection against an artifact being silently changed while the lockfile remains trusted, but installations still depend on the mirror's security, provenance, and availability.

The principal risk arises if the mirror, package publication process, or lockfile-generation environment is compromised. An attacker who can replace both dependency metadata and expected integrity values could cause a modified package to be accepted during installation. This issue is a supply-chain hardening weakness; the audit did not find evidence that the currently locked package contents are malicious.

Attack Path

  1. A developer or deployment system runs npm install or npm ci.
  2. npm reads package-lock.json and requests package archives from registry.npmmirror.com.
  3. An attacker compr ...[truncated 1360 chars]
Remediation
View remediation

Remediation Suggestions

  1. Regenerate the lockfile using the canonical npm registry:

    bash
    npm config set registry https://registry.npmjs.org/
    rm -rf node_modules package-lock.json
    npm install
    
  2. Review the regenerated lockfile and verify that every resolved package URL uses an approved registry.

  3. Continue retaining SHA-512 integrity hashes and commit the reviewed lockfile.

  4. Use npm ci in automated builds so installations strictly follow the committed lockfile.

  5. Run npm audit and software-composition analysis in continuous integration.

  6. Protect lockfile changes with mandatory code review and dependency-diff inspection.

  7. If an internal registry mirror is operationally required, ensure it is authenticated, access-controlled, monitored, synchronized from approved upstream sources, and backed by package-signing or provenance verification.

Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (13)

Known Vulnerable Dependency: axios==1.13.4 — 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
94% confidence
Finding

The lockfile pins axios 1.13.4, and the supplied advisory set includes multiple high-severity issues affecting request handling, proxy bypass behavior, and prototype-pollution-related attack paths. In a downloader skill that likely makes outbound network requests, a vulnerable HTTP client materially increases risk of SSRF, credential leakage, response tampering, or other request-security failures depending on how the package is used.

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
88% confidence
Finding

The lockfile contains form-data 4.0.5, and the cited CRLF-injection issue can allow crafted multipart field names or filenames to alter generated HTTP payload structure. If any user-controlled values are inserted into multipart requests, this can lead to request smuggling-like effects, header/body injection, or malformed upstream requests.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: axios==1.13.4 — 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 depends on axios 1.13.4, which is flagged as having multiple known advisories, including SSRF-related and prototype-pollution-assisted attack paths. In a skill intended to interact with Docker-deployed services and likely make network requests, a vulnerable HTTP client can materially increase the risk of request manipulation, credential leakage, or access to internal services.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding

Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The README explicitly instructs users to submit magnet links, which causes the skill to create remote download tasks on a Xunlei service, but it does not clearly warn that this triggers network-side actions and persistent task creation on another system. In an agent/automation context, that omission can lead to unintended downloads, bandwidth consumption, storage usage, or use of the skill for unauthorized content retrieval without the user fully understanding the side effects.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill explicitly sends user-supplied magnet links to a remote Xunlei Docker service, but the description provides no warning that submitted links and related metadata leave the local environment. This can mislead users about privacy, trust boundaries, and legal or policy implications, especially if the service is hosted on another machine or exposed over a network.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill initiates download-related network activity immediately after a user issues a submit command, and it also auto-selects files based on heuristic classification without an explicit confirmation step. In this context, the behavior can cause unintended downloads, bandwidth usage, storage consumption, and surprising content selection side effects, especially because the classification logic may misidentify files.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The manual configuration instructions tell users to create a local config.json containing host, port, and SSL settings, but do not warn that these connection details will be stored on disk. While the data is not highly sensitive by itself, local storage of internal service endpoints can expose network topology or aid later targeting if the file is shared, committed, or read by other local users.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The skill persists host, port, and SSL settings to a local config.json file without notifying the user that connection details are being stored. While these fields are not necessarily secrets, silent persistence can expose internal service topology or create privacy and operational concerns on shared systems.

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
85% confidence
Finding

The lockfile includes follow-redirects 1.15.11, which is reported as leaking custom authentication headers across cross-domain redirects. For a downloader or network automation skill, following attacker-controlled redirects could expose bearer tokens, API keys, or other sensitive headers to unintended hosts.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency is specified with a caret range (^1.13.4), which allows automatic installation of newer minor/patch releases instead of a fully pinned version. In a security-sensitive skill, this weakens build reproducibility and can unexpectedly introduce vulnerable or malicious upstream changes through the supply chain.

Content

Scanner excerpt · package.json (reported line 21)May include surrounding context.

json
"author": "OpenClaw",
  "license": "MIT",
  "dependencies": {
    "axios": "^1.13.4"
  }
}

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code hard-codes Accept-Language: 'zh-CN,zh;q=0.9', which imposes a specific language/locale preference on requests. Under the policy, locale constraints should be user-selectable or clearly justified; neither is present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

This shared request path sets Accept-Language to zh-CN,zh;q=0.9 for all API calls, effectively forcing a locale across the skill. There is no evidence of user opt-in or a documented region-specific requirement in this file.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.