T03 · Remote Payload Retrieval and Execution
- Location
scripts/skill_update.mjs:207- Finding
Unauthenticated Remote Self-Update Allows Replacement of Executable Skill Files
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is mostly coherent for creator search and outreach, but its updater and credential handling need human review before installation.
Install only if you trust Creativault and can review or disable the self-update path. Keep CV_SKILL_AUTO_UPDATE unset, use an HTTPS Creativault API URL you control or trust, use a scoped API key, confirm recipient lists before sending, and treat exported creator/contact files as sensitive personal data.
scripts/skill_update.mjs:207Unauthenticated Remote Self-Update Allows Replacement of Executable Skill Files
scripts/skill_update.mjs:122Remote Manifest Can Delete Files Across the Skill Root
scripts/_api_client.mjs:12API Key and Operator Identity Can Be Transmitted over Plaintext HTTP or to an Arbitrary Host
scripts/export_to_csv.mjs:82CSV Exporter Allows Arbitrary Writable File Overwrite or Append
scripts/export_to_csv.mjs:35CSV Export Does Not Neutralize Spreadsheet Formula Injection
Referenced artifact was not completely inspected
node scripts/skill_update.mjs --check
Referenced artifact was not completely inspected
node scripts/skill_update.mjs --check
Referenced artifact was not completely inspected
node scripts/skill_update.mjs --check
Referenced artifact was not completely inspected
node scripts/generate_manifest.mjs --note "Describe this release"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
const excludedPathNames = new Set([
'.DS_Store',
'Thumbs.db',
'.env',
]);
function readJSON(path) {
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
const excludedPathNames = new Set([
'.DS_Store',
'Thumbs.db',
'.env',
]);
function readJSON(path) {
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
const excludedPathNames = new Set([
'.DS_Store',
'Thumbs.db',
'.env',
]);
function readJSON(path) {
A self-modifying/self-updating script is a genuine security concern here because it allows the skill to replace its own local files from remote content. In the context of a creator scraping/outreach skill, this capability is unnecessary and increases the blast radius of any upstream compromise into arbitrary code or behavior changes on the client side.
#!/usr/bin/env node
// Check and update this skill from a remote manifest.
//
// Usage:
// node scripts/skill_update.mjs --check
The skill advertises capabilities that require environment-variable access and outbound network access, but it does not declare any explicit tool scope or permission boundary. In an agent environment, this can lead to overbroad authority being granted implicitly, making it easier for the skill to access secrets and perform external actions without clear operator review.
The skill explicitly promotes scraping creator data from multiple social platforms and sending batch outreach emails, but it provides no visible safeguards around consent, privacy, lawful data use, rate limits, or recipient impact. In context, this makes the skill more dangerous because it combines mass data collection with automated outbound communication, increasing the risk of privacy abuse, spam, and platform-policy violations.
The invocation keywords are broad enough to match generic requests like outreach or send email, which can cause the skill to activate in contexts beyond creator discovery. Because this skill includes batch scraping and outbound messaging behavior, overly broad routing increases the chance of unintended external actions or privacy-invasive collection being triggered by ambiguous prompts.
The skill explicitly supports exporting scraped creator data into downloadable xlsx/csv/html files and sharing file links, but the description does not warn users that collected data may contain personal information or sensitive profile/contact data. In a scraping and outreach context, omission of this warning increases the likelihood of inappropriate collection, distribution, or retention of personal data, especially when users may treat generated download links as low-risk artifacts.
The trigger phrase list contains very broad terms such as 'similar creators', 'lookalike', and especially generic discovery phrases in both Chinese and English. In an agentic system, overly broad activation terms can cause this skill to be selected for unrelated user requests, leading to unintended scraping or creator-search actions and increasing the chance of privacy, compliance, or policy-violating behavior in contexts where the user did not explicitly request it.
The trigger list includes broad, everyday phrases such as 'search creators' and 'influencer discovery', which can cause the agent to invoke this skill in loosely related contexts without strong user intent. In this skill, accidental activation is more concerning because it can lead into creator scraping and downstream outreach workflows, increasing the chance of unintended data collection or contact actions.
The skill metadata includes very broad invocation phrases such as '建联, 发邮件, email outreach, send email, outreach', which can match ordinary user requests without sufficient scoping to the Creativault workflow. In a high-risk skill that can trigger email sending, overly generic triggers increase the chance of unintended routing into an outbound-contact capability, potentially leading to accidental outreach or user confusion about what action will be taken.
The decision rules map ambiguous natural-language inputs like '发邮件', '建联', 'reach out', '待办', and '沟通历史' directly to operational scripts without clear scope boundaries or eligibility checks. Even though the document later requires confirmation before sending, ambiguous routing at the skill-selection stage can still cause unintended invocation of sensitive outreach functionality and increase the risk of acting on incomplete or mismatched user intent.
This is a markdown file, so SQP-2 applies to missing safety/privacy warnings in the description. The document instructs users to send X-API-Key and X-User-Identity headers and later to provide webhook_url and handle authenticated file_url exports, but it does not warn that these values may expose credentials, identity, or exported creator/contact data if logged or shared improperly.
Line L03 states that when the user says a country name in Chinese, the agent must convert it to an ISO code, and the document overall is written as a Chinese-only mapping reference. There is no indication that other languages are accepted or that Chinese is an optional locale, which can violate a language/locale policy requiring user choice or explicit justification.
This markdown file is written as an operational instruction and states that the agent should act when the user provides Chinese language names. That imposes a Chinese-language expectation without any user opt-in or explicit note that the skill is intentionally region- or locale-specific.
This file documents retrieval of direct contact details (email, WhatsApp, Line, Zalo) together with creator profile and audience analytics, but provides no privacy constraints, consent requirements, use limitations, or anti-abuse guidance. In the context of a skill explicitly designed for scraping creators and sending outreach at scale, that omission materially increases the risk of unsolicited contact, profiling, and misuse of personal data.
This code performs a POST request and includes both the request body and an X-User-Identity header when enabled. While the module has internal comments and error handling, it does not provide a user-facing disclosure here that user/system data is transmitted to an external API.
The client can automatically invoke a local update script via child_process when server-supplied metadata indicates an update and the CV_SKILL_AUTO_UPDATE flag is enabled. Even though the executed path is local, this creates a remote-influenced execution path in a scraping/outreach skill where self-modification is not essential, increasing supply-chain and unintended code execution risk if the update script or package contents are tampered with.
The auto-update path launches a subprocess during normal API handling without a strong user-facing confirmation at the point of execution. In the context of a data-collection and outreach skill, this hidden execution behavior is riskier because a remote service response can influence local code changes and process spawning, which users may not expect.
This code performs a network/API call to send emails, which transmits recipient identifiers, email addresses, and message content. Although the header documents parameters, it does not clearly warn the user that running the script will actually send outbound email and transmit this data to an external service.
The file’s natural-language documentation and runtime status messages are entirely in Chinese, including usage instructions and progress output. This imposes a specific language on users without any opt-in, language selection, or documented justification that the skill is China/Chinese-specific.