T09 · Insecure Skill Coding Practices
- Location
scripts/search.py:13- Finding
Hard-Coded Parallel.ai API Credential
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a real Parallel.ai research helper, but it embeds and silently uses a plaintext API key while sending user queries to a third-party service.
Review this skill before installing. The publisher should remove and revoke the embedded API key, require users to provide their own PARALLEL_API_KEY, narrow the triggers, disclose that queries are sent to Parallel.ai, and pin the Python dependency. Do not submit secrets, private prompts, or proprietary data through it unless you are comfortable sending that data to Parallel.ai.
scripts/search.py:13Hard-Coded Parallel.ai API Credential
scripts/parallel.sh:18JSON Injection Through Unescaped Research Input
SKILL.md:19Unpinned Python Dependency Installation
The description promises a web search/research skill optimized for rich excerpts and citations, but the code is a general-purpose wrapper for Parallel.ai's task execution endpoint (/tasks/runs). It submits freeform prompts to a base processor and returns whatever output the task API provides. There is no explicit use of a search-specific API, no handling of search results, citations, or excerpt formatting, and no mechanism ensuring high-accuracy search behavior. The included company and person commands are consistent with broad research, but the primary implementation is generic task submission rather than a dedicated web-search integration. Additionally, the status command is an undeclared operational capability, and the hardcoded API key indicates access to an external service not reflected in the declared permissions. Overall, the declared description overstates and mischaracterizes the implemented behavior.
The script hardcodes a usable default API key and automatically uses it when no environment variable is set. This creates unauthorized authenticated access, enables silent use of a third-party account, and exposes the embedded credential to anyone who can read or copy the skill.
The skill advertises executable usage via Python and shell commands but does not declare any explicit tool scope such as allowed tools or permissions. In an agent environment, this can lead to over-broad execution authority or unclear enforcement boundaries, making it easier for the skill to invoke shell/environment capabilities beyond what users expect.
The trigger phrase "deep search" is ambiguous and can match ordinary language rather than a deliberate request to use this specific skill. In agent systems, ambiguous triggers increase the chance of unintended external lookups or shell execution, though the risk is somewhat lower than the single-word trigger "research."
The trigger phrase "research" is extremely broad and likely to match many unrelated user requests, causing accidental activation of this skill. Unintended invocation is risky because the skill can drive shell-based code paths and external API usage, potentially leaking queries, consuming paid resources, or bypassing more appropriate tools.
The script uses credentials for outbound requests without warning the user whether they come from the environment or an embedded fallback. This is risky because users may unknowingly trigger authenticated external actions or consume another party's account resources.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
set -e
API_KEY="${PARALLEL_API_KEY:-y2s_m4er5i6-5qCikOLUtmnkvOYRU24eDphq_jg1}"
BASE_URL="https://api.parallel.ai/v1"
MAX_WAIT="${PARALLEL_MAX_WAIT:-120}"
# Submit task and poll for result
This code transmits user-controlled input to an external API endpoint over the network. While external transmission is core to the skill's research function, it is still security-relevant because agent users may pass sensitive or proprietary data that leaves the local trust boundary.
local processor="${2:-base}"
# Submit
local response=$(curl -s -X POST "$BASE_URL/tasks/runs" \
-H "x-api-key: $API_KEY" \
-H "Content-Type: application/json" \
-d "{\"processor\": \"$processor\", \"input\": \"$input\"}")
User-supplied queries and research targets are sent directly to an external service, but the script provides no notice or consent mechanism before transmitting potentially sensitive input. In an agent setting, this increases the risk of inadvertent exfiltration of private prompts, names, or internal research topics.
The script sends the user's query directly to the external Parallel.ai service, but it does not provide any warning, consent prompt, or output disclosure that the query leaves the local environment. In an agent-skill context, queries may contain sensitive user data, internal prompts, or secrets, so silent transmission to a third party creates a real privacy and data-handling risk.
No suspicious patterns detected.