Back to skill

Security audit

douyin-engager

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed Douyin automation skill, but it can post comments and follow accounts using a saved logged-in session, so users should review it carefully before installing.

Install only if you intentionally want a bot to use your Douyin account to post comments and follow creators. Review the keyword, comment text, count, and interval before running; consider using a dedicated account and isolated environment, and clear the skill's `browser_data` if you do not want the login session retained.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:59
Finding

Unpinned Third-Party Package and Browser Binary Installation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 59-63
Vulnerability Type: Unpinned third-party dependencies and unverified binary installation
Risk Level: Medium

Vulnerable Code

bash
### Dependencies

```bash
pip install playwright
playwright install chromium
text

### Technical Analysis

The installation instructions retrieve the latest available Playwright package and Chromium browser binary without specifying reviewed versions, validating cryptographic hashes, or using a dependency lockfile. Consequently, the installed components can change after the Skill has been reviewed.

This creates a supply-chain risk. If the selected package index, package release, browser distribution channel, or an upstream maintainer account is compromised, following these instructions could install attacker-controlled code. Python packages can execute code during installation or when imported, while a compromised browser binary executes when the automation scripts launch it.

No evidence shows that the current Playwright package or Chromium binary is malicious. The finding concerns the absence of controls that ensure future installations reproduce the reviewed dependency set.

### Attack Path

1. An attacker compromises an upstream package release, package-index account, distribution endpoint, or browser artifact used by the installation commands.
2. A user follows the instructions in `SKILL.md` and installs the mutable latest release.
3. Attacker-controlled code executes during package installation, import, or browser startup.
4. The malicious component runs with the privileges of the user executing the Skill.
5. Because the Skill uses a persistent authenticated browser profile, the malicious component may access local files, browser state, or Douyin session data available to that user.

### Impact Assessment

Successful exploitation could provide arbitrary code execution under the installing user's 
...[truncated 393 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin Playwright to a reviewed, exact version, for example through a version-locked requirements file.
  2. Generate and commit a lockfile containing cryptographic hashes for all Python packages and transitive dependencies.
  3. Install dependencies with hash verification enabled, such as pip install --require-hashes -r requirements.txt.
  4. Pin the corresponding Playwright-managed Chromium revision and verify downloaded browser artifacts against trusted checksums where supported.
  5. Use only trusted package indexes and configure index URLs explicitly to reduce dependency-confusion and repository-substitution risks.
  6. Perform installation and browser execution in an isolated, least-privilege environment rather than under an administrative account.
  7. Keep the persistent browser profile outside distributable project artifacts, restrict its filesystem permissions, and avoid sharing it with unrelated automation.
  8. Establish a controlled dependency-update process that includes vulnerability scanning and review before changing pinned versions.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (12)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The entire skill progress document is written only in Chinese, including headings and operational details, with no indication that the user can choose another language or that the skill is intentionally limited to a Chinese-speaking context. Under the policy rule for natural-language violations, this can be a language/locale restriction without explicit opt-in or justification.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill instructs the agent to change directories and execute a local Python script, and the workflow also persists login state in a browser profile, indicating operational capabilities beyond a purely descriptive skill. Because the manifest does not declare an explicit tool scope or permissions boundary, users and policy layers may not have clear visibility into the file-write and local execution side effects, which increases the chance of unintended or over-broad agent actions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger phrases include broad terms such as '抖音评论', '抖音关注', '抖音互动', and '抖音推广', which can easily match ordinary user requests about Douyin engagement rather than an intentional request to invoke an automation skill. In this context, accidental activation is more dangerous because the skill performs social-platform automation, posting comments and follows on a logged-in account, creating spam, account-risk, and reputational consequences.

Content

No source excerpt is available for this finding.

Ae2

Medium
Category
analysis-evasion
Confidence
90% confidence
Finding

Artifact content does not match its filename extension

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script performs real comments and follow actions automatically against a live Douyin account without per-action confirmation, dry-run mode, or an explicit consent gate. In the context of a social-media engagement automation skill, this is risky because it can cause unauthorized account activity, spam behavior, platform policy violations, and reputational damage if the operator launches it unintentionally or with unsafe parameters.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

This code automates account-affecting actions on Douyin by posting comments and following accounts using the logged-in user's session, but it provides no explicit consent checkpoint or high-visibility warning immediately before those actions execute. In the context of a social-media engagement skill, this is dangerous because it can cause unintended account activity, policy violations, spam-like behavior, reputational harm, or account restriction using the user's authenticated identity.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The code stores and reuses a persistent Playwright browser profile in a fixed local directory, which retains authentication cookies and session state without an upfront warning or protection controls. In a tool designed to automate actions on a social media account, persistent session reuse increases the risk that anyone with local access, or any later run of the script, can act through the user’s authenticated account without re-authentication.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The script performs account-modifying actions at scale by automatically posting comments and following accounts with no per-action confirmation, dry-run mode, or explicit consent checkpoint immediately before execution. In this skill’s context, that is more dangerous than usual because its stated purpose is automated Douyin engagement/promotion, which can misuse a logged-in account, violate platform rules, and create spammy or unauthorized activity if launched accidentally or by another local user/process.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The script uses a persistent Playwright browser profile directory, which retains cookies, session tokens, and other account state on disk without any warning or lifecycle controls. If the local system is shared or compromised, that stored session data could enable unauthorized reuse of the logged-in Douyin account.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The browser context is configured with locale="zh-CN", which hard-codes a specific language/locale behavior. There is no opt-in, configuration mechanism, or documented justification showing that the skill is intentionally limited to that locale.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The Playwright browser context is configured with locale="zh-CN", which imposes a specific language/locale setting regardless of user preference. This is a natural-language policy concern because the file does not provide opt-in, configurability, or justification for forcing that locale.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The browser context is hard-coded to locale="zh-CN", which imposes a specific language/locale behavior on all users. There is no opt-in, configuration option, or explanation that this restriction is required for a region-specific purpose.

Content

No source excerpt is available for this finding.