Back to skill

Security audit

TikTok Uploader

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it claims: it helps upload and schedule TikTok videos, but users should treat TikTok cookies or session IDs as account credentials.

Install in an isolated virtual environment when possible. Treat cookies.txt, session IDs, and cookie lists as passwords, keep them local, avoid pasting them into chats or logs, and refresh or revoke them if exposed. Review selected videos, captions, visibility, and schedules before upload, especially for batch operations.

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:5
Finding
Unpinned Executable Third-Party Dependencies## Vulnerability Details **File Location**: `SKILL.md`, lines 5 and 16–17; additional unsafe upgrade guidance at line 120 **Vulnerability Type**: Supply-chain risk from unpinned dependencies **Risk Level**: Medium ### Vulnerable Code ```yaml metadata: {"openclaw":{"emoji":"🎬","requires":{"bins":["python3","playwright"],"env":[]},"install":[{"id":"pip","kind":"pip","package":"tiktok-uploader","bins":["tiktok-uploader"],"label":"Install tiktok-uploader (pip)"},{"id":"playwright","kind":"pip","package":"playwright","bins":["playwright"],"label":"Install Playwright"}]}} ``` ```bash pip install tiktok-uploader playwright install ``` The troubleshooting section also recommends an unconstrained upgrade: ```bash pip install -U tiktok-uploader ``` ### Technical Analysis The skill installs `tiktok-uploader` and Playwright without exact version constraints, lock-file enforcement, or package hashes. Consequently, the code installed when a user invokes the setup procedure can differ from the dependency versions that were present when the skill was audited. The `playwright install` command additionally downloads executable browser components. No artifact version or integrity verification is documented. The `pip install -U tiktok-uploader` recommendation explicitly encourages replacing an installed dependency with the latest available release without first reviewing it. This creates a supply-chain exposure: if a dependency release, package index account, distribution channel, or downloaded browser artifact is compromised, attacker-controlled code could be installed and executed under the user's account. The audit found no evidence that the currently referenced package names are typosquatted or malicious; the vulnerability is the absence of reproducible dependency pinning and integrity controls. ### Attack Path 1. An attacker compromises a dependency publisher account, package distribution channel, or a future release of one ...[truncated 1307 chars]
Remediation
## Remediation Suggestions 1. Pin every Python dependency to an exact, reviewed version, for example `tiktok-uploader==X.Y.Z` and `playwright==A.B.C`. 2. Maintain a dependency lock file containing cryptographic hashes and install with hash verification, such as `pip install --require-hashes -r requirements.txt`. 3. Pin and document the Playwright version together with its corresponding browser release. Use the package's supported cache or controlled artifact repository and verify downloaded artifacts where feasible. 4. Replace the unconditional `pip install -U tiktok-uploader` troubleshooting instruction with a controlled upgrade procedure that requires reviewing release notes, source changes, provenance, and integrity before updating. 5. Use a trusted, explicitly configured package index and prevent unintended fallback to untrusted or internal indexes. 6. Run installation and browser automation in an isolated virtual environment or container under a non-privileged account with access limited to the required cookie and video files. 7. Add automated dependency scanning and provenance checks to the release process, and repeat the security review whenever pinned dependency versions change.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (3)

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill explicitly instructs users to provide highly sensitive TikTok authentication artifacts such as a full cookies.txt export or a raw sessionid, which can grant direct account access if mishandled. While this is functionally relevant to browser automation, the skill does not warn that these secrets should be treated like passwords, minimized, stored securely, and never shared beyond the local automation context.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
This code performs a network operation by uploading a local video file, description, and related settings to TikTok via `uploader.upload_video()`. Aside from a brief module docstring, there is no confirmation prompt, print/log statement, or inline warning disclosing that local content and metadata will be transmitted to an external service.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The batch upload path transmits a list of local video files and associated metadata to TikTok using `uploader.upload_videos()`. The code lacks any visible confirmation, logging, or explicit warning that multiple files may be sent to an external network service.

Static analysis

No suspicious patterns detected.