Back to skill

Security audit

TikTok App Marketing is an AI-agent skill that automates TikTok slideshow marketing for any app or product — researching competitors, generating AI images, adding hook and CTA text overlays, creating TikTok drafts and cross-posting to Instagram, YouTube and Threads via PosteAhora, tracking per-post analytics, and iterating on the hooks and CTAs that drive views and paying users (with optional RevenueCat conversion tracking).

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent TikTok marketing automation workflow, but it needs Review because it includes platform-detection evasion guidance, plaintext secret storage patterns, and a persistent analytics cron over social and revenue data.

Review before installing. Use environment variables or a secret manager instead of putting API keys in config.json, avoid committing generated configs and reports, require approval before any package install or cron setup, and do not use the account-warmup guidance to evade platform anti-abuse controls. Confirm exactly which platforms can receive drafts or automatic posts through PosteAhora and what RevenueCat data will be stored locally.

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 (2)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:230
Finding

Unpinned Third-Party Dependencies and Globally Installed CLI Tools

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:18, SKILL.md:230-232, SKILL.md:265-269, and SKILL.md:451-478
Vulnerability Type: Unpinned and insufficiently verified third-party dependencies
Risk Level: Medium

Vulnerable Code

SKILL.md:18:

markdown
- **node-canvas** (`npm install canvas`) — used for adding text overlays to slide images. This is a native module that may need build tools (Python, make, C++ compiler) on some systems. Your agent should research the install requirements for your OS.

SKILL.md:230-232:

bash
npm i -g @posteahora/cli
posteahora auth --key pah_live_...
posteahora accounts

SKILL.md:265-269:

markdown
1. **Install the RevenueCat skill from ClaWHub:**
   ```
   clawhub install revenuecat
   ```
   This installs the `revenuecat` skill (v1.0.2+) which gives full API access to your RevenueCat project — metrics overview, customers, subscriptions, offerings, entitlements, transactions, and more. It includes reference docs for every API endpoint and a helper script (`scripts/rc-api.sh`) for direct API calls.

SKILL.md:451-478:

markdown
Before you can add text overlays, your human needs to install `node-canvas`. Prompt them:

> ```bash
> npm install canvas
> ```
>
> **macOS:**
> ```bash
> brew install pkg-config cairo pango libpng jpeg giflib librsvg
> npm install canvas
> ```
>
> **Ubuntu/Debian:**
> ```bash
> sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev
> npm install canvas
> ```
>
> **Windows:**
> ```bash
> # node-canvas auto-downloads prebuilt binaries on Windows
> npm install canvas
> ```

Technical Analysis

The Skill instructs users or agents to install mutable third-party packages without exact version pins, lockfiles, integrity hashes, or evidence that the selected artifacts have been reviewed. The v1.0.2+ requirem ...[truncated 2433 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin every dependency and Skill to an exact reviewed version rather than a floating latest version or minimum-version range.
  2. Provide a committed lockfile and use deterministic installation commands such as npm ci.
  3. Verify registry provenance, package ownership, release signatures, and integrity hashes before installation.
  4. Review package lifecycle scripts and disable them with --ignore-scripts where installation does not require them.
  5. Install the PosteAhora CLI locally in an isolated project instead of globally, and invoke it through a version-pinned package runner.
  6. Use a container, virtual machine, or restricted build environment for native dependency compilation.
  7. Require explicit user approval before installing dependencies or operating-system packages.
  8. Never run NPM or ClaWHub installations as root. Keep privileged operating-system package installation separate from unprivileged application dependency installation.
  9. Pin transitive dependencies through the lockfile and use automated vulnerability, provenance, and license scanning.
  10. Replace v1.0.2+ with a specific audited RevenueCat Skill version and re-audit before upgrading.

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:357
Finding

Plaintext API Secrets Stored in the Project Configuration

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:357-381
Vulnerability Type: Plaintext storage of sensitive API credentials
Risk Level: Medium

Vulnerable Code

json
{
  "app": {
    "name": "AppName",
    "description": "Detailed description",
    "audience": "Target demographic",
    "problem": "Pain point it solves",
    "differentiator": "What makes it unique",
    "appStoreUrl": "https://...",
    "category": "home|beauty|fitness|productivity|food|other",
    "isMobileApp": true
  },
  "imageGen": {
    "provider": "openai",
    "apiKey": "sk-...",
    "model": "gpt-image-1.5"
  },
  "posteahora": {
    "apiKey": "pah_live_...",
    "accountIds": {
      "tiktok": "id-here",
      "instagram": "id-here-optional",
      "youtube": "id-here-optional"
    }
  },
  "revenuecat": {
    "enabled": false,
    "v2SecretKey": "sk_...",
    "projectId": "proj..."
  }
}

The document subsequently provides a safer environment-variable alternative only for PosteAhora:

bash
export POSTEAHORA_API_KEY=pah_live_...

Technical Analysis

The documented source-of-truth configuration places image-generation, PosteAhora, and RevenueCat secret keys directly in tiktok-marketing/config.json. JSON configuration files are commonly committed to source control, copied into backups, attached to support requests, included in archives, or printed during troubleshooting.

Although the Skill warns users not to commit some secrets and supports POSTEAHORA_API_KEY, secure external secret handling is not consistently required for all providers. The instructions do not prescribe .gitignore coverage, restrictive filesystem permissions, log redaction, secret scanning, or a separate redacted example configuration.

The RevenueCat V2 secret can expose sensitive subscription and transaction data. The PosteAhora credential can provide access to connected account informatio ...[truncated 1679 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove all API-key and secret-key fields from the persistent JSON configuration.
  2. Require environment variables or an operating-system secret manager for OpenAI, PosteAhora, RevenueCat, Stability AI, and Replicate credentials.
  3. Store only non-sensitive provider names, model names, account identifiers, and secret references in the JSON file.
  4. Add tiktok-marketing/config.json, local environment files, generated reports, and other sensitive runtime files to .gitignore.
  5. Supply a config.example.json containing placeholders and no usable credentials.
  6. Set restrictive permissions on local secret files when file-backed secrets are unavoidable.
  7. Redact authorization headers, API keys, environment values, and configuration secrets from command output and logs.
  8. Add pre-commit and continuous-integration secret scanning for patterns such as sk-, sk_, and pah_live_.
  9. Use narrowly scoped, separate credentials for development and production, with service-side usage limits where available.
  10. Document immediate revocation and rotation procedures for accidentally exposed credentials.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (12)

Anti-Refusal Statement

High
Category
Anti-Refusal
Confidence
85% confidence
Finding

Skill instructs the agent to omit warnings, disclaimers, or ethical commentary. Stripping safety caveats hides risk from the user and is a common jailbreak preamble.

Content

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

md
**Save the agreed prompt style to config as `imageGen.basePrompt`** so every future post uses it.

**Key prompt rules (explain these as they come up, don't lecture):**
- "iPhone photo" + "realistic lighting" = looks real, not AI-generated
- Lock architecture/layout in EVERY slide prompt or each slide looks like a different place
- Include everyday objects (mugs, remotes, magazines) for lived-in feel

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest description says to use the skill when a user mentions broad phrases like 'social media marketing' or 'their app,' alongside several open-ended setup/optimization situations. These triggers are not narrowly scoped to this specific TikTok slideshow automation workflow, so the skill could activate for many ordinary marketing discussions unrelated to this skill.

Content

No source excerpt is available for this finding.

Ssd 4

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The warmup guidance instructs users to simulate organic account behavior over 7-14 days specifically to avoid bot detection and throttling before starting automated posting. This is dangerous because it operationalizes evasion of platform anti-abuse controls and can facilitate spammy or deceptive automation at scale.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill explicitly shows storing live OpenAI, PosteAhora, and RevenueCat secrets inside tiktok-marketing/config.json, which creates a high risk of accidental disclosure through source control, logs, backups, or agent output. Although it briefly notes environment variables are safer, the example normalizes plaintext secret storage as part of the default setup.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

md
>
> **Ubuntu/Debian:**
> ```bash
> sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev
> npm install canvas
> ```
>

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

Analytics (per-post views, likes, comments, shares, reach — plus summary totals):

text
GET https://api.posteahora.com/functions/v1/api/analytics?period=7d&platform=tiktok
Authorization: Bearer pah_live_...

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/analytics-loop.md (reported line 11)May include surrounding context.

Analytics (per-post views, likes, comments, shares, reach — plus summary totals):

text
GET https://api.posteahora.com/functions/v1/api/analytics?period=7d&platform=tiktok
Authorization: Bearer pah_live_...

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/analytics-loop.md (reported line 46)May include surrounding context.

Analytics (per-post views, likes, comments, shares, reach — plus summary totals):

text
GET https://api.posteahora.com/functions/v1/api/analytics?period=7d&platform=tiktok
Authorization: Bearer pah_live_...

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The daily cron workflow automates recurring data collection from external services and writes reports and analytics files locally without any explicit user acknowledgment, opt-in, or guardrails around storage scope. In an agent skill, unattended collection and persistence can create privacy, compliance, and accidental data-retention risks, especially when conversion and revenue data may be pulled alongside social analytics.

Content

No source excerpt is available for this finding.

Scope Creep

Low
Category
Excessive Agency
Confidence
70% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

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

md
> npm install canvas
> ```
>
> "Once installed, I can handle everything else — generating the overlays, sizing the text, positioning it perfectly. You won't need to touch this again."

**Don't skip this step.** Without node-canvas, the text overlays won't work. If installation fails, help them troubleshoot — it's usually a missing system library. Once it's installed once, it stays.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The file instructs the user to record post analytics in hook-performance.json, including captions/hooks and performance metrics, but does not include any warning about local data storage or retention. Under the markdown-file criteria, behaviors affecting user data should be disclosed clearly.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The Beauty / Cosmetics prompt hard-codes the subject as 'a young woman', which imposes a gender and age constraint in natural-language guidance without user opt-in. This is a policy-style issue because it narrows outputs to a specific demographic rather than allowing user selection or documenting a justified scope.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:278