Back to skill

Security audit

UniFuncs Search

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed web-search skill that sends the user’s query and UniFuncs API key to UniFuncs for authenticated search, with no evidence of hidden execution, persistence, or unrelated data access.

Install only if you are comfortable sending search queries and your UniFuncs API key to UniFuncs. Use a dedicated UniFuncs key if possible, and be aware that broad search-trigger wording may cause the skill to be used for many web lookup requests.

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
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (5)

Tainted flow: 'req' from os.environ.get (line 133, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
req = urllib.request.Request(API_URL, data=json_data, headers=headers, method="POST")

    try:
        with urllib.request.urlopen(req, timeout=REQUEST_TIMEOUT_SECONDS) as response:
            response_data = response.read().decode("utf-8")
            try:
                return json.loads(response_data)
Confidence
90% confidence
Finding
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Lp1

High
Category
MCP Least Privilege
Confidence
98% confidence
Finding
The skill has undeclared network capability despite functioning as a web-search client. Undeclared capabilities are dangerous because they bypass informed consent and policy review, making it easier for a seemingly simple skill to reach external services without explicit approval.

Lp1

High
Category
MCP Least Privilege
Confidence
98% confidence
Finding
The skill has undeclared network capability despite functioning as a web-search client. Undeclared capabilities are dangerous because they bypass informed consent and policy review, making it easier for a seemingly simple skill to reach external services without explicit approval.

Vague Triggers

Medium
Confidence
96% confidence
Finding
The skill description is broad enough to match many common user requests such as "find," "look up," or "latest updates," which can cause the agent to invoke this skill in situations where a more specific or safer skill would be more appropriate. Overbroad routing increases the attack surface for prompt or tool misuse because ordinary queries can be diverted into a tool-enabled workflow unnecessarily.

External Transmission

Medium
Category
Data Exfiltration
Content
import urllib.request
from typing import Any, Dict, Optional

API_URL = "https://api.unifuncs.com/api/web-search/search"
REQUEST_TIMEOUT_SECONDS = 180
TEXT_FORMATS = {"markdown", "md", "text", "txt"}
ERROR_MESSAGES = {
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.