Back to skill

Security audit

Double search(Tavily + Kimi)

Security checks for vulnerabilities and agentic risk

Overview

This is a straightforward double-search skill, but users should understand that searches and API keys involve external providers and the installer prints partial key prefixes.

Install only if you are comfortable sending search queries to Tavily and optionally Moonshot/Kimi. Do not include secrets, private customer data, or confidential business text in searches. Prefer setting API keys in a controlled environment, avoid running the installer where logs are shared, and consider pinning dependencies before production use.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (2)

T08 · Insecure Dependencies

Warning
Location
install.sh:39
Finding

Unpinned Third-Party Dependencies Installed from the Default Package Index

Content
View full analysis
/dev/null; then echo -e "${GREEN}✅ aiohttp 已安装${NC}" else echo -e "${YELLOW}⚠️ aiohttp 未安装,正在安装...${NC}" pip3 install aiohttp python-dotenv --quiet echo -e "${GREEN}✅ aiohttp 安装完成${NC}" fi if python3 -c "import dotenv" 2>/dev/null; then echo -e "${GREEN}✅ python-dotenv 已安装${NC}" else echo -e "${YELLOW}⚠️ python-dotenv 未安装,正在安装...${NC}" pip3 install python-dotenv --quiet echo -e "${GREEN}✅ python-dotenv 安装完成${NC}" fi ``` The skill metadata also declares mutable package requirements: ```yaml install: - id: pip kind: pip packages: ["aiohttp", "python-dotenv"] label: "安装Python依赖 (pip)" ``` ### Technical Analysis The installer requests `aiohttp` and `python-dotenv` without version constraints or package hashes. Consequently, the code installed depends on whichever package versions and transitive dependencies the configured package index resolves at installation time. Python package installation may process wheels, source distributions, build-system dependencies, and package metadata. If a package release, transitive dependency, package index, or package maintainer account is compromised, the installer can retrieve and process code that was not part of the audited skill. The absence of a lock file and integrity hashes also prevents reproducible verification of the installed dependency set. The package names appear legitimate, and the audit found no evidence that the current project intentionally references a typosquatted or malicious package. The risk arises from mutable, unverifiable dependency resolution. ### Attack Path 1. An attacker compromises a dependency release, maintainer account, transitive dependency, or package distribution channel. 2. Th ...[truncated 1100 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
install.sh:63
Finding

API Key Prefixes Exposed in Terminal and Automation Logs

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • 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 (17)

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · install.sh (reported line 82)May include surrounding context.

sh
echo ""

# 4. 创建.env文件(如果不存在)
if [ ! -f "$SCRIPT_DIR/.env" ]; then
    echo "📝 创建.env配置文件..."
    cat > "$SCRIPT_DIR/.env" << EOF
# Double Search Skill 配置文件

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · install.sh (reported line 84)May include surrounding context.

sh
echo ""

# 4. 创建.env文件(如果不存在)
if [ ! -f "$SCRIPT_DIR/.env" ]; then
    echo "📝 创建.env配置文件..."
    cat > "$SCRIPT_DIR/.env" << EOF
# Double Search Skill 配置文件

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · .env (reported line 9)May include surrounding context.

text
TAVILY_API_KEY=

# Kimi Search API Key (可选)
# 获取地址: https://api.moonshot.cn/
KIMI_API_KEY=

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The README promotes sending user queries to Tavily and Kimi in parallel but does not disclose that prompts and possibly sensitive user data will be transmitted to third-party services. In an agent skill context, users may reasonably assume local processing unless clearly warned, creating a privacy and data-handling risk if secrets, proprietary text, or personal information are searched externally.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill declares access to environment variables and uses external networked services, but it does not define an explicit tool scope such as permissions or allowed-tools. In an agent setting, missing scope boundaries can lead to broader-than-expected capability exposure and makes it harder for users or the platform to reason about what the skill is permitted to access.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation encourages users to submit arbitrary search queries to Tavily and Kimi without warning that those queries are transmitted to third-party services. Users may unknowingly send sensitive prompts, proprietary data, credentials, or personal information off-platform, creating privacy and compliance risks.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

User queries are sent to Tavily, a third-party external service, without any visible disclosure, consent flow, or data-handling notice in the skill interface. If users include sensitive prompts, credentials, personal data, or internal business information, that data may be exposed outside the local trust boundary.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

This code transmits user-supplied search queries to an external Tavily endpoint. In the context of an agent skill, external transmission expands the attack surface and privacy risk because prompts may contain sensitive operational or personal information.

Content

Scanner excerpt · __init__.py (reported line 58)May include surrounding context.

python
async with aiohttp.ClientSession() as session:
                async with session.get(
                    "https://api.tavily.com/search",
                    headers=headers,
                    params=params
                ) as response:

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The Kimi component is presented as a search engine, but it sends the user query to a chat-completions endpoint and converts generated model text into 'search results'. This can mislead downstream users or agents into trusting hallucinated or ungrounded content as factual search output, which is a security-relevant integrity issue when the results may influence decisions or tool use.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill posts raw user queries to the Moonshot/Kimi API without explicitly informing the user that their input leaves the local environment. This creates privacy and confidentiality risk, especially if users assume the skill is a local search abstraction and submit sensitive data.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This code sends user input to the external Moonshot/Kimi chat-completions API. Because the endpoint is not merely retrieval but generative processing, the confidentiality and integrity risks are higher: sensitive data may be exposed externally and the returned content may be mistaken for verified search results.

Content

Scanner excerpt · __init__.py (reported line 128)May include surrounding context.

python
async with aiohttp.ClientSession() as session:
                async with session.post(
                    "https://api.moonshot.cn/v1/chat/completions",
                    headers=headers,
                    json=data
                ) as response:

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring and all user-facing strings are written exclusively in Chinese, presenting the skill as operating in a fixed language. Under the policy, language constraints should either offer user choice or be clearly justified; this file provides neither.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script's prompts, status messages, and usage guidance are presented in Chinese throughout, which imposes a specific language on all users. There is no opt-in, alternate locale support, or justification that this skill is intended only for a Chinese-language environment.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script reads API keys from environment variables and prints their prefixes to the terminal. Even partial credential disclosure increases exposure through shell history capture, terminal logging, screenshots, CI logs, or shared sessions, and there is no warning about handling sensitive output.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · install.sh (reported line 93)May include surrounding context.

sh
TAVILY_API_KEY=

# Kimi Search API Key (可选)
# 获取地址: https://api.moonshot.cn/
KIMI_API_KEY=
EOF
    echo -e "${GREEN}✅ .env文件创建成功${NC}"

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

Most of the skill description and instructions are presented only in Chinese, which effectively imposes a language constraint on users. There is no indication that the skill is region-specific or that an alternative language option is available.

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 uses Chinese in the description and examples, which may effectively force a specific language/locale for users without any opt-in or explanation. Under the policy, locale or language constraints should either be optional or explicitly justified as region-specific.

Content

No source excerpt is available for this finding.