T09 · Insecure Skill Coding Practices
- Location
scripts/global_coverage.js:4- Finding
Hard-Coded ScraperAPI Credential Transmitted over Plaintext HTTP
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a proxy-based web testing tool, but its published instructions overstate generic use while shipped scripts hardcode a ScraperAPI key and send analytics-triggering traffic to a fixed site.
Review carefully before installing or running. The scripts may send requests through ScraperAPI, trigger analytics/tracking systems, and currently target faceswap.cool rather than a URL you provide. Do not use it with sensitive or unauthorized sites, and the publisher should remove the embedded API key, switch to HTTPS, make the target URL truly user-controlled, and document analytics side effects clearly.
scripts/global_coverage.js:4Hard-Coded ScraperAPI Credential Transmitted over Plaintext HTTP
scripts/global_coverage.js:275CSV Formula Injection through Untrusted Report Fields
The declared description presents a network-capable global website access/testing skill with proxy support, rendering, simulation, monitoring, and resume features. However, this code chunk does not perform web access, proxy selection, rendering, automation, or monitoring collection. It strictly processes previously collected data from a local file and outputs summary reports in JSON and CSV formats. Performance reporting is present only as aggregation of existing data, which is a supporting/reporting function rather than the advertised primary capability. Therefore, the supplied code materially differs from the declared purpose.
The description presents a general-purpose global proxy/web access skill with extensive capabilities, but the supplied code is a narrow, single-purpose script. It targets one hardcoded website, visits only three paths across seven countries, and is primarily geared toward generating JS-rendered page visits that may show up in Google Analytics. While there is partial alignment on multi-country access and JS rendering, several prominent declared features are missing or overstated: there is no 25+ country implementation, no meaningful user behavior simulation beyond a random session number, no breakpoint-resume mechanism, and no real performance monitoring beyond basic response size/status logging. Therefore the declared description materially overstates and misrepresents the actual behavior.
A live ScraperAPI key is hardcoded directly in source and then used in outbound requests, making credential exposure likely through source disclosure, logs, reuse in other environments, or repository leaks. An attacker who obtains the key could abuse the third-party account for unauthorized scraping, incur charges, exhaust quotas, or tie malicious traffic back to the account owner.
Referenced artifact was not completely inspected
node scripts/global_coverage.js --url https://example.com
Referenced artifact was not completely inspected
node scripts/global_coverage.js --url https://example.com
Referenced artifact was not completely inspected
node scripts/global_coverage.js --url https://example.com
Referenced artifact was not completely inspected
node scripts/global_coverage.js --url https://example.com
Referenced artifact was not completely inspected
node scripts/global_coverage.js --url https://example.com
Referenced artifact was not completely inspected
node scripts/user_journey.js --url https://example.com --countries us,uk,jp
Referenced artifact was not completely inspected
node scripts/user_journey.js --url https://example.com --countries us,uk,jp
Referenced artifact was not completely inspected
node scripts/user_journey.js --url https://example.com --countries us,uk,jp
The manifest describes a general-purpose global access skill for visiting websites from 25+ countries with JS rendering and user-behavior simulation. In code, the target is fixed to a single domain, https://faceswap.cool, and all journeys and reporting are specialized around that site, which is a materially narrower behavior than the claimed reusable capability.
The file's user-facing logs and descriptive comments are written exclusively in Chinese, including status messages and report headings. This imposes a specific language/locale without any opt-in or documented justification, which matches the language-policy violation category.
The script sends user-derived browsing targets and metadata to api.scraperapi.com without any disclosure, consent flow, or clear indication that a third-party proxy/scraping service will receive the destination URL, country selection, and rendered content request. In a skill context, silent transmission to a third party increases privacy, compliance, and trust risks, especially because the skill simulates browsing behavior across many jurisdictions.
A live ScraperAPI credential is hardcoded directly in the script, exposing a secret that can be reused by anyone with access to the code. This can lead to unauthorized consumption, billing abuse, account compromise, and attribution of abusive traffic to the credential owner.
The script is narrowly designed to drive Google Analytics-visible traffic to a hardcoded third-party site (faceswap.cool) from multiple countries, rather than offering a general-purpose scraping or monitoring capability suggested by the skill metadata. This can be used to manipulate analytics, create misleading traffic signals, or conduct covert promotional/validation activity through proxy infrastructure.
The script sends outbound requests to a third-party proxy service and intentionally attempts to trigger Google Analytics on the destination site without clear user consent or disclosure. In a skill context, hidden external transmission and metric-affecting behavior increase the risk of privacy issues, policy violations, and misuse by unsuspecting users.
The code explicitly enables JavaScript rendering and frames success as 'GA should be able to see it,' showing intent to create analytics-tracked visits rather than merely retrieve page content. In the context of a proxy/scraping skill, this makes the capability more dangerous because it can be used to fabricate engagement metrics or evade simple bot detection through geo-distributed requests.
The skill relies on ScraperAPI to fetch target URLs through third-party proxy infrastructure, but it does not clearly disclose that target URLs and visit metadata are transmitted to an external service. Users may unknowingly send confidential URLs, parameters, or monitoring patterns to a third party, creating privacy, contractual, or compliance risk.
The skill explicitly supports JS rendering and user behavior simulation to trigger Google Analytics, Facebook Pixel, and similar systems, but it lacks a clear warning that using it will intentionally activate third-party tracking and analytics. This can generate misleading telemetry, interact with consent-dependent tracking flows, or create legal/privacy issues when used without authorization.
The package description is written only in Chinese, which can impose a specific language on users without indicating any language choice or opt-in. Under the policy for natural-language violations, this is a locale/language constraint that is not documented as region-specific or optional.
The dependency uses a semver range (^1.6.0) instead of an exact pinned version, which can lead to non-reproducible installs and unexpected package changes over time. In a security-sensitive skill that relies on network access and proxying, this increases supply-chain risk because different environments may resolve to different axios releases, including potentially vulnerable or compromised ones.
"author": "家庭助手",
"license": "MIT",
"dependencies": {
"axios": "^1.6.0"
},
"engines": {
"node": ">=14.0.0"
The manifest references axios without exact pinning, while the package family has multiple known advisories, including SSRF- and proxy-related issues in some releases. Because this skill's stated purpose is global web access via proxies and remote fetching, any unresolved axios vulnerability is more dangerous in context and could affect outbound request security, credential handling, or request routing behavior.
This JavaScript file contains multiple natural-language comments and console messages only in Chinese, such as the status messages and report headings. That imposes a specific language/locale on users without any visible opt-in, fallback, or justification, which matches the policy category for language or locale violations.
The manifest advertises support for '25+ countries', suggesting more than 25. The code comment and array content show a fixed list of exactly 25 countries, so the stated capability overstates what the implementation currently provides.
Detected: suspicious.exposed_secret_literal