T07 · Tool Hijacking and Spoofing
- Location
scripts/indeed_job_listings.py:16- Finding
Untrusted External Module Loading Enables Local Tool Hijacking
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill’s Dataify/Indeed function is coherent, but it needs review because it handles API tokens in risky ways and loads unreviewed sibling code at runtime.
Review before installing. Use this only for explicit Indeed job URLs, avoid passing the token with --token, prefer a session-scoped environment variable or credential manager, and make sure the sibling dataify-task-operations code is trusted before running result monitoring. If you already stored the token in a shell profile from the Chinese instructions, remove it and rotate the token.
scripts/indeed_job_listings.py:16Untrusted External Module Loading Enables Local Tool Hijacking
scripts/indeed_job_listings.py:47API Token Can Be Exposed Through Command-Line Arguments
SKILL.zh-CN.md:25Localized Documentation Recommends Persistent Plaintext Credential Storage
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
},
)
try:
with urllib.request.urlopen(request, timeout=timeout) as response:
return response.read().decode("utf-8", errors="replace")
except urllib.error.HTTPError as exc:
body = exc.read().decode("utf-8", errors="replace")
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
DATAIFY_API_TOKEN)。The skill instructs the agent to use local Python, inspect environment setup, and submit network requests, but it does not declare any explicit tool scope or permission boundaries. This increases the risk of over-broad agent execution because the runtime may allow environment and network access without a least-privilege declaration, making misuse or unintended data exposure more likely.
The trigger language is broad enough to match generic requests for job listings, postings, or job information, even though the skill is supposed to be limited to known Indeed job URLs. That can cause the skill to activate outside its intended scope, leading the agent to make external requests or guide the user into a workflow that is inappropriate for the original request.
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.
## 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.
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.
## 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.
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.
- 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.
The trigger description is overly broad and includes many generic scrape/fetch/extract phrases, increasing the chance that the skill activates in unintended contexts. In this skill, accidental activation matters because the workflow can lead to external task creation and token-handling flows, expanding the blast radius of a false trigger.
The skill’s documented workflow goes beyond extracting data from a provided Indeed URL and instructs the agent to create a remote Dataify scraping task. That expands the capability boundary from local parameter handling into external task submission, which can trigger unintended third-party actions and data processing if the skill is mis-invoked or over-broadly triggered.
The core workflow explicitly says that after successful submission the skill should tell the user to go to Dataify to view or manage results. Later, the Account CTA policy says that during normal submission, processing, and successful completion, the skill should not promote registration or the Dashboard. These instructions conflict directly about post-success behavior.
The instruction to continue the original task automatically after detecting a configured token reduces user awareness around when an external action may be taken. In a skill that can submit remote scraping jobs, autonomous continuation can cause unintended third-party requests or credit consumption without a fresh, contextual confirmation.
- 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.
The OpenAI-facing UI text says the skill can 'Collect Indeed Job Listings data and return results' without preserving the stricter manifest constraint that it should only be used for a known Indeed job URL and not for broad discovery or company profiles. This mismatch can cause an agent to invoke the skill in broader contexts than intended, potentially leading to overcollection, policy bypass, or misuse of the underlying connector outside its safe operating scope.
The stated purpose is narrowly about collecting job-posting data from an Indeed URL, but the file adds account-token acquisition, environment-variable lookup, and token verification flows. While token use may support the backend service, the persistent credential-management guidance is a capability not justified by the narrow user-facing purpose alone.
No suspicious patterns detected.