Back to skill

Security audit

Dataify eBay Products

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its Dataify eBay collection purpose, but its helper script imports unaudited code from a sibling directory and can pass that code the user's Dataify API token.

Review before installing. Use this only if you trust both this skill and the separate dataify-task-operations code it expects nearby. Prefer a session-scoped DATAIFY_API_TOKEN, avoid pasting tokens into chat, and verify the helper runtime source before running the script with a real Dataify account.

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_ebay_products.py:11
Finding

Untrusted Sibling-Directory Module Import Enables Arbitrary Code Execution and API Token Exposure

Content
View full analysis

Vulnerability Details

File Location: scripts/submit_dataify_ebay_products.py, lines 11–14 and 258–264
Vulnerability Type: Untrusted external module loading and supply-chain exposure
Risk Level: High

Complete 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 subsequently receives the API token:

python
if not args.no_wait:
    try:
        final_result = complete_task(task_id, api_token, args.wait_timeout)
    except RuntimeError as exc:
        print(str(exc), file=sys.stderr)
        return 1
    print(json.dumps(final_result, ensure_ascii=False, indent=2))

Technical Analysis

The script constructs a path outside the audited Skill package, prepends it to sys.path, and imports task_runtime from that location. The referenced module is not included in the audited project, is not version-pinned, and is not subject to any source or integrity verification.

Because the sibling directory is inserted at the beginning of Python's module search path, a task_runtime.py file placed there takes precedence over normally installed modules of the same name. Python executes top-level module code immediately during import. Consequently, malicious code can execute even when the user specifies --no-wait or before the Builder request is submitted.

When normal waiting behavior is used, the imported complete_task function is additionally passed api_token, which contains the value read from DATAIFY_API_TOKEN. The external component therefore receives a bearer credential with no enforced trust boundary or interface isolation.

Although asynchronous task monitoring is part of the Skill's declared functionality, dynamically trusting an unaudited si ...[truncated 2233 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove the runtime sys.path modification. Do not prepend a sibling directory outside the audited Skill package to Python's import path.
  2. Package the monitoring implementation with the Skill. Include task_runtime in a controlled package within the project and use an explicit relative or package import.
  3. Alternatively, use a pinned dependency. If monitoring must be shared, distribute it through a trusted package source with an exact version and cryptographic hash verification.
  4. Verify component integrity. Where an external runtime is unavoidable, resolve a canonical expected path and verify the module against a trusted digest or signed manifest before loading it.
  5. Fail closed. If the expected module is unavailable or fails integrity verification, terminate before reading or transmitting the API token.
  6. Reduce credential exposure. Avoid passing the bearer token to arbitrary helper code. Keep authenticated network operations in a small, audited component and expose only narrowly scoped results to other modules.
  7. Use scoped credentials where supported. Configure the Dataify token with only the permissions required to submit and monitor the relevant tasks, and rotate it after any suspected module-path compromise.
  8. Add security tests. Verify that a forged task_runtime.py in nearby or current working directories cannot be imported and that the resolved module path remains inside the approved package location.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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 (11)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill clearly instructs the agent to read a local environment variable and make authenticated network requests, but it declares no explicit tool scope or allowed-tools boundary. That mismatch weakens platform-level least-privilege controls and can let a skill access env/network capabilities without transparent review, increasing the chance of unintended token use or external 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 23)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 291)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 25)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 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 289)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.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The skill explicitly encourages long-term storage and reuse of a user API token across future runs via DATAIFY_API_TOKEN. Persistent credential retention increases the blast radius of local compromise, accidental reuse in the wrong context, or exposure through logs, shell history, or shared environments.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

The skill contains conflicting instructions about whether users should provide tokens directly in the interaction versus using preconfigured local environment variables. This ambiguity can lead users to disclose secrets in chat transcripts or to mishandle credentials, creating unnecessary exposure risk.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The account CTA section says 'Never ask the user to paste the token into chat,' but earlier workflow and token-handling instructions explicitly tell the skill to require the user to input the API token when it is missing. These instructions conflict about the intended authentication flow, creating a clear documentation-level divergence within the skill's stated behavior.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The file is a Chinese-language skill description, but the 'Account CTA policy' section is written entirely in English and prescribes exact user-facing wording. This creates a locale inconsistency that may cause the skill to force English output for part of the interaction without explicit user opt-in or a documented language-choice mechanism.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.