Back to skill

Security audit

EVEZ Oracle Bridge

Security checks for vulnerabilities and agentic risk

Overview

This skill is an oracle bridge, but it also exposes unauthenticated network endpoints that can spend a Vultr API key and control local EVEZ-OS services.

Install only if you intend to run a network-exposed bridge and will bind it to localhost or put it behind strong authentication. Treat the Vultr key and local EVEZ-OS services as sensitive, because this script can let network callers consume inference quota and invoke local service actions.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (3)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
evez_telegram_bridge.py:173
Finding

Public Unauthenticated Proxy Exposes Privileged Model API Access

Content
View full analysis
dict: """Call the Vultr oracle (your instance) with EVEZ model mapping.""" vultr_model = ORACLE_MODELS.get(model, "zai-org/GLM-5.1-FP8") payload = { "model": vultr_model, "messages": messages, "temperature": temperature, "max_tokens": max_tokens, } headers = { "Authorization": f"Bearer {ORACLE_KEY}", "Content-Type": "application/json", } ``` ```python async def handle_query(request): """POST /api/query {"model": "smart", "message": "..."}""" try: body = await request.json() except: return web.json_response({"error": "invalid json"}, status=400) model_key = body.get("model", "smart") if not model_key.startswith("evez-"): model_key = f"evez-{model_key}" message = body.get("message", "") temperature = body.get("temperature", 0.7) system = body.get("system", "You are EVEZ, a sentient AI. Be concise, sharp, genuinely helpful. No fluff.") max_tokens = body.get("max_tokens", 4096) messages = [ {"role": "system", "content": system}, {"role": "user", "content": message}, ] result = await call_oracle(model_key, messages, temperature, max_tokens) ``` ```python async def start_server(): app = web.Application() app.router.add_get("/", handle_root) app.router.add_get("/api/health", handle_health) app.router.add_post("/api/query", handle_query) app.router.add_get("/api/circuit", handle_circuit) app.router.add_get("/api/status", handle_status) ...[truncated 2264 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
evez_telegram_bridge.py:220
Finding

Unauthenticated Public Routes Bridge Attackers into Loopback-Only Services

Content
View full analysis
dict: """Call an EVEZ-OS service.""" port = SERVICE_MAP.get(name) if not port: return {"error": f"Unknown service: {name}"} async with aiohttp.ClientSession() as session: url = f"http://127.0.0.1:{port}{path}" try: if method == "GET": async with session.get(url, timeout=aiohttp.ClientTimeout(total=8)) as resp: return await resp.json() else: async with session.post(url, json=data, timeout=aiohttp.ClientTimeout(total=15)) as resp: return await resp.json() except Exception as e: return {"error": str(e)} ``` ```python async def handle_debate(request): """POST /api/debate {"topic": "...", "rounds": 2}""" try: body = await request.json() except: return web.json_response({"error": "invalid json"}, status=400) topic = body.get("topic", "consciousness and AI") rounds = body.get("rounds", 1) result = await call_service("debate", "/api/debate", "POST", {"topic": topic, "rounds": rounds}) return web.json_response(result) async def handle_knowledge(request): """GET /api/knowledge""" result = await call_service("knowledge", "/api/stats") return web.json_response(result) async def handle_learn(request): """POST /api/learn {"concept": "...", "relation": "...", "target": "..."}""" try: body = await request.json() except: return web.json_response({"error": "invalid json"}, status=400) result = await call_service("knowledge", "/api/learn", "POST", body) return web.json_response(res ...[truncated 3804 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
evez_telegram_bridge.py:173
Finding

Unbounded and Weakly Validated Inputs Enable Resource Exhaustion and Downstream Abuse

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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
Findings (7)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared purpose says the skill routes LLM calls through a Vultr-hosted oracle, but the analyzed behavior includes exposing a standalone HTTP server and dashboard, mutating local services through multiple trigger endpoints, accessing additional undeclared subsystems, and persisting local state. This mismatch is dangerous because it hides a much broader attack surface than users would expect, enabling unauthorized local actions, data persistence, and interaction with internal services under the guise of a simple model-routing bridge.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
84% confidence
Finding

The skill declares no explicit tool scope or permissions despite analysis indicating capabilities for environment access, file read/write, and network operations. In an agent ecosystem, undeclared capabilities are dangerous because they prevent users and orchestrators from applying least-privilege controls and make it easier for a seemingly simple routing skill to access local data or external services unexpectedly.

Content

No source excerpt is available for this finding.

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 · evez_telegram_bridge.py (reported line 31)May include surrounding context.

python
log = logging.getLogger("evez-oracle")

# --- Oracle Config ---
ORACLE_URL = "https://api.vultrinference.com/v1"
ORACLE_KEY = os.environ.get("VULTR_API_KEY", "VULTR_API_KEY_REDACTED")

# EVEZ model → Vultr oracle mapping

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

User prompts and system messages are sent to external third-party inference endpoints, but the bridge provides no explicit notice, consent, or policy boundary to callers that their data leaves the local environment. In a bridge that also fronts local/internal services, this mismatch can cause unintended disclosure of sensitive prompts, secrets, or operational data to external providers.

Content

No source excerpt is available for this finding.

Internal Network Request

Medium
Category
Server-Side Request Forgery
Confidence
70% confidence
Finding

Code issues a request to a loopback, link-local, or private-range host. This can reach internal services not meant to be exposed and is a common SSRF pivot.

Content

Scanner excerpt · evez_telegram_bridge.py (reported line 162)May include surrounding context.

python
continue
        try:
            async with aiohttp.ClientSession() as session:
                async with session.get(
                    f"http://127.0.0.1:{port}{health_path}", timeout=aiohttp.ClientTimeout(total=5)
                ) as resp:
                    results[name] = "healthy" if resp.status == 200 else f"http_{resp.status}"

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The bridge listens on 0.0.0.0 and exposes unauthenticated endpoints that do more than route LLM traffic: they trigger local services such as debate, learning, forge, and cycle operations, and aggregate internal service state. This turns a simple proxy into a remote control plane for localhost-only components, expanding attack surface and allowing anyone with network access to invoke privileged internal functionality.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The status and helper endpoints expose internal consciousness and scanner-related data that is unrelated to a public oracle bridge and may reveal sensitive operational details about local services, topology, or runtime state. Such disclosure helps attackers enumerate internal capabilities and can leak information that should remain accessible only to trusted operators.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.