Back to skill

Security audit

Douyin Influencer Outreach

Security checks for vulnerabilities and agentic risk

Overview

This skill openly automates Douyin outreach, but it can send real DMs from a logged-in account and keeps contact records with weak safeguards and unsafe command/script patterns.

Review this skill carefully before installing. Use it only if you are comfortable with automated outbound Douyin messages from your logged-in account, and require manual review of each recipient and message. Avoid using scraped profile text in shell commands or generated scripts, set strict send limits, follow Douyin and local privacy/marketing rules, and define how contact records will be deleted or protected.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (3)

T09 · Insecure Skill Coding Practices

Error
Location
helpers.js:73
Finding

JavaScript Injection Through Dynamically Generated Browser Script

Content
View full analysis
{ const input = document.querySelector('[contenteditable="true"]'); if (!input) return 'not found'; input.focus(); input.textContent = '${message.replace(/'/g, "\\'")}'; input.dispatchEvent(new Event('input', {bubbles: true})); return 'ok'; }`; } ``` ### Technical Analysis `generateInputScript()` embeds `message` directly into executable JavaScript source. It attempts to secure the value by escaping apostrophes, but this is not a complete JavaScript string-literal encoding mechanism. In particular, the function does not safely encode backslashes, Unicode line terminators, newlines, or other JavaScript syntax. An attacker can place a backslash immediately before an apostrophe so that the newly inserted escape character does not prevent the apostrophe from terminating the generated string. Once the string is terminated, attacker-supplied JavaScript can become part of the generated function. The vulnerable value can originate from an influencer's public profile, biography, title, or content when that information is passed into a personalized message template. The resulting script is intended to execute in the context of an authenticated Douyin browser session. ### Attack Path 1. An attacker creates a Douyin profile or post containing a specially crafted title, biography, product name, or similar value. 2. The Skill retrieves this attacker-controlled content while inspecting the profile or latest post. 3. The value is passed into `generateMessage()` or another personalization step. 4. The resulting message is supplied to `generateInputScript()`. 5. `generateInputScript()` escapes only apostrophes and concatenates the message into executable JavaScript. 6. A crafted backslash and apostrophe sequence te ...[truncated 751 chars]
Remediation
View remediation
{ const input = document.querySelector('[contenteditable="true"]'); if (!input) return 'not found'; input.focus(); input.textContent = ${encodedMessage}; input.dispatchEvent(new Event('input', { bubbles: true })); return 'ok'; }`; } ``` - Treat all profile metadata, post titles, comments, and extracted product names as untrusted input. - Add tests covering apostrophes, backslashes, newlines, Unicode line separators, template-literal characters, and attempted script injection. - Prefer eliminating `generateInputScript()` entirely to ensure future callers cannot reintroduce source-code interpolation. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:95
Finding

Shell Command Injection Through Untrusted CSV Field Interpolation

Content
View full analysis
> ~/.openclaw/workspace/skills/douyin-influencer-outreach/contacted.csv ``` The same unsafe command construction is repeated after a message is sent: ```bash # Immediately append the contacted influencer to contacted.csv echo '"{nickname}","{douyin_id}","{sec_uid}",{follower_count},{like_count},"{ip_location}","{biography}","{message_content}","{datetime}","not_replied","{latest_post_title}","{latest_post_engagement}"' \ >> ~/.openclaw/workspace/skills/douyin-influencer-outreach/contacted.csv ``` ### Technical Analysis The documented workflow instructs the agent to interpolate scraped profile fields and generated message content directly into a shell command. Although the CSV row is surrounded by shell single quotes, no shell-safe encoding is applied to the substituted fields. An attacker-controlled apostrophe can terminate the surrounding shell string. Additional shell metacharacters can then introduce a new command, with a later apostrophe restoring syntactic validity if necessary. Relevant attacker-controlled fields include the influencer nickname, biography, post title, location text, and potentially account identifiers. The construction is also not a correct general-purpose CSV encoder. Embedded double quotes must be doubled under standard CSV escaping rules, and embedded newlines require structured handling. Consequently, even values that do not achieve command execution can corrupt record boundaries, create forged entries, or interfere with `s ...[truncated 1637 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
package.json:25
Finding

Unpinned OpenClaw Runtime Dependency

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
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (16)

Tp2

High
Category
MCP Tool Poisoning
Confidence
85% confidence
Finding

Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill is presented as neutral influencer outreach, but its actual workflow automates scraping, profiling, filtering, and sending promotional unsolicited DMs at scale. This mismatch hides high-risk growth-spam behavior from users and reviewers, increasing the chance of deceptive deployment, policy violations, account sanctions, privacy abuse, and unintended mass messaging.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The operational instructions are presented in Chinese and the workflow, UI element matching, and message templates all assume Chinese-language interaction. There is no statement offering an alternative language or obtaining user opt-in, which can violate language/locale policy for general-purpose skills.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The examples broaden the skill from stated influencer outreach into recruiting people from comments into a group-buying group, which changes both the target audience and the operational purpose. This scope creep is dangerous because it enables higher-volume unsolicited contact and social-engineering style messaging beyond the declared function, increasing abuse and compliance risk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The documentation instructs users to collect and track identifiable recipient data and follow-up statuses that are not described in the manifest. This is dangerous because it normalizes creation of a shadow CRM containing personal/profile data without clear purpose limitation, retention controls, or privacy disclosures.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The examples automate direct messaging while recording recipient profile data, but provide no warning or controls around privacy, lawful basis, consent, platform rules, or secure handling of the collected data. In this context, the skill is specifically designed for bulk outreach and tracking, making the omission more dangerous because it can facilitate spam campaigns and improper personal-data processing at scale.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This function programmatically sends a DM by synthesizing an Enter key event with no confirmation, guardrail, or rate-limit. In the context of a mass-outreach skill, that enables fully automated unsolicited messaging and makes accidental or abusive bulk sending much easier.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The message templates are explicitly designed to automate unsolicited group-buying solicitation, not merely neutral outreach. In this skill context, that means the code operationalizes spam/scam-style direct messaging at scale, increasing platform abuse, deceptive marketing risk, and possible policy or legal violations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The strategy explicitly targets 'female_young' users with tailored persuasion, using demographic assumptions without consent or necessity. In an automated outreach/spam context, this increases manipulation, discriminatory targeting, and compliance risk beyond ordinary personalization.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The package description explicitly advertises searching users and sending personalized DMs, but it does not warn that the skill performs outbound messaging or could affect a real Douyin account. In this context, the omission is security-relevant because users may invoke the skill without understanding it can trigger account actions, spam-like behavior, or platform enforcement consequences.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

This CSV uses Chinese-only headers such as 昵称, 抖音号, and 私信内容, which indicates a locale-specific language choice embedded in the file content. Under the policy, language constraints should either offer user choice or be clearly documented as region-specific and justified; this file provides neither.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The examples, message templates, and outreach copy are all written as fixed Chinese-language content, and the file does not state that Chinese is required for a region-specific purpose or let the user choose another language. The policy requires flagging language/locale constraints unless they are opt-in or clearly justified.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The filter function documentation and destructured parameters include minWorks, implying the code screens influencers by number of works. However, the returned filter only checks followers and engagement, so the inline documentation/intent communicated by the code does not match actual behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The code injects user-controlled message content directly into generated JavaScript source using only single-quote escaping. That creates a code-generation sink where crafted input containing sequences like newlines, backslashes, or script-breaking payloads can alter the generated function or produce unintended DOM/script behavior.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency on openclaw is unpinned using a wildcard, which allows different installs to resolve to arbitrary versions over time. That increases supply-chain risk and can silently pull in vulnerable or behavior-changing releases, especially dangerous for a skill that automates browsing and messaging actions.

Content

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

json
"openclaw": ">=2026.4.0"
  },
  "dependencies": {
    "openclaw": "*"
  }
}

Unverifiable Dependency: openclaw has 16 known advisory(ies) (CVE-2026-53846 (OpenClaw: Workspace .env npm_execpath could influence bundled runtime dependency); CVE-2026-32064 (OpenClaw's andbox browser noVNC observer lacked VNC authentication); CVE-2026-32006 (OpenClaw has a BlueBubbles group allowlist mismatch via DM pairing-store fallbac) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
88% confidence
Finding

The manifest references openclaw without pinning a version even though the dependency family has multiple known advisories. Because the resolved version is unknowable from this manifest alone, the skill may install an affected release and inherit issues in browser automation, authentication, or environment handling.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.