Back to skill

Security audit

monsterget-tiktok-collector

Security checks for vulnerabilities and agentic risk

Overview

This skill is a TikTok data collector, but it needs review because it self-updates from GitHub, persists agent instructions, and uses a logged-in browser session with third-party data handling.

Install only if you are comfortable with MonsterGet using your real logged-in browser session to collect TikTok data, with CSVs downloaded locally and settings persisted under ~/.monsterget. Review or disable the auto-update behavior before use, and be aware that client rule files may be changed so future agent sessions keep loading this skill.

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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
Findings (37)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The skill directs the agent to run an auto-update script that downloads updates from GitHub and overwrites local skill files at session start. A self-updating execution path materially changes code after installation, expanding the trust boundary and enabling supply-chain compromise or silent behavior changes without explicit re-approval from the user.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding
The skill directs the agent to run an auto-update script that downloads updates from GitHub and overwrites local skill files at session start. A self-updating execution path materially changes code after installation, expanding the trust boundary and enabling supply-chain compromise or silent behavior changes without explicit re-approval from the user.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The skill directs the agent to run an auto-update script that downloads updates from GitHub and overwrites local skill files at session start. A self-updating execution path materially changes code after installation, expanding the trust boundary and enabling supply-chain compromise or silent behavior changes without explicit re-approval from the user.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The skill directs the agent to run an auto-update script that downloads updates from GitHub and overwrites local skill files at session start. A self-updating execution path materially changes code after installation, expanding the trust boundary and enabling supply-chain compromise or silent behavior changes without explicit re-approval from the user.

Ae1

High
Category
analysis-evasion
Content
> **🚫 Never run `detect-browser.sh`, `check-login.sh`, or `preflight.sh`** — these are archived reference only. The user guarantees all conditions manually. The
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
> **🚫 Never run `detect-browser.sh`, `check-login.sh`, or `preflight.sh`** — these are archived reference only. The user guarantees all conditions manually. The
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Anti-Refusal Statement

High
Category
Anti-Refusal
Content
fi

# ARCHIVED — pure manual flow. We never scan the disk for the extension and
# never refuse based on "more than one browser detected". The user already
# confirmed which browser to use (SKILL.md Step I-II); browser_pref above IS
# that confirmation.
#
Confidence
85% confidence
Finding
Skill instructs the agent to never refuse or to always comply. Suppressing the agent's ability to decline removes a core safety control and enables downstream harmful requests to succeed.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
STAGED_SKILL="$(json_val "skill" < "$SRC/VERSION.json")"
    if [ -n "$STAGED_SKILL" ]; then
      # Remove old scripts, copy entire tree (SKILL.md + scripts + VERSION.json + AGENTS.md + INSTALL.md)
      rm -rf "$SKILL_DIR/scripts"
      cp -r "$SRC/." "$SKILL_DIR/"
      chmod +x "$SKILL_DIR/scripts/"*.sh 2>/dev/null || true
      UPDATED=true
Confidence
95% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The skill performs side-effecting actions including opening the user's browser, downloading files, and persisting preferences, but the general workflow section does not consistently foreground these actions as explicit user-facing consent points. In an agent setting, that can surprise users and reduce meaningful consent, especially because the browser may open and scraping may begin automatically once invoked.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| Script | Purpose |
|--------|---------|
| `update-skill.sh` | Session start — auto-update check. Compare local version against GitHub, auto-download updates. |
| `choose-browser.sh <edge\|chrome>` | Save the user's browser choice (manual — no verification, saves whatever the user says). |
| `run-scrape.sh <pagePath> <param> <value> [count]` | Full scrape: generate taskId, open browser, verify process, poll, download CSV. |
| `set-download-dir.sh [<dir>]` | Choose where scraped CSVs are saved (persists in state). No arg = system Downloads. Ask the user once per machine. |
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| Script | Purpose |
|--------|---------|
| `update-skill.sh` | Session start — auto-update check. Compare local version against GitHub, auto-download updates. |
| `choose-browser.sh <edge\|chrome>` | Save the user's browser choice (manual — no verification, saves whatever the user says). |
| `run-scrape.sh <pagePath> <param> <value> [count]` | Full scrape: generate taskId, open browser, verify process, poll, download CSV. |
| `set-download-dir.sh [<dir>]` | Choose where scraped CSVs are saved (persists in state). No arg = system Downloads. Ask the user once per machine. |
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The install flow instructs the agent to modify local custom-instruction or rules files, creating persistent behavioral changes in AI clients without prominently warning the user that configuration is being altered. In the context of an agent skill, persistent prompt/config modification is security-relevant because it can silently affect future sessions and expand the skill's influence beyond the immediate task.

Session Persistence

Medium
Category
Rogue Agent
Content
```bash
# Step 1 — clone and copy the runtime (once, shared by all clients)
git clone https://github.com/monsterget-com/skills /tmp/mgs
mkdir -p ~/.monsterget/skill
cp -r /tmp/mgs/tiktok-collector/. ~/.monsterget/skill/

# Step 2 — point your client at it (pick one)
Confidence
84% confidence
Finding
The skill is designed for persistent installation under ~/.monsterget/skill and optional propagation into client-specific directories, which creates durable code and instruction presence across sessions. In a security context, persistence increases risk because future agent sessions may continue invoking the skill or trusting its instructions after the original install event, especially when combined with browser-extension-based data collection.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
These commands append directives into AGENTS.md and multiple client rule files, causing persistent local configuration changes that may affect future agent behavior. Because the changes are silent appends rather than an audited/manual edit flow, users may not realize they have granted long-lived instruction precedence to this skill.

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill explicitly instructs the agent to run shell commands, access local files under ~/.monsterget, invoke curl, and execute helper scripts, yet it declares no permissions or allowed-tools scope. That mismatch can cause the host agent to grant broader execution capability than users expect, increasing the risk of unauthorized local file access, script execution, and network activity.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The invocation guidance is broad enough to trigger the skill for generic social-media research requests, even when the user did not specifically request browser-driven scraping through a logged-in TikTok session. Over-broad auto-invocation can cause unintended browser automation, local script execution, and third-party data transmission under ambiguous user intent.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The skill states that scraping occurs through the user's logged-in TikTok session and relays data to a server buffer, but the main description does not prominently warn about the privacy and data-transmission implications. Users may not realize that their browser session, query inputs, and extracted data are being sent to a third-party service for polling and download.

Description-Behavior Mismatch

Medium
Confidence
96% confidence
Finding
The manifest presents a TikTok-specific collector, but the runtime intentionally fetches a live scraper catalog that can enable newly added non-TikTok platforms automatically. This widens the operational scope beyond what the user may have reviewed, allowing the skill to start interacting with additional services or data flows without updated disclosure.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The header claims the script is archived, reference-only, and should never be run, but the body contains fully functional logic that detects browsers, opens a login-check URL, polls remote APIs, and writes login state. This mismatch is dangerous because it can mislead reviewers and downstream agents into under-scrutinizing active behavior, especially in a skill that orchestrates browser actions and account-linked data collection.

External Transmission

Medium
Category
Data Exfiltration
Content
fi

if [ "$TARGET" = "tiktok" ]; then
  TK="$(curl -s --max-time 10 -X POST "$BASE_URL/api/agent/login-check-target" \
        -H "Content-Type: application/json" -d '{"target":"tiktok"}' 2>/dev/null)"
  TK_ID="$(echo "$TK" | sed -n 's/.*"taskId":"\([^"]*\)".*/\1/p')"
  [ -n "$TK_ID" ] && TASK_ID="$TK_ID"
Confidence
88% confidence
Finding
The script transmits data to an external service via curl to create or retrieve a login-check task, then later polls the service for login status. In the context of a browser-extension-driven TikTok collection skill, this external communication is security-relevant because it links local browser/account state to a remote platform and could expose metadata about user authentication status or enable covert tracking if invoked without clear consent.

Context-Inappropriate Capability

Medium
Confidence
84% confidence
Finding
The manifest describes collecting TikTok data through the user's real browser, which justifies opening the browser or extension workflow, but this helper goes further by invoking a PowerShell script to force a browser window into the foreground using OS-level window-management techniques. That UI-control capability is not clearly justified by the stated purpose of social media data collection itself.

Intent-Code Divergence

Medium
Confidence
98% confidence
Finding
The file is presented as 'archived' and 'do not call it', but it still contains fully functional executable logic that performs environment checks, network reachability tests, and login probes. This mismatch can mislead reviewers and downstream agents into under-scrutinizing active code, creating a deceptive condition that increases the chance the script is executed or trusted without appropriate review.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The script silently probes browser state, extension presence, platform reachability, and authenticated login status for MonsterGet and TikTok without any user-facing disclosure or consent flow in the script itself. In the context of a data-collection skill that inspects a user's real browser and third-party account state, undisclosed probing is privacy-invasive and can normalize covert environment inspection.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The script initiates scraping, polls a remote platform, and downloads a CSV automatically, while comments explicitly state it is 'fire-and-forget' and 'never asks the user anything'. In a skill that drives a real browser and external extension, this reduces user visibility and consent around outbound data collection and file downloads, creating meaningful privacy and operational risk even if it is not overtly malicious.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
URL="$SITE_URL${PAGEPATH}?auto=1&agentTaskId=${TASK_ID}&${PARAM}=$(urlencode "$VALUE")${COUNT_ARG}"
state_set last_scrape_url "$URL"

# ---- open + verify the browser process actually started (never ask the user) ----
open_url "$URL"
STARTED=false
for _ in 1 2 3; do
Confidence
88% confidence
Finding
The script is designed to open the browser, retry launch, poll task status, and download results without any interactive checkpoint. In the context of a scraping skill using the user's authenticated browser session and extension, this autonomy can trigger unintended collection or downloads and can conceal misuse of the user's logged-in environment.

Static analysis

No suspicious patterns detected.