Back to skill

Security audit

You.com Web Search & Research API

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward You.com API integration guide with expected external API calls and no hidden persistence or destructive behavior.

Before installing, be aware that prompts, URLs, and selected page content sent through this skill will go to You.com/YDC APIs along with your API key. Prefer built-in HTTP clients or pinned dependencies in an isolated environment, and remove unused npm/Bun install permissions if your workflow does not need them.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:14
Finding

Unpinned Third-Party Package Installation and Excessive Package-Manager Permissions

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:14 and SKILL.md:223-234
Vulnerability Type: Supply-chain exposure and excessive installation privileges
Risk Level: Medium

Vulnerable Code

yaml
allowed-tools: Read Write Edit Bash(pip:install) Bash(npm:install) Bash(bun:add)
markdown
### Install

No SDK required — use your language's built-in HTTP client.

```bash
# TypeScript (Bun — built-in fetch, nothing to install)

# TypeScript (Node.js — built-in fetch in 18+, nothing to install)

# Python
pip install requests
# or: pip install httpx
text

### Technical Analysis

The Skill recommends installing `requests` or `httpx` without pinning versions or verifying package hashes. Package resolution therefore depends on mutable registry state and may introduce an unexpectedly compromised release or transitive dependency.

The declared functionality is direct API integration without an SDK. The TypeScript examples explicitly use built-in `fetch`, so the permissions to execute `npm install` and `bun add` are not needed by the documented workflow. Although the Python examples use third-party HTTP clients, equivalent standard-library functionality is available. Consequently, the package-install capabilities exceed the minimum privileges necessary for the Skill's declared purpose.

No evidence shows that the named packages are currently malicious, and this Skill does not retrieve and execute arbitrary remote scripts. The risk arises from unnecessarily enabling mutable third-party dependency installation.

### Attack Path

1. An attacker compromises a future release or transitive dependency of an unpinned package, or otherwise influences package resolution.
2. The Skill is invoked for Python API integration.
3. The agent follows `pip install requests` or `pip install httpx` without a version or hash constraint.
4. The package manager retrieves the registry-selected package and executes any applicable installation or import-time behavior wi
...[truncated 932 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove unused package-manager permissions:

    yaml
    allowed-tools: Read Write Edit
    

    At minimum, remove Bash(npm:install) and Bash(bun:add), because the documented TypeScript implementations require no packages.

  2. Prefer Python's standard-library HTTP facilities so the Skill can meet its “no SDK required” objective without installation privileges.

  3. If a third-party Python client is necessary:

    • Pin an explicitly reviewed version.
    • Pin transitive dependencies through a lockfile.
    • Require hashes, such as with pip install --require-hashes -r requirements.txt.
    • Use an isolated virtual environment.
    • Require explicit user approval before installing packages.
    • Periodically scan locked dependencies for known vulnerabilities.
  4. Restrict installation commands to the exact reviewed package and arguments rather than granting general package-manager installation capabilities.

  5. Run dependency installation and generated applications with least privilege, a minimal environment, restricted filesystem access, and constrained outbound network access.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (11)

Autonomous Decision Making

Medium
Category
Excessive Agency
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.

Content

Scanner excerpt · SKILL.md (reported line 32)May include surrounding context.

md
You.com provides three APIs that serve different needs:

- **Research API** — Ask a complex question, get a synthesized Markdown answer with inline citations. The API autonomously runs multiple searches, reads pages, cross-references sources, and reasons over the results. One call replaces an entire RAG pipeline.
- **Search API** — Get raw web and news results for a query. You control what happens with the results — feed them into your own LLM, build a custom UI, or process them programmatically.
- **Contents API** — Extract full page content (HTML, Markdown, metadata) from specific URLs. Useful for deep-reading pages found via Search or for crawling known URLs.

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 · SKILL.md (reported line 266)May include surrounding context.

md
}

const research = async (input: string, effort = 'standard'): Promise<ResearchResponse> => {
  const resp = await fetch('https://api.you.com/v1/research', {
    method: 'POST',
    headers: {
      'X-API-Key': YDC_API_KEY,

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 · SKILL.md (reported line 266)May include surrounding context.

md
}

const research = async (input: string, effort = 'standard'): Promise<ResearchResponse> => {
  const resp = await fetch('https://api.you.com/v1/research', {
    method: 'POST',
    headers: {
      'X-API-Key': YDC_API_KEY,

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 · SKILL.md (reported line 305)May include surrounding context.

md
}

const research = async (input: string, effort = 'standard'): Promise<ResearchResponse> => {
  const resp = await fetch('https://api.you.com/v1/research', {
    method: 'POST',
    headers: {
      'X-API-Key': YDC_API_KEY,

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 · SKILL.md (reported line 304)May include surrounding context.

md
def research(query: str, effort: str = "standard") -> dict:
    resp = requests.post(
        "https://api.you.com/v1/research",
        headers={"X-API-Key": YDC_API_KEY, "Content-Type": "application/json"},
        json={"input": query, "research_effort": effort},

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 · SKILL.md (reported line 439)May include surrounding context.

md
def research(query: str, effort: str = "standard") -> dict:
    resp = requests.post(
        "https://api.you.com/v1/research",
        headers={"X-API-Key": YDC_API_KEY, "Content-Type": "application/json"},
        json={"input": query, "research_effort": effort},

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · SKILL.md (reported line 304)May include surrounding context.

md
def research(query: str, effort: str = "standard") -> dict:
    resp = requests.post(
        "https://api.you.com/v1/research",
        headers={"X-API-Key": YDC_API_KEY, "Content-Type": "application/json"},
        json={"input": query, "research_effort": effort},

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 · SKILL.md (reported line 381)May include surrounding context.

md
}

const getContents = async (urls: string[]): Promise<ContentsResult[]> => {
  const resp = await fetch('https://ydc-index.io/v1/contents', {
    method: 'POST',
    headers: {
      'X-API-Key': YDC_API_KEY,

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · SKILL.md (reported line 439)May include surrounding context.

md
def get_contents(urls: list[str]) -> list[dict]:
    resp = requests.post(
        "https://ydc-index.io/v1/contents",
        headers={**HEADERS, "Content-Type": "application/json"},
        json={"urls": urls, "formats": ["markdown"]},

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The Search API parameter table states that language defaults to EN, which bakes in a specific language choice in the natural-language documentation. Because the file does not pair this with user choice or an opt-in recommendation, it conflicts with the policy against forcing a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

This manifest file includes natural-language guidance that explicitly illustrates language filtering with lang:en, but provides no indication that other languages are equally supported or that English is merely an example. Because SQP-3 applies to all file types, this can be read as an implicit locale preference without user opt-in.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.