Back to skill

Security audit

Tavily Search

Security checks for vulnerabilities and agentic risk

Overview

This is a straightforward Tavily web-search integration that sends search, URL, crawl, map, and research inputs to Tavily as expected, with no hidden persistence or destructive behavior found.

Install this only if you are comfortable sending search queries, target URLs, crawl instructions, and research prompts to Tavily using your Tavily API key. Avoid using it for secrets, internal-only URLs, regulated data, or proprietary prompts unless your organization permits Tavily as a third-party processor.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (18)

Lp3

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding
The skill advertises use of environment-provided API credentials and network access but does not declare an explicit tool scope such as permissions or allowed-tools. That weakens least-privilege enforcement and makes it harder for a host to constrain what the skill may access, increasing the chance of over-broad execution or unintended data egress through networked scripts/plugins.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The directive to use Tavily instead of the built-in web search for all searches removes agent discretion and can override user or system preferences about tool selection. In this context, the danger is not code execution but policy steering: it funnels all search activity and associated query data to a single external provider, increasing privacy, compliance, and dependency risk.

Vague Triggers

Medium
Confidence
93% confidence
Finding
The skill instructs the agent to apply Tavily to essentially all web searches, with no meaningful exclusions for sensitive contexts, user preference, privacy concerns, or safer built-in alternatives. This broad routing can cause unnecessary external transmission of user queries and make the agent over-rely on a third-party service even when a narrower or local option would be more appropriate.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
This code constructs a request body from the user-provided URL and optional instructions, then transmits it to the Tavily API. Although the CLI usage shows available arguments, it does not explicitly warn that these values and crawl targets are sent to an external service, and there is no additional confirmation or disclosure in comments or docstrings.

External Transmission

Medium
Category
Data Exfiltration
Content
if (instructions) body.instructions = instructions;
if (format) body.format = format;

const resp = await fetch("https://api.tavily.com/crawl", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
const extractBody = { urls, format };
if (query) extractBody.query = query;

const resp = await fetch("https://api.tavily.com/extract", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
const extractBody = { urls, format };
if (query) extractBody.query = query;

const resp = await fetch("https://api.tavily.com/extract", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
const extractBody = { urls, format };
if (query) extractBody.query = query;

const resp = await fetch("https://api.tavily.com/extract", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
const extractBody = { urls, format };
if (query) extractBody.query = query;

const resp = await fetch("https://api.tavily.com/extract", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
if (limit !== null) body.limit = limit;
if (instructions) body.instructions = instructions;

const resp = await fetch("https://api.tavily.com/map", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
Confidence
90% confidence
Finding
The hardcoded Tavily endpoint confirms that the script always sends data to an external third-party service. In this skill, that behavior is expected, but it still constitutes a genuine confidentiality boundary crossing, especially if operators assume the tool only processes data locally.

External Transmission

Medium
Category
Data Exfiltration
Content
if (limit !== null) body.limit = limit;
if (instructions) body.instructions = instructions;

const resp = await fetch("https://api.tavily.com/map", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
Confidence
90% confidence
Finding
The hardcoded Tavily endpoint confirms that the script always sends data to an external third-party service. In this skill, that behavior is expected, but it still constitutes a genuine confidentiality boundary crossing, especially if operators assume the tool only processes data locally.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The script sends user-supplied `url` and optional free-form `instructions` to Tavily's external API without any explicit notice, consent prompt, or redaction step. In a skill context, those fields may contain sensitive internal URLs, query context, or proprietary instructions, so this creates a real data-exfiltration/privacy risk even though the transmission is part of the tool's intended function.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The script sends the user's research query directly to Tavily's external API, but it provides no meaningful privacy notice, consent prompt, or guardrail against entering secrets or regulated data. In a research skill, users may paste sensitive internal questions, credentials, or proprietary material, which would then be transmitted to a third party and potentially logged or retained externally.

External Transmission

Medium
Category
Data Exfiltration
Content
if (citationFormat) body.citation_format = citationFormat;

// Step 1: Create the research task
const createResp = await fetch("https://api.tavily.com/research", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
Confidence
86% confidence
Finding
The hardcoded Tavily API endpoint confirms outbound network transmission to a third-party domain. In context this is expected behavior, but it remains security-relevant because any sensitive user input in the request body is exposed outside the local trust boundary.

External Transmission

Medium
Category
Data Exfiltration
Content
if (citationFormat) body.citation_format = citationFormat;

// Step 1: Create the research task
const createResp = await fetch("https://api.tavily.com/research", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
Confidence
86% confidence
Finding
The hardcoded Tavily API endpoint confirms outbound network transmission to a third-party domain. In context this is expected behavior, but it remains security-relevant because any sensitive user input in the request body is exposed outside the local trust boundary.

External Transmission

Medium
Category
Data Exfiltration
Content
body.time_range = timeRange;
}

const resp = await fetch("https://api.tavily.com/search", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
Confidence
87% confidence
Finding
The hardcoded Tavily endpoint confirms that the tool is designed to transmit data outside the local environment. In isolation this is not malicious, but in an agent ecosystem it is security-relevant because prompts and search terms may contain sensitive operational context, and the skill provides no inline warning or boundary check before sending them off-box.

External Transmission

Medium
Category
Data Exfiltration
Content
body.time_range = timeRange;
}

const resp = await fetch("https://api.tavily.com/search", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
Confidence
87% confidence
Finding
The hardcoded Tavily endpoint confirms that the tool is designed to transmit data outside the local environment. In isolation this is not malicious, but in an agent ecosystem it is security-relevant because prompts and search terms may contain sensitive operational context, and the skill provides no inline warning or boundary check before sending them off-box.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The script sends the user-provided search query, and optionally time-range/topic metadata, to Tavily's external API without any explicit notice or consent mechanism. In a skill context, users may reasonably assume local processing; transmitting arbitrary prompts externally can leak sensitive or regulated data if operators or downstream agents pass secrets, internal questions, or proprietary research terms into the tool.

Static analysis

No suspicious patterns detected.