Back to skill

Security audit

Hitpaw Image Enhancer

Security checks for vulnerabilities and agentic risk

Overview

This skill mostly matches its stated HitPaw enhancement purpose, but it needs review because media handling is under-scoped, the video command is broken, and remote result downloads are not safely constrained.

Review before installing. Use only media you are comfortable sending through HitPaw or publicly reachable URLs, avoid confidential or regulated photos/videos, and wait for the publisher to fix the broken video CLI, clarify official provenance, add privacy disclosure, update vulnerable dependencies, and constrain remote result downloads.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
src/client.ts:92
Finding

Unvalidated Result URL Enables Client-Side SSRF and Unbounded Downloads

Content
View full analysis
{ const response = await axios.get(url, { responseType: 'stream' }); await fs.ensureDir(path.dirname(outputPath)); response.data.pipe(fs.createWriteStream(outputPath)); await new Promise((resolve, reject) => { response.data.on('end', resolve); response.data.on('error', reject); }); } ``` The URL passed to this method is obtained from the remote task-status response: ```ts if (!status.data.res_url) { throw new Error('No result URL in status response'); } console.log(`Downloading to ${outputPath}...`); await this.downloadResult(status.data.res_url, outputPath); ``` ### Technical Analysis The application treats the API-provided `res_url` as trusted and passes it directly to the global Axios client. It does not validate: - The URL scheme, such as requiring HTTPS. - The destination hostname against an allowlist of approved HitPaw CDN domains. - Whether the resolved address is loopback, link-local, private, or otherwise locally reachable. - Redirect destinations followed by Axios. - The response content type. - The response `Content-Length` or the number of bytes actually streamed. - A download-specific timeout. Consequently, a compromised or malicious status response can direct the client to make a GET request to an internal service, loopback interface, cloud metadata endpoint, or attacker-controlled redirect chain. This is a client-side SSRF condition. Although the implementation writes the response locally rather than explicitly returning it to the party controlling the URL, requests may still reach sensitive internal endpoints or trigger state-changing behavior on services that improperly accept GET requests. The absence of a maximum response ...[truncated 1916 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (19)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The documentation claims broader behavior than the implementation actually supports, including video enhancement and apparent local-file handling, while the code reportedly only supports public URLs and lacks real video support. This mismatch can cause users to expose private media by uploading it to public URLs or make security decisions based on false assumptions about what the skill does.

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

The lockfile pins axios 1.13.6, and the reported advisories include SSRF/proxy bypass and prototype-pollution-related request handling issues. In a skill that uploads local images/videos to a remote enhancement API, the HTTP client is directly security-relevant, so a vulnerable axios version can expose secrets, bypass proxy restrictions, or enable request/response tampering depending on how the rest of the code uses it.

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

form-data 4.0.5 is plausibly vulnerable to CRLF injection via unescaped multipart field names/filenames, which matters in a skill whose primary function is uploading image/video content. If any multipart metadata is derived from untrusted user-controlled filenames or fields, an attacker may be able to manipulate request bodies or headers sent to the upstream API, potentially leading to request smuggling-style effects or credential misuse.

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

The manifest permits installation of axios versions in the vulnerable 1.x range, and the static finding specifically identifies a known vulnerable resolved version with multiple advisories, including SSRF-related issues. In a skill that likely fetches or submits user-provided image/video URLs to an external API, HTTP client flaws can be more dangerous because they may enable request manipulation, proxy bypass, credential leakage, or SSRF depending on how axios is used in code.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README promotes an API-based image/video enhancement skill but does not clearly warn users that their media will be uploaded to a third-party service for remote processing. Because images and videos often contain sensitive personal, biometric, or proprietary data, the lack of an explicit privacy and network-transfer disclosure can mislead users into exposing data they did not intend to send off-device.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
86% confidence
Finding

The skill declares use of an environment variable (HITPAW_API_KEY) but does not declare an explicit tool scope such as permissions or allowed-tools. In practice this weakens least-privilege boundaries and can lead users or orchestrators to grant broader access than necessary, especially since the skill handles a secret used for third-party API access.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill sends user-supplied image/video URLs and associated media to HitPaw's third-party API, but the description does not clearly warn users about this data transfer. In a media-processing context this is significant because uploaded content may contain sensitive personal, biometric, location, or proprietary information, and users may unknowingly disclose it to an external service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
80% confidence
Finding

This code sends the user-supplied video URL to the HitPaw API and downloads the processed result to a local output path, which affects user data and performs a file write. While the command name and description imply enhancement, there is no explicit disclosure in code comments or user-facing messaging about transmitting video data to a third-party service or writing the output file.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The example 'Add color to B&W' suggests a colorization function, but the manifest and surrounding documentation describe enhancement, restoration, denoise, and upscaling only. This creates an intent/documentation inconsistency by implying a distinct capability that the rest of the skill does not claim or define.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The file consistently presents the package as 'HitPaw-Official' in the manifest metadata, but L594 states 'This skill is an unofficial integration with HitPaw API.' That is an active contradiction in the skill's own documentation about provenance and intent, even though it does not change runtime behavior.

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

follow-redirects 1.15.11 is a real supply-chain risk because it handles HTTP redirects underneath axios, and the advisory indicates possible leakage of custom authentication headers across domain redirects. For a skill that likely sends API credentials to a third-party enhancement service, cross-domain redirect header leakage could expose bearer tokens or API keys if a malicious or compromised endpoint issues redirects.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
"author": "Nova",
  "license": "MIT",
  "dependencies": {
    "axios": "^1.6.0",
    "chalk": "^5.3.0",
    "commander": "^11.1.0",
    "fs-extra": "^11.2.0",

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
"license": "MIT",
  "dependencies": {
    "axios": "^1.6.0",
    "chalk": "^5.3.0",
    "commander": "^11.1.0",
    "fs-extra": "^11.2.0",
    "ora": "^8.0.1"

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
"dependencies": {
    "axios": "^1.6.0",
    "chalk": "^5.3.0",
    "commander": "^11.1.0",
    "fs-extra": "^11.2.0",
    "ora": "^8.0.1"
  },

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
"axios": "^1.6.0",
    "chalk": "^5.3.0",
    "commander": "^11.1.0",
    "fs-extra": "^11.2.0",
    "ora": "^8.0.1"
  },
  "devDependencies": {

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
"chalk": "^5.3.0",
    "commander": "^11.1.0",
    "fs-extra": "^11.2.0",
    "ora": "^8.0.1"
  },
  "devDependencies": {
    "@types/node": "^20.0.0",

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
"ora": "^8.0.1"
  },
  "devDependencies": {
    "@types/node": "^20.0.0",
    "@types/fs-extra": "^11.0.4",
    "typescript": "^5.3.0"
  }

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
},
  "devDependencies": {
    "@types/node": "^20.0.0",
    "@types/fs-extra": "^11.0.4",
    "typescript": "^5.3.0"
  }
}

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
"devDependencies": {
    "@types/node": "^20.0.0",
    "@types/fs-extra": "^11.0.4",
    "typescript": "^5.3.0"
  }
}

Static analysis

No suspicious patterns detected.