T09 · Insecure Skill Coding Practices
- Location
src/converter.js:219- Finding
Unrestricted Blog URL Fetching Enables Server-Side Request Forgery
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill matches its content-repurposing purpose, but it needs review because arbitrary URL fetching and batch output writes are not safely bounded.
Review before installing in environments that can reach private networks or sensitive internal sites. Do not feed confidential, regulated, or proprietary content unless you are comfortable sending it to OpenAI, avoid processing untrusted URLs, and treat batch config files as trusted input until URL validation, privacy disclosure, dependency updates, and output-path containment are fixed.
src/converter.js:219Unrestricted Blog URL Fetching Enables Server-Side Request Forgery
bin/cli.js:276Batch Job Name Path Traversal Allows Writes Outside the Output Directory
The lockfile pins axios to 1.13.6, which the static analysis reports as having multiple published advisories including SSRF-related proxy bypass and prototype-pollution-assisted request/response compromise issues. In a skill that repurposes content and likely fetches remote URLs, a vulnerable HTTP client materially increases risk because attacker-controlled URLs, redirects, proxy settings, or crafted objects may influence outbound requests and expose internal services, credentials, or response integrity.
form-data 4.0.5 is reported vulnerable to CRLF injection via unescaped multipart field names and filenames. If any part of this skill constructs multipart requests from untrusted input, an attacker may be able to smuggle or alter HTTP message structure, potentially affecting downstream services or enabling request manipulation.
undici 7.24.3 is flagged with multiple HTTP parsing, queue poisoning, and desynchronization-related advisories. Because cheerio depends on undici and this skill likely retrieves remote web content, these issues can affect the integrity and isolation of HTTP responses, potentially causing information disclosure, response mix-ups, or denial of service when interacting with malicious endpoints.
The skill declares axios with a broad range (^1.6.0), and the analysis indicates resolution to axios 1.13.6 with multiple published advisories, including SSRF-related and prototype-pollution-assisted attack paths. Because this skill is described as transforming external content and includes web-fetching libraries, a vulnerable HTTP client is more dangerous in context: attacker-controlled URLs, proxy behavior, redirects, or crafted responses could be leveraged to exfiltrate data, bypass network restrictions, or hijack request handling.
The quick start encourages URL-based blog conversion without warning that the tool may retrieve webpage content and, when AI features are enabled, potentially transmit that content to an external model provider. This can lead users to process private, internal, or copyrighted material without understanding the data exposure implications.
The README advertises commands that accept URLs and use AI features backed by an OpenAI API key, but it does not warn users that fetched content and user-supplied text may be transmitted to external services. This creates a real privacy and data-handling risk because users may unknowingly submit proprietary, personal, or sensitive content to third-party infrastructure over the network.
The skill explicitly requires an OpenAI API key and describes AI-powered transformations, but it does not clearly warn users that their provided transcripts, blog contents, URLs, or files may be transmitted to an external AI service for processing. This can lead users to unknowingly send sensitive, proprietary, or personal content off-platform, creating privacy, compliance, and confidentiality risks.
The CLI accepts a user-supplied URL and fetches its contents without any explicit warning that the provided URL and resulting network request may disclose information to external services. In a local CLI context this is not code execution, but it can still create privacy and data-handling risks because users may unintentionally send internal, sensitive, or authenticated URLs across the network.
This command also fetches content from a user-provided URL without prominently informing the user that remote network access will occur. That omission can lead to accidental privacy exposure or retrieval of sensitive internal resources if a user supplies a URL they did not realize would be fetched by the tool.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
constructor(options = {}) {
this.apiKey = options.apiKey || process.env.OPENAI_API_KEY;
this.model = options.model || 'gpt-4';
this.baseUrl = 'https://api.openai.com/v1';
}
/**
The module documentation describes a 'Core Converter' that transforms provided content into other formats, but this method adds a separate capability to fetch and scrape arbitrary blog URLs over the network. With no manifest available to justify broader acquisition capabilities, remote content retrieval is not clearly necessary for a converter whose other methods operate on caller-supplied text.
Content fetched from arbitrary blog URLs is later embedded into prompts and sent to the external OpenAI API without any explicit user consent, warning, or data-classification check at the transmission point. This creates a privacy and data-handling risk because scraped content may contain copyrighted, private, or sensitive material that users do not realize will be forwarded to a third party.
follow-redirects 1.15.11 is flagged for leaking custom authentication headers across cross-domain redirects. If this skill sends authenticated requests while scraping or fetching content, an attacker-controlled redirect could cause bearer tokens or other sensitive headers to be forwarded to an unintended host.
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"author": "OpenClaw",
"license": "MIT",
"dependencies": {
"commander": "^11.0.0",
"axios": "^1.6.0",
"cheerio": "^1.0.0-rc.12"
},
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"license": "MIT",
"dependencies": {
"commander": "^11.0.0",
"axios": "^1.6.0",
"cheerio": "^1.0.0-rc.12"
},
"engines": {