Back to skill

Security audit

Dataify Yandex Search

Security checks for vulnerabilities and agentic risk

Overview

This skill mostly does what it says, but it includes an under-scoped raw API override that can bypass the advertised Yandex-only search behavior.

Review this before installing if you use a Dataify token with spending limits. The normal Yandex search flow is disclosed, but the raw override option should be restricted or removed so the skill cannot send broader-than-expected Dataify API requests.

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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
Findings (15)

Tainted flow: 'request' from os.environ.get (line 273, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
)

    try:
        with urllib.request.urlopen(request) as response:
            sys.stdout.buffer.write(response.read())
    except urllib.error.HTTPError as exc:
        sys.stdout.buffer.write(exc.read())
Confidence
90% confidence
Finding
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Lp3

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding
Without declared permissions the skill's intent is opaque and cannot be validated.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
L023 instructs the agent to return script stdout directly and explicitly forbids parsing, summarizing, filtering, or reformatting the response. Later, L100-L103 says the default behavior is to return a compact user-facing result and to provide raw JSON/HTML only when explicitly requested. These directives are in direct tension and describe materially different behavior for the same skill.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
L024 explicitly says the API response must be returned directly and not parsed, summarized, translated, filtered, reformatted, or otherwise processed. Later, L098-L100 instruct the opposite behavior: return streamlined relevant titles/links by default and only return raw JSON/HTML when explicitly requested. These instructions actively contradict each other about whether output should be transformed.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The manifest describes a skill for running a Yandex web search, and the file mostly documents a fixed set of Yandex-related parameters. However, the `--params-json` option explicitly accepts raw API field overrides, which are merged into the request body without any allowlist, enabling callers to supply arbitrary Dataify API parameters not justified by the stated purpose of a Yandex-only search skill.

Natural-Language Policy Violations

Medium
Confidence
87% confidence
Finding
The document specifies `lang: en` as the default when `yandex_domain` is `yandex.com`, which imposes a language choice on users by default. Under the policy, locale or language constraints should be user-selected or clearly justified; no opt-in or justification is provided here.

Vague Triggers

Medium
Confidence
95% confidence
Finding
L003 写道“当用户想搜索 Yandex 时,使用此 skill”,这是一个高层意图描述,而不是边界清晰的触发条件。它没有给出具体触发短语、适用范围或排除条件,容易把大量普通搜索请求都模糊地归入该 skill。

Natural-Language Policy Violations

Medium
Confidence
86% confidence
Finding
L047 规定当 `yandex_domain` 为 `yandex.com` 时 `lang` 默认设为 `en`,这会在未获得用户明确选择的情况下施加特定语言偏好。文档中未说明这是用户可选项,也未给出必须使用英语的合规或地区性理由。

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
Line L25 instructs that the field table must use Chinese headers (`参数名`, `当前值`, `默认值`, `说明`) for every API call. This is a natural-language policy issue because it enforces a specific language regardless of user preference and does not offer any language choice or opt-in.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The natural-language descriptions for nearly all parameters are written only in Chinese, while the script itself otherwise uses English CLI help and behavior. This creates a locale/language constraint in the skill content without offering user choice or explaining that the skill is intended for a Chinese-only audience.

Env Variable Harvesting

High
Category
Data Exfiltration
Content
print(preview_table(body))
        return 0

    token = args.token or os.environ.get("DATAIFY_API_TOKEN", "")
    if not token.strip():
        print(
            "Missing Dataify API token. Please provide a token or register at https://dashboard.dataify.com/login?utm_source=skill. New accounts receive 50 free credits.",
Confidence
70% confidence
Finding
Code accesses environment variables that may contain secrets (API keys, tokens). This is a common pattern for credential theft.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
- 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.
- For an invalid token, direct the user to API-key management without implying that a new registration is required. For insufficient credits, direct the user to balance or recharge management.
- During normal submission, processing, and successful completion, do not promote registration or the Dashboard. Never expose the token or include it in CTA attribution parameters.
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
## 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.
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.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
- 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.
- For an invalid token, direct the user to API-key management without implying that a new registration is required. For insufficient credits, direct the user to balance or recharge management.
- During normal submission, processing, and successful completion, do not promote registration or the Dashboard. Never expose the token or include it in CTA attribution parameters.
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
## 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.
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.

Static analysis

No suspicious patterns detected.