Back to skill

Security audit

Skill Dropshipping Product Launcher

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its stated dropshipping-to-WooCommerce purpose, but it needs review because it handles store credentials and live store changes with weak destination and download scoping.

Install only after reviewing and hardening it for your environment. Use dry-run first, use narrow WooCommerce and CJ credentials, require HTTPS and exact trusted hosts, avoid untrusted product/image sources, upgrade or pin reviewed dependencies, and rotate credentials if this code has been run with an untrusted config URL.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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 (4)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/launch.js:37
Finding

Server-Side Request Forgery Through Unrestricted Product Image Downloads

Content
View full analysis
{ const proto = url.startsWith('https') ? https : http; const file = fs.createWriteStream(dest); proto.get(url, res => { if (res.statusCode === 301 || res.statusCode === 302) { file.close(); fs.unlink(dest, () => {}); return downloadImage(res.headers.location, dest).then(resolve).catch(reject); } if (res.statusCode !== 200) { file.close(); fs.unlink(dest, () => {}); return reject(new Error(`HTTP ${res.statusCode} for ${url}`)); } res.pipe(file); file.on('finish', () => file.close(resolve)); file.on('error', reject); }).on('error', reject); }); } async function downloadImages(imageUrls, productId) { fs.mkdirSync(IMAGE_DIR, { recursive: true }); const dir = path.join(IMAGE_DIR, productId.replace(/[^a-z0-9]/gi, '_')); fs.mkdirSync(dir, { recursive: true }); const localPaths = []; for (let i = 0; i < imageUrls.length; i++) { const url = imageUrls[i]; const ext = (url.split('?')[0].match(/\.(jpg|jpeg|png|webp|gif)$/i) || ['', '.jpg'])[1]; const dest = path.join(dir, `image_${i + 1}${ext}`); try { console.log(` ⬇ Downloading image ${i + 1}/${imageUrls.length}...`); await downloadImage(url, dest); localPaths.push(dest); } catch (e) { console.warn(` ⚠ Failed to download image ${i + 1}: ${e.message}`); } } return localPaths; } ``` ### Technical Analysis Product image URLs come from the CJ API response and are passed directly to Node.js HTTP clients. The code does not validate the URL scheme, destination hostname, resolved IP address, port, or response content type. Both HTTP and HTTPS requests ar ...[truncated 1835 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/cj-fetch.js:43
Finding

CJ Access Token Can Be Sent to an Unvalidated Configurable Endpoint

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/woo-create.js:15
Finding

WooCommerce Credentials Can Be Transmitted to an Unvalidated Store URL

Content
View full analysis
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Note
Location
scripts/launch.js:100
Finding

Dry-Run Mode Unnecessarily Reads WooCommerce Credentials

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

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/launch.js --product CJA123456789 --price 149.99

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/launch.js --product CJA123456789 --price 149.99

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/launch.js --product CJA123456789 --price 149.99

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 lockfile pins axios 1.13.6, and the provided advisory set includes high-risk issues such as NO_PROXY bypass leading to SSRF and prototype-pollution-related MITM/credential theft scenarios. In an automation skill, HTTP client libraries are often used to contact third-party services, so dependency-level request routing and redirect/proxy handling flaws can directly affect outbound network security.

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

The lockfile includes form-data 4.0.5, which is reported as vulnerable to CRLF injection through unescaped multipart field names and filenames. If the skill builds multipart requests from external or semi-trusted input, an attacker may be able to smuggle additional headers or corrupt request structure, potentially leading to request manipulation against upstream services.

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

The analysis indicates resolution to axios 1.13.6 with multiple advisories, including SSRF-related and response/credential-manipulation issues. In a dropshipping launcher that likely fetches remote product data and talks to WooCommerce or other APIs, vulnerable HTTP client behavior can expose credentials, enable server-side request forgery, or tamper with trusted responses.

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

The resolved form-data 4.0.5 package is flagged for CRLF injection in multipart field handling. Because this skill appears designed to upload or submit product data over HTTP, malformed or attacker-controlled field names/filenames could lead to header/body injection against downstream services.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill’s headline and opening description emphasize convenience but do not prominently warn that the main command performs real external side effects: downloading third-party content, uploading media to a WordPress site, and creating WooCommerce draft products. This can mislead a user into running the command without realizing it will modify a live store, causing unintended content publication workflow changes, storage consumption, and unauthorized or accidental administrative actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The file exposes the names and filesystem locations of credential material for CJ API and WooCommerce, along with the active store endpoint. Even though the secret values are not present, this materially lowers the effort for an attacker or malicious downstream skill to locate and target sensitive tokens, especially because the document is framed as internal operational context.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This is a code file, so missing-warning checks apply to network transmission of sensitive data. The code sends config.apiKey to the CJ authentication API, but there is no confirmation prompt, user-facing log, or explanatory comment/docstring warning the user that credentials will be read from disk and sent over the network.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

File writes are safety-relevant for code files when they occur without any visible disclosure. Although there is an internal comment noting the config update, there is no user-facing prompt, log message, or documented warning that running the script will modify the file at CJ_CONFIG_PATH by persisting a new token.

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

The lockfile includes follow-redirects 1.15.11, which is flagged for leaking custom authentication headers across cross-domain redirects. While lower severity than direct code execution, this can expose API keys or bearer tokens if the skill follows attacker-controlled or compromised redirects during integrations with external services.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
89% confidence
Finding

The dependency is specified with a caret range (^1.6.0), which allows newer minor and patch versions to be installed without review. In a supply-chain context this increases the risk of silently pulling in vulnerable or malicious releases, especially for a skill that performs networked automation against third-party services.

Content

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

json
"fetch": "node scripts/cj-fetch.js"
  },
  "dependencies": {
    "axios": "^1.6.0",
    "form-data": "^4.0.0"
  }
}

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
88% confidence
Finding

The form-data dependency is also unpinned (^4.0.0), permitting automatic installation of later releases that may introduce vulnerabilities or behavior changes. For automation code that likely constructs outbound HTTP multipart requests, uncontrolled dependency drift is a meaningful supply-chain weakness.

Content

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

json
},
  "dependencies": {
    "axios": "^1.6.0",
    "form-data": "^4.0.0"
  }
}

Static analysis

Detected: suspicious.env_credential_access, suspicious.exposed_secret_literal

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/cj-fetch.js:10

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/launch.js:20

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/woo-create.js:11

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
scripts/woo-create.js:20