Back to skill

Security audit

openrouter-perplexity

Security checks for vulnerabilities and agentic risk

Overview

The skill is a narrow web-search helper, but its documentation says Perplexity while the executable sends queries and an API key to OpenRouter, which users should review before installing.

Install only if you are comfortable sending search queries and the OPENROUTER_API_KEY authorization token to OpenRouter. Treat the Perplexity wording as ambiguous until the publisher clarifies whether this is truly Perplexity, OpenRouter-backed Perplexity, or just an OpenRouter search wrapper.

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
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill invokes a Node.js script that requires an API key from the environment and performs outbound web/API requests, but the manifest does not declare any explicit tool scope such as permissions or allowed-tools. This creates an authorization and transparency gap: consumers of the skill cannot clearly see that it needs env access and network egress, increasing the risk of unexpected secret exposure or unreviewed external communication.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill metadata claims it uses the Perplexity API, but the implementation actually sends queries and an authorization token to OpenRouter. This is a real integrity and data-handling issue because operators may provision the skill under false assumptions about which third party receives data, what credentials are required, and what provider policies apply.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

The script transmits user-supplied queries and an API credential to an external service at OpenRouter. External transmission is expected for a web-search skill, but it remains security-relevant because users may believe data is going to Perplexity instead, and sensitive prompts could be disclosed to an unintended third party due to the provider mismatch.

Content

Scanner excerpt · scripts/search.mjs (reported line 31)May include surrounding context.

js
}

async function search(queries) {
  const response = await fetch("https://openrouter.ai/api/v1", {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${apiKey}`,

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
73% confidence
Finding

Comments such as 'Handle array of search results' and later assumptions like 'The API returns an object with results array' document a generic search-results contract, while the manifest promises AI-powered answers with citations via Perplexity. The code formats title/url/snippet lists rather than implementing the documented answer-with-citations behavior, creating an intent/documentation divergence.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.