Back to skill

Security audit

Dataify Instagram Comment By Post URL

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its stated purpose, but it should be reviewed because it uses a Dataify API token and passes it to an unaudited external runtime that is not included in the package.

Install only if you are comfortable giving this skill access to a Dataify API token and letting it submit paid Dataify collection jobs. Review or supply the missing dataify-task-operations dependency from a trusted source before use, and avoid relying on implicit invocation for ambiguous Instagram requests.

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
scripts/submit_dataify_instagram_comment_by_posturl.py:11
Finding

Unverified External Python Module Is Executed and Receives the API Token

Content
View full analysis

Vulnerability Details

File Location: scripts/submit_dataify_instagram_comment_by_posturl.py, lines 11–14 and 173
Vulnerability Type: Untrusted dependency loading and module substitution
Risk Level: Medium

Vulnerable Code

python
TASK_RUNTIME_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "dataify-task-operations", "scripts"))
if TASK_RUNTIME_DIR not in sys.path:
    sys.path.insert(0, TASK_RUNTIME_DIR)
from task_runtime import complete_task

The imported function is subsequently given the API token:

python
final_result = complete_task(task_id, api_token, args.wait_timeout)

Technical Analysis

The script constructs a path to a sibling directory outside the audited Skill package, prepends that directory to sys.path, and imports task_runtime from it. Python executes a module's top-level code as soon as it is imported.

The external dataify-task-operations/scripts/task_runtime.py dependency is not included in the audited project. Its source, version, integrity, installation permissions, and update mechanism therefore cannot be verified from this package. Prepending the directory to sys.path also gives that location priority during module resolution.

This creates a module-substitution and supply-chain risk. Any actor capable of creating or replacing task_runtime.py in the expected sibling directory could cause arbitrary Python code to execute when the Skill starts. The imported complete_task function is later explicitly provided with api_token, further exposing the credential to unaudited code.

Attack Path

  1. An attacker obtains write access to the expected sibling directory: dataify-task-operations/scripts.
  2. The attacker creates or replaces task_runtime.py with a malicious implementation.
  3. A user invokes submit_dataify_instagram_comment_by_posturl.py.
  4. The script inserts the attacker-controlled directory at the beg ...[truncated 1364 chars]
Remediation
View remediation

Remediation Suggestions

  1. Package task_runtime within a reviewed, versioned Python package rather than importing it from an adjacent filesystem directory.
  2. Install the dependency through a controlled package-management process with an exact version and cryptographic hash pinned in a lock file or requirements file.
  3. Remove the manual sys.path.insert(0, ...) modification and use a normal package import from a trusted installation location.
  4. Ensure the dependency directory is not writable by untrusted users or lower-privileged processes.
  5. Include the runtime dependency in the security-review scope and verify its network destinations, credential handling, result-download behavior, and error logging.
  6. Avoid passing the full API token to external components where possible. Prefer a narrowly scoped, short-lived credential or keep authenticated operations in the audited script.
  7. Add startup validation that confirms the imported module's resolved path and, where feasible, verifies its expected cryptographic digest before use.
  8. Ensure exceptions and diagnostics from the dependency never include the API token or authenticated request headers.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (12)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
97% confidence
Finding

The skill clearly intends to use environment access and outbound network calls, but it declares no explicit tool scope or permissions boundary. That creates an authorization gap where an agent may execute sensitive actions without transparent least-privilege constraints, increasing the chance of unintended token access or external requests.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
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.

Content

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

md
Use `DATAIFY_API_TOKEN` as the long-term saved token name.

- If `DATAIFY_API_TOKEN` is saved locally, use it without asking the user to re-enter the token.
- If the user does not have an API TOKEN, tell them they can register or log in at [Dataify](https://dashboard.dataify.com/login?utm_source=skill) to get one.
- If the user wants to save it, give the appropriate command for their shell and ask them to run it; do not silently persist tokens without confirmation.
- Do not call the Builder endpoint without a token.

Autonomous Decision Making

Medium
Category
Excessive Agency
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.

Content

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

md
Use `DATAIFY_API_TOKEN` as the long-term saved token name.

- If `DATAIFY_API_TOKEN` is saved locally, use it without asking the user to re-enter the token.
- If the user does not have an API TOKEN, tell them they can register or log in at [Dataify](https://dashboard.dataify.com/login?utm_source=skill) to get one.
- If the user wants to save it, give the appropriate command for their shell and ask them to run it; do not silently persist tokens without confirmation.
- Do not call the Builder endpoint without a token.

Autonomous Decision Making

Medium
Category
Excessive Agency
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.

Content

Scanner excerpt · SKILL.zh-CN.md (reported line 160)May include surrounding context.

md
Use `DATAIFY_API_TOKEN` as the long-term saved token name.

- If `DATAIFY_API_TOKEN` is saved locally, use it without asking the user to re-enter the token.
- If the user does not have an API TOKEN, tell them they can register or log in at [Dataify](https://dashboard.dataify.com/login?utm_source=skill) to get one.
- If the user wants to save it, give the appropriate command for their shell and ask them to run it; do not silently persist tokens without confirmation.
- Do not call the Builder endpoint without a token.

Autonomous Decision Making

Medium
Category
Excessive Agency
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.

Content

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

md
- If `DATAIFY_API_TOKEN` is saved locally, use it without asking the user to re-enter the token.
- If the user does not have an API TOKEN, tell them they can register or log in at [Dataify](https://dashboard.dataify.com/login?utm_source=skill) to get one.
- If the user wants to save it, give the appropriate command for their shell and ask them to run it; do not silently persist tokens without confirmation.
- Do not call the Builder endpoint without a token.
- Always call it `API TOKEN` in user-facing instructions. Prefer the environment variable name `DATAIFY_API_TOKEN` for saved local use.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% 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.

Content

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

md
## Account CTA policy

- Show a prominent Dataify account CTA only when the API token is missing, rejected/invalid, or the account has insufficient credits.
- For a missing token, offer https://dashboard.dataify.com/login?utm_source=skill and state: New accounts receive 50 free credits. Never ask the user to paste the token into chat.
- Detect the current operating system and shell. Show only the matching session-scoped setup command first (`export` for macOS/Linux shells, `$env:` for Windows PowerShell, or `set` for Windows Command Prompt). Show other platforms or persistent setup only when detection is ambiguous or the user asks.
- After the user says the token is configured, verify only whether `DATAIFY_API_TOKEN` is present; never print its value. If verification succeeds, continue the original task without asking the user to repeat it.
- Explain that persistent shell changes may require a new terminal or restarting the agent application. Do not recommend a project `.env` unless the execution path explicitly loads it, and ensure `.env` is ignored by version control.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% 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.

Content

Scanner excerpt · SKILL.zh-CN.md (reported line 158)May include surrounding context.

md
## Account CTA policy

- Show a prominent Dataify account CTA only when the API token is missing, rejected/invalid, or the account has insufficient credits.
- For a missing token, offer https://dashboard.dataify.com/login?utm_source=skill and state: New accounts receive 50 free credits. Never ask the user to paste the token into chat.
- Detect the current operating system and shell. Show only the matching session-scoped setup command first (`export` for macOS/Linux shells, `$env:` for Windows PowerShell, or `set` for Windows Command Prompt). Show other platforms or persistent setup only when detection is ambiguous or the user asks.
- After the user says the token is configured, verify only whether `DATAIFY_API_TOKEN` is present; never print its value. If verification succeeds, continue the original task without asking the user to repeat it.
- Explain that persistent shell changes may require a new terminal or restarting the agent application. Do not recommend a project `.env` unless the execution path explicitly loads it, and ensure `.env` is ignored by version control.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

L158 says 'Never ask the user to paste the token into chat', but earlier sections explicitly describe using a token 'provided in the request' and instruct the skill to ask the user to input the API TOKEN when none is available (L014, L017, L043, L125). These instructions are in direct tension about the intended credential-handling behavior, creating an intent/documentation contradiction.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill enables allow_implicit_invocation without any visible trigger constraints, exclusions, or user-confirmation requirements. That makes it easier for the agent to invoke external data collection based on loosely related user requests, which can cause unintended third-party access, over-collection, or policy bypass if the model infers use of the tool too broadly.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest limits the skill to collecting comments from a known Instagram post URL and explicitly says not to use it for Reel details. However, the bundled example URL is a Reel URL at L022, and the validator at L044-L045 only checks for the Instagram domain prefix, so Reel URLs are accepted and submitted as valid targets.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The help text and argument descriptions present the capability as operating on Instagram post URLs, but the built-in example shown to users is a Reel URL. This actively conflicts with the documented intent and can direct users to use the skill in a way the manifest says not to.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

This file is primarily written in Chinese, but the 'Account CTA policy' section switches to English imperative instructions without indicating that English is optional or user-selected. That creates a natural-language locale inconsistency and may force a specific language policy in user-facing behavior.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.