T09 · Insecure Skill Coding Practices
- Location
index.js:6- Finding
Hard-Coded Merchant Credential Exposed in Source Code
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a paid title generator, but it embeds a payment credential and attempts automatic SkillPay billing before generation, so users should review it carefully before installing.
Install only if you are comfortable with a third-party paid workflow that can attempt SkillPay billing automatically and pass your topic text to a local OpenClaw agent. The embedded merchant key should be removed or rotated, payment should require clear confirmation through a safer backend flow, and the dependency/install paths should be pinned and moved to trusted HTTPS sources before routine use. The inspected index.js also fails Node syntax checking, so this package may not run as published, but the exposed credential and intended payment flow remain review-worthy.
index.js:6Hard-Coded Merchant Credential Exposed in Source Code
index.js:13Untrusted User Input Is Interpolated into Privileged Agent Instructions
README.md:13Installation Instructions Execute a Mutable Latest Package Release
package-lock.json:18Dependency Lockfile Uses an Unofficial Plaintext HTTP Registry Mirror
The stated purpose is simple blog title generation, but the skill also introduces payment processing, merchant credential usage, and local gateway token handling that are not clearly reflected in the primary description or permission model. Hidden or under-disclosed billing behavior is dangerous because it can lead to unauthorized charges, deceptive execution, or secret transmission under the guise of a benign writing utility.
A hard-coded merchant key is embedded in source code, which can be extracted by anyone with code access and abused to perform unauthorized billing operations or impersonate the merchant. Because this is a live payment credential in a low-risk-appearing utility, the context makes it especially dangerous: a blog-title skill has no strong justification for exposing a charge-capable secret client-side.
The skill performs an external billing charge as part of a blog-title generator, which is outside the minimally necessary behavior implied by the skill description and creates financial risk. In this context, charging a payment API from a CLI utility can lead to unauthorized or unexpected transactions, especially because the capability is embedded directly in the tool rather than isolated behind explicit user consent and trusted payment flows.
The skill makes outbound payment-processing requests unrelated to generating titles, introducing unnecessary network and financial capability into a content tool. This mismatch between declared purpose and actual behavior makes the skill materially more dangerous because users may not expect a title optimizer to initiate billing operations.
The project pins axios 1.13.6, which the scanner reports as affected by multiple advisories including SSRF/proxy-bypass and prototype-pollution-related MITM/credential theft issues. Because this skill is an AI-powered title optimizer and likely performs outbound HTTP requests to third-party APIs, a vulnerable HTTP client meaningfully increases risk of request manipulation, credential leakage, or unexpected access to internal resources depending on how the code uses axios.
form-data 4.0.5 is flagged for CRLF injection via unescaped multipart field names and filenames. If the skill ever constructs multipart requests from user-controlled content, this can lead to malformed requests, header injection, request smuggling effects against downstream services, or bypass of server-side validation.
The package is reported as resolving to axios 1.13.6, which has multiple known advisories including SSRF-related and prototype-pollution-assisted attack paths. Because this skill is an AI-powered agent component and axios is commonly used for outbound HTTP requests, a vulnerable version can materially increase risk of request forgery, credential leakage, or response manipulation if the runtime or surrounding code exposes attacker-controlled inputs.
The README instructs users to run npx clawhub@latest install blog-title-optimizer, which pulls and executes the latest published version of the package at install time rather than a pinned, reviewed version. If the upstream package is compromised, typo-squatted, or updated with malicious code, users may execute attacker-controlled code simply by following the installation instructions.
The skill documents use of environment-based capabilities and sensitive tokens but does not declare any tool scope, permissions, or allowed-tools boundaries. This creates a transparency and containment problem: a user or host may believe the skill is purely text-generation while it can access local environment data, increasing the risk of unintended secret access or misuse.
The documented environment variables include a merchant key and gateway auth token, both of which are sensitive credentials, but the file provides no warning about secure storage, exposure risks, or whether they may be transmitted to external or local services. In a skill that appears to involve billing and gateway fallback, this omission increases the chance of credential mishandling and accidental leakage.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
const { spawn } = require('child_process');
const CONFIG = {
skillpay_api: 'https://api.skillpay.me/v1',
merchant_key: process.env.SKILLPAY_MERCHANT_KEY || 'sk_91fff75ae2a7a71f8eceadcbcd816e24d57e58d9d04ccca45f0b3856af130aea',
price_per_use: 0.001,
currency: 'USDT'
The skill delegates its core function to an external subprocess ('openclaw agent'), which expands the trust boundary and may execute opaque logic outside this file's control. While subprocess execution is not inherently malicious, for a simple title generator it increases attack surface and can expose user content to another tool without transparency.
User-supplied topic and keyword data are sent to an external agent subprocess without any explicit privacy notice or consent mechanism. Even if the data seems low sensitivity, users may enter proprietary campaign plans or unreleased content ideas, so undisclosed transmission outside the local process is a real privacy and trust issue.
The lockfile hard-codes all package tarball URLs to a specific third-party regional mirror over plain HTTP rather than the default trusted registry or a configurable source. This increases supply-chain risk because installs depend on an external mirror without transport security, making tampering, mirror compromise, or unauthorized package substitution more plausible.
follow-redirects 1.15.11 is reported as leaking custom authentication headers across cross-domain redirects. If this skill sends API keys or bearer tokens in outbound requests, an attacker controlling or influencing a redirect target could capture those credentials and abuse connected services.
The dependency uses a caret range (^1.6.0), which permits automatic installation of newer minor and patch releases instead of a single audited version. In a published skill, this weakens supply-chain control and can unexpectedly introduce breaking or vulnerable versions over time, especially because the dependency is network-capable and likely central to the skill's functionality.
"author": "Matt",
"license": "MIT",
"dependencies": {
"axios": "^1.6.0"
},
"openclaw": {
"skill": true,
Detected: suspicious.dangerous_exec, suspicious.env_credential_access