Back to skill

Security audit

Dataify Facebook Comment By URL

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its stated Dataify Facebook-comment collection purpose, but it has review-worthy risks around automatic external submission, loose target validation, and loading unaudited code that receives the API token.

Review before installing. This skill sends Facebook URLs and collection settings to Dataify and uses a Dataify API token that may be saved in your environment. Only use it when you intend to submit a Dataify collection job, keep the token out of chat/logs, and be aware that its helper script imports monitoring code from an adjacent unreviewed directory that could see the token.

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

Error
Location
scripts/submit_dataify_facebook_comment_by_url.py:11
Finding

Untrusted Out-of-Project Python Module Loading

Content
View full analysis

Vulnerability Details

File Location: scripts/submit_dataify_facebook_comment_by_url.py, lines 11–14 and 217
Vulnerability Type: Unsafe dependency loading from a predictable external directory
Risk Level: High

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 later receives the API credential:

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

Technical Analysis

The script constructs a predictable path outside the audited project, prepends it to sys.path, and imports task_runtime from that location. The external module is not included in the project, version-pinned, integrity-checked, or validated to originate from a trusted installation.

Python executes module-level code during import. Consequently, a malicious task_runtime.py placed in the expected sibling directory can execute arbitrary code as soon as this script starts. The imported complete_task function is also passed api_token, directly exposing the Dataify bearer credential to the unverified dependency.

This behavior exceeds the minimum privilege needed to submit the collection job because it grants an unaudited external module code-execution capability and access to the API token.

Attack Path

  1. An attacker obtains write access to the predictable sibling path ../../dataify-task-operations/scripts/ relative to this script.
  2. The attacker creates or replaces task_runtime.py with malicious Python code.
  3. A user invokes the legitimate submission script according to the documented workflow.
  4. The script prepends the attacker-influenced directory to sys.path.
  5. Python imports the malicious module and executes its top-level code with the privileges of the user running the Skill. 6 ...[truncated 941 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove the runtime sys.path modification and avoid loading modules from predictable directories outside the project.
  2. Package task_runtime as a normal, authenticated dependency with an exact version and integrity hash, or include the required monitoring implementation directly in the audited Skill package.
  3. Install dependencies into an isolated virtual environment from a trusted, authenticated package source.
  4. If an external module is unavoidable, resolve it from an administrator-controlled location and verify its canonical path and cryptographic digest before importing it.
  5. Restrict directory permissions so untrusted users cannot create or replace dependency files.
  6. Minimize credential exposure by keeping Dataify API calls in audited code. Do not pass the bearer token to components whose provenance and integrity have not been verified.
  7. Add a runtime assertion using the imported module's resolved file path to ensure it originates from the expected trusted package location; treat this as defense in depth rather than a substitute for secure dependency packaging.
  8. Add automated tests that fail if imports resolve outside the approved environment or project package.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
Findings (16)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding

The skill explicitly instructs use of environment variables and outbound network access to a third-party API, but it declares no tool/permission scope. That creates an authorization gap where an agent may access local secrets and external endpoints without an explicit least-privilege contract, increasing the chance of unintended token use or data exfiltration.

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 198)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 192)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.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger description is broad enough to match generic requests about Facebook comments or scraping, which can cause the skill to activate when the user did not intend to send data to this third-party workflow. Unexpected invocation can result in unintended data transfer, token prompts, or external task submission under the wrong context.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill tells the agent to submit Facebook post URLs and collection parameters to Dataify but does not clearly warn the user that their input will be transmitted to a third-party service. This weakens informed consent and can expose user-supplied URLs, task metadata, and scraping intent to an external processor unexpectedly.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The document encourages long-term storage of an API token in environment variables without warning about local credential exposure risks, shared-shell visibility, persistence on multi-user systems, or the need to avoid logging the secret. This can lead users to store sensitive credentials insecurely or more broadly than necessary.

Content

No source excerpt is available for this finding.

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 196)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 190)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
95% confidence
Finding

L190 says 'Never ask the user to paste the token into chat,' but earlier guidance explicitly says to ask the user to provide the API TOKEN when none is available and to use a token supplied in the current request (L014, L017, L044, L151). This is an active documentation contradiction about the intended credential-handling flow, not merely missing detail.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill enables implicit invocation with no stated trigger constraints, exclusion rules, or user-confirmation requirements. That increases the chance the agent will automatically call this skill based on loose intent matching, which can cause unintended collection of Facebook comment data from URLs supplied in conversation or prompt-injected content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

On L029, the option list includes Chinese labels such as "最相关", "由新到旧", and "所有评论" directly in the skill. This imposes a specific language/locale in the interface behavior without user opt-in, which matches the language/locale policy violation criteria.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill description promises collection only from known Facebook post URLs and explicitly says not to use it for post bodies, personal profiles, or events, but the validation only checks that the URL begins with https://www.facebook.com/. That mismatch can allow users to submit unsupported or broader Facebook URLs, causing unintended scraping targets, policy violations, or collection of data outside the declared scope.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The comments_sort dropdown is presented with Chinese labels (最相关, 由新到旧, 所有评论) and the document does not offer an alternative locale or explicit user opt-in for Chinese. This is a natural-language locale policy concern because the skill imposes a specific language in user-facing content rather than allowing choice.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

“在面向用户的说明中始终称其为 API TOKEN”位于一份中文技能文档中,整体交互措辞和固定文案均默认中文,未体现可根据用户语言偏好切换或提供选择。按照语言/区域策略,若技能对语言输出形成约束,应提供用户选择或明确的合理限定。

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.