Back to skill

Security audit

Douyin Batch Save to Favorites Folder / 抖音批量入收藏夹

Security checks for vulnerabilities and agentic risk

Overview

Review before installing: this skill requests unnecessary privileges for long-lived background tasks and can interrupt active browser work.

Ask for ordinary-user task privileges, automatic cleanup when importing finishes, and browser ownership checks before unattended use. Keep this browser profile separate from everyday browsing and start with two items. The profile retains your login, eval can act as your account, and changes require manual reversal. Remove the MyLikeFavChromeKeepalive, MyLikeFavChrome, and MyLikeFavFront tasks and any configured import schedule when finished. The external scheduling wrapper was not supplied for review.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (20)

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 152)May include surrounding context.

md
Tools\mylike-fav-import\keepalive_hidden.vbs"`;VBS 用 `Run(..., 0, False)` 隐藏启动 `keepalive.ps1`。不要把 `powershell.exe -WindowStyle Hidden` 直接写进任务动作——它仍会每轮闪一次控制台窗口

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 153)May include surrounding context.

md
- `keepalive.ps1` 已内联窗口隐藏(`Add-Type WinApiKH` + `EnumWindows`/`ShowWindow`),一轮只起一个进程;`hide_chrome_window.ps1` 仅留作手工单跑

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 153)May include surrounding context.

md
- `keepalive.ps1` 已内联窗口隐藏(`Add-Type WinApiKH` + `EnumWindows`/`ShowWindow`),一轮只起一个进程;`hide_chrome_window.ps1` 仅留作手工单跑

The undocumented `eval` command exposes arbitrary JavaScript execution in the authenticated browser page, beyond batch favorite management.

High
Category
Excessive Agency
Confidence
99% confidence
Finding

At L125–L128, the command passes caller-supplied --js directly to s.eval, which executes it through CDP Runtime.evaluate (L40–L43). Unlike the fixed favorite-management operations, this allows arbitrary page-context actions, including accessing page data and issuing authenticated requests unrelated to adding videos to a collection.

Content

No source excerpt is available for this finding.

Registers a long-lived, elevated background task beyond the scope of batch-managing Douyin favorites.

High
Category
Excessive Agency
Confidence
98% confidence
Finding

Periodic keepalive execution is documented, but running its PowerShell script with the highest available privileges is unnecessary. If an administrative user registers this task and a lower-privilege actor can modify its script or dependencies, subsequent scheduled runs could execute attacker-controlled code with elevated privileges; the supplied source does not establish protective filesystem ACLs.

Content

No source excerpt is available for this finding.

The `eval` command exposes unrestricted JavaScript execution in the authenticated browser page, beyond the declared favorites-management workflow.

High
Category
Excessive Agency
Confidence
98% confidence
Finding

The command passes caller-provided --js directly to s.eval, which executes it through CDP Runtime.evaluate (L048–L051). Unlike the fixed favorite-management operations, this permits arbitrary page-context actions and access to page-accessible account data, with results returned to the caller. General-purpose browser scripting is not justified by the manifest's batch collection, folder management, verification, and resume functionality.

Content

No source excerpt is available for this finding.

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, file_write, network, shell.

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

L10 closes the entire connected Chrome instance rather than limiting changes to Douyin favorites.

Medium
Category
Excessive Agency
Confidence
90% confidence
Finding

The script connects to an existing browser debugger on port 9333 and issues Browser.close, shutting down that browser and all its tabs. Browser-wide shutdown exceeds the stated favorites-management purpose, and this script does not establish that the browser is a disposable instance owned by the skill.

Content

No source excerpt is available for this finding.

Closes the connected Chrome instance without user disclosure.

Medium
Category
Output Handling
Confidence
93% confidence
Finding

The script sends a Browser.close command, which closes the entire connected browser rather than just its debugging connection. There is no confirmation, user-facing log, or explanatory comment disclosing this action, which can interrupt active browsing and unsaved work.

Content

No source excerpt is available for this finding.

Hides the dedicated Chrome profile's visible windows, a desktop-control capability outside the stated favorites-management purpose.

Medium
Category
Excessive Agency
Confidence
90% confidence
Finding

The script identifies visible windows belonging to the dedicated Chrome profile and calls ShowWindow(h, 0) at L46 to hide them. Browser interaction is expected for managing Douyin favorites, but suppressing browser-window visibility is neither declared nor necessary for that purpose and reduces the user's ability to observe the automation.

Content

No source excerpt is available for this finding.

L85–L87 register the browser-launch task with the highest available privileges, which are unnecessary for batching Douyin favorites.

Medium
Category
Excessive Agency
Confidence
96% confidence
Finding

The task unnecessarily requests the user's highest available token to launch a web-facing browser with remote debugging enabled. For an administrative account, this increases the consequences of browser or debugging-interface compromise; it does not independently grant administrator rights to a standard user.

Content

No source excerpt is available for this finding.

The cleanup claims to target Chrome in session 0 but forcibly terminates matching Chrome processes in any session.

Medium
Category
Excessive Agency
Confidence
94% confidence
Finding

The cleanup comment promises session-0 targeting, but the code forcibly kills every Chrome process whose command line contains the workspace substring, without checking its session. Running this documented launcher can therefore terminate an active interactive automation browser, interrupt work, and lose unsaved state.

Content

No source excerpt is available for this finding.

The browser-launch task requests highest available privileges, which are unnecessary for managing Douyin favorites.

Medium
Category
Excessive Agency
Confidence
96% confidence
Finding

Interactive desktop placement does not require launching Chrome with the highest available privileges. When the account can elevate, the task unnecessarily exposes a higher-privilege browser and debugging endpoint, increasing the impact of compromise.

Content

No source excerpt is available for this finding.

The probe submits seven live collection-move requests without warning that it can modify the user's saved collections.

Medium
Category
Output Handling
Confidence
88% confidence
Finding

The loop sends every payload variant to the collection-move endpoint using the user's authenticated session, rather than performing a read-only probe. The usage comments explain how to run the script but do not disclose the repeated account mutations, and there is no confirmation prompt or user-facing warning before execution.

Content

No source excerpt is available for this finding.

The launcher requests highest-privilege execution through a registered Windows scheduled task, which is unjustified for managing Douyin favorites.

Medium
Category
Excessive Agency
Confidence
94% confidence
Finding

Bringing an automation window to the foreground does not justify running a PowerShell script with the highest available token. For an administrative account, modification of front.ps1 by a less-privileged actor could turn later task invocations into elevated code execution if the workspace is writable.

Content

No source excerpt is available for this finding.

Desktop-wide window inspection exposes unrelated console and scripting-session metadata beyond Douyin favorites automation.

Medium
Category
Excessive Agency
Confidence
90% confidence
Finding

The script scans all visible desktop windows and retains process IDs, window classes, and titles for console windows or titles matching keepalive, powershell, or wscript, without restricting them to the skill's processes. It prints those records at L59–L61 and additionally lists system-wide scripting-process metadata at L66–L68. Collecting and reporting unrelated application metadata is not justified by batch favoriting, folder management, verification, or resumable execution.

Content

No source excerpt is available for this finding.

Reconfigures a Windows scheduled task to launch a background VBScript, a capability outside the stated favorites-management purpose.

Medium
Category
Excessive Agency
Confidence
93% confidence
Finding

Lines L02–L05 replace the action of the existing MyLikeFavChromeKeepalive scheduled task with wscript.exe running keepalive_hidden.vbs in batch mode. Batch favoriting, folder management, verification, and resumability do not directly justify changing an OS-level scheduled task; this change also remains in effect beyond the current skill invocation. The script's contents and the task's triggers are not shown, so no further payload behavior is inferred.

Content

No source excerpt is available for this finding.

State reordering proceeds after a timeout even if the current batch is still running, contradicting the documented wait requirement.

Medium
Category
Excessive Agency
Confidence
99% confidence
Finding

After the three-hour timeout, execution unconditionally proceeds to state reordering even if the batch process is still active. In a resumable batch workflow, concurrent state updates can cause lost progress, inconsistent ordering, or skipped or repeated actions, depending on how the companion script writes state. The additional 15-second delay provides no mutual-exclusion guarantee.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/wait_then_reorder.py (reported line 56)May include surrounding context.

python
print("%s wait timeout, reorder anyway" % time.strftime("%H:%M:%S"))

    time.sleep(15)
    r = subprocess.run([sys.executable, os.path.join(BASE, "reorder_state.py"), xlsx],
                       capture_output=True, text=True)
    print("%s reorder rc=%s %s %s" % (time.strftime("%H:%M:%S"), r.returncode,
                                      r.stdout.strip(), r.stderr.strip()))

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
"license": "ISC",
  "type": "commonjs",
  "dependencies": {
    "ws": "^8.22.1"
  }
}