T09 · Insecure Skill Coding Practices
- Location
scripts/wait_for_task.py:35- Finding
API Token Transmitted in URL Query Strings
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is presented as a LinkedIn company-URL lookup tool, but its instructions and catalog allow broader Dataify scraping requests with weak validation and persistent token guidance.
Review this before installing. Use it only with a Dataify token you are willing to expose to this workflow, prefer session-scoped token setup over shell-profile storage, and avoid running it unless the package is narrowed to the single LinkedIn company URL tool with real URL and parameter validation.
scripts/wait_for_task.py:35API Token Transmitted in URL Query Strings
scripts/catalog_builder.py:53Empty Parameter Schemas Allow Unvalidated Builder Payloads
SKILL.md:45Documentation Encourages Plaintext Persistent API Token Storage
The lead workflow explicitly searches for and accepts Crunchbase organization URLs even though the skill description says not to use Crunchbase URLs. This is a direct contradiction of the declared boundary and enables collection from prohibited sources, making the skill more dangerous because the hidden behavior defeats user expectations and review assumptions.
The skill can monitor arbitrary Dataify tasks by task ID and download final JSON results without enforcing that those tasks correspond to LinkedIn company collection. In context, this broadens the skill into a generic result-retrieval interface for external jobs, which can expose unrelated data flows under a misleadingly narrow label.
The skill can monitor arbitrary Dataify tasks by task ID and download final JSON results without enforcing that those tasks correspond to LinkedIn company collection. In context, this broadens the skill into a generic result-retrieval interface for external jobs, which can expose unrelated data flows under a misleadingly narrow label.
The skill can monitor arbitrary Dataify tasks by task ID and download final JSON results without enforcing that those tasks correspond to LinkedIn company collection. In context, this broadens the skill into a generic result-retrieval interface for external jobs, which can expose unrelated data flows under a misleadingly narrow label.
The skill can monitor arbitrary Dataify tasks by task ID and download final JSON results without enforcing that those tasks correspond to LinkedIn company collection. In context, this broadens the skill into a generic result-retrieval interface for external jobs, which can expose unrelated data flows under a misleadingly narrow label.
The skill can monitor arbitrary Dataify tasks by task ID and download final JSON results without enforcing that those tasks correspond to LinkedIn company collection. In context, this broadens the skill into a generic result-retrieval interface for external jobs, which can expose unrelated data flows under a misleadingly narrow label.
The skill can monitor arbitrary Dataify tasks by task ID and download final JSON results without enforcing that those tasks correspond to LinkedIn company collection. In context, this broadens the skill into a generic result-retrieval interface for external jobs, which can expose unrelated data flows under a misleadingly narrow label.
The skill can monitor arbitrary Dataify tasks by task ID and download final JSON results without enforcing that those tasks correspond to LinkedIn company collection. In context, this broadens the skill into a generic result-retrieval interface for external jobs, which can expose unrelated data flows under a misleadingly narrow label.
The workflow instructs the user to choose among unrelated job-listing and keyword tools, directly contradicting the skill's stated company-by-URL-only purpose. This is a concrete prompt-level scope expansion that could be used to collect different data types and targets than the user or platform expects.
The skill is named and described as collecting LinkedIn company information by company URL, but the workflow broadens scope to job-listing URLs, job URLs, and keyword scraping. This scope expansion can cause the agent to perform data collection outside the user's expected task boundaries, increasing the chance of overcollection, policy bypass, or unintended scraping of different resource types.
YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).
量,而不是只在当前终端临时设置。
Windows PowerShell,当前用户永久设置:
[Environment]::SetEnvironmentVariable("DATAIFY_API_TOKEN", "your_token_here", "User")
然后重新打开 PowerShell。如果当前会话也要立即生效,再执行:
$env:DATAIFY_API_TOKEN = "your_token_here"
macOS 或 Linux,bash 永久设置:
echo 'export DATAIFY_API_TOKEN="your_token_here"' >> ~/.bashrc
source ~/.bashrc
macOS 或 Linux,zsh 永久设置:
echo 'export DATAIFY_API_TOKEN="your_token_here"' >> ~/.zshrc
source ~/.zshrc
Python:
python scripts/build-dataify-request.py --tool-sign <selected_tool_sign> --values-file values.json
PowerShell:
& ".\scripts\build-dataify-request.ps1" -ToolSign "<selected_tool_sign>" -ValuesFile ".\values.json"
values.json 可以是单个对象,也可以是对象数组。
最终 curl 命令应为
YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).
量,而不是只在当前终端临时设置。
Windows PowerShell,当前用户永久设置:
[Environment]::SetEnvironmentVariable("DATAIFY_API_TOKEN", "your_token_here", "User")
然后重新打开 PowerShell。如果当前会话也要立即生效,再执行:
$env:DATAIFY_API_TOKEN = "your_token_here"
macOS 或 Linux,bash 永久设置:
echo 'export DATAIFY_API_TOKEN="your_token_here"' >> ~/.bashrc
source ~/.bashrc
macOS 或 Linux,zsh 永久设置:
echo 'export DATAIFY_API_TOKEN="your_token_here"' >> ~/.zshrc
source ~/.zshrc
Python:
python scripts/build-dataify-request.py --tool-sign <selected_tool_sign> --values-file values.json
PowerShell:
& ".\scripts\build-dataify-request.ps1" -ToolSign "<selected_tool_sign>" -ValuesFile ".\values.json"
values.json 可以是单个对象,也可以是对象数组。
最终 curl 命令应为
The skill is described as collecting LinkedIn company information from known company URLs only, but the tool metadata exposes additional job-listing, job-detail, and keyword-based job scraping capabilities. This creates a scope mismatch that can enable unauthorized or unexpected data collection paths beyond the declared purpose, increasing the risk of misuse and policy evasion.
Job-search and job-detail collection are not justified by a skill intended solely for company information lookup by URL, so their presence represents excess capability. Excess capabilities are dangerous because they broaden what an agent can retrieve, potentially enabling scraping of unrelated datasets and violating least-privilege expectations for both users and platform reviewers.
The file is a shared multi-purpose workflow framework supporting price intelligence, review intelligence, lead intelligence, and brand monitoring, which materially exceeds the declared scope of a skill that should only collect LinkedIn company information from known URLs. This scope expansion increases the chance of unauthorized collection, policy bypass, and misuse of the skill for unrelated scraping tasks.
The presence of specialized support for Amazon comment scraping and Google Maps review scraping is unjustified in a skill meant for LinkedIn company information collection. These code paths indicate latent off-purpose scraping capability, increasing the likelihood of unauthorized data collection and deceptive scope presentation.
The workflow contains logic for review, pricing, and brand-monitoring searches that are unrelated to collecting LinkedIn company information by URL. Embedding these unrelated capabilities creates hidden functionality that can be repurposed for broader surveillance or scraping than users and reviewers would expect.
The code discovers and schedules additional detail URLs from search results instead of limiting processing to user-provided known company URLs. This allows the workflow to broaden data collection autonomously, which violates the advertised operating model and can pull in unintended domains or entities.
The skill declares no explicit tool/permission scope while instructing use of environment inspection, file reads, shell commands, and network access. In an agent environment, missing scope boundaries makes it easier for the skill to invoke more capability than its narrow LinkedIn-company purpose implies, increasing the blast radius of misuse or prompt-instruction abuse.
The workflow instructs the agent to ask the user to choose from a Chinese list of tools, which imposes a specific language on the interaction. There is no user choice, opt-in, or justification for requiring Chinese labels in this step.
The skill is explicitly designed to transmit collected parameters and results to an external service at scraperapi.dataify.com. External transmission is expected for this integration, but it remains security-relevant because any user-supplied URLs and derived data leave the local trust boundary and the skill description understates the breadth of what may be sent when combined with generic tool selection.
13. Set `spider_name` to `linkedin.com`.
14. Set `spider_id` to the selected tool's `tool_sign`.
15. Always include `spider_errors=true` and `file_name={{TasksID}}`.
16. Return a curl command for `https://scraperapi.dataify.com/builder`.
## Set DATAIFY_API_TOKEN
The reference section states the local catalog covers every tool in the scraper family, signaling that this skill can be driven as a family-wide wrapper rather than a single-purpose LinkedIn company collector. In an agent setting, such broad catalogs increase the chance of unauthorized scope drift and accidental misuse.
The skill explicitly instructs the agent to prepare and send data to an external service endpoint using an API token. External transmission is expected for this integration, but it is still security-relevant because it can move user-supplied LinkedIn URLs and derived scraping parameters to a third-party service, with possible privacy, compliance, and data-handling implications.
---
name: "dataify-linkedin-company-information-by-url"
description: "为 linkedin.com 上以 linkedin_company_information_by-url 为根的 scraper 系列准备 Dataify builder 请求。当需要处理成功的 Dataify scraper detail 条目 linkedin_company_information_by-url、让用户选择可用工具、读取已保存的 getToolParams 选项,并使用 DATAIFY_API_TOKEN 生成 scraperapi.dataify.com/builder curl 请求时,使用此 skill。"
---
# Dataify Builder Skill 中文版
The front matter markets a narrowly scoped company-information skill, but the body instructs the agent to offer a broader set of tools. This inconsistency creates a trust boundary problem: orchestration systems or users may authorize the skill based on the manifest while the content drives broader actions at runtime.
The instructions explicitly require the user to choose from a Chinese tool list and the document is framed as a Chinese-only workflow, but there is no opt-in or alternative locale path. This creates a language/locale policy issue because the skill imposes a specific language on the interaction without documented user choice or region-specific justification.
Detected: suspicious.exposed_secret_literal