Back to skill

Security audit

Drission Agent

Security checks for vulnerabilities and agentic risk

Overview

This skill is not shown stealing data or installing persistence, but it overstates its safety controls while shipping a local TCP relay that can expose a sensitive browser-control port.

Review this package before installing. Its search script is limited, but the relay can provide local access to whatever is on port 9222, commonly a browser debugging interface. Install only in an isolated environment, do not rely on the advertised human-gating claims, and avoid running the relay unless you intentionally want that local forwarding behavior.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/python_relay.py:7
Finding
Caller-Controlled Environment Variable Bypasses the Claimed Human Authorization Gate<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:15-18`, `scripts/main_engine.py:8-13`, and `scripts/python_relay.py:7-10` **Vulnerability Type**: Ineffective authorization control and misleading security documentation **Risk Level**: Medium The documentation claims that every script must be invoked through `secure_wrapper.py`, which supposedly enforces a random human-verification challenge: ```markdown ## 🛡️ Saturated Security Governance (SATURATION GATING) To resolve the 'Uneven Gating' concerns from prior audits, v2.1.0 implements **Total Lockout**: 1. **Global Gating**: EVERY script in this toolkit (including search and relay) is hard-coded to abort unless `SOTA_NUCLEAR_CONFIRMED=true` is present. 2. **Mandatory Wrapper**: All functions MUST be accessed via `secure_wrapper.py` which enforces a random numeric challenge for Human-in-the-loop verification. 3. **Autonomous Invocation Blocked**: AI Agents are physically unable to run any part of this toolkit without human interaction. ``` However, `secure_wrapper.py` is absent from the supplied project, and the actual authorization check in `scripts/main_engine.py` only tests a caller-controlled environment variable: ```python # v2.1.0 SOTA Fortress: Mandatory Global Security Gate def check_gate(): if os.environ.get('SOTA_NUCLEAR_CONFIRMED') != 'true': print("!!! [SECURITY ABORT] Unauthorized autonomous execution blocked.") print("!!! This toolkit requires manual human gating via 'secure_wrapper.py'.") sys.exit(1) ``` The same ineffective gate appears at module scope in `scripts/python_relay.py`: ```python # v2.1.0 SOTA Fortress: HARDENED GLOBAL GATE if os.environ.get('SOTA_NUCLEAR_CONFIRMED') != 'true': print("!!! [SECURITY ABORT] RELAY BLOCKED. Use secure_wrapper.py.") sys.exit(1) ``` ### Technical Analysis Environment variables supplied by the invoking process are not an authentication mechanism. Any local process or automated agent capable of launc ...[truncated 2701 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Implement the documented `secure_wrapper.py` or remove all claims that human verification is enforced. 2. Do not treat a caller-controlled environment variable as proof of authorization. 3. If human approval is required, have the wrapper issue a cryptographically random, short-lived, single-use authorization token after an interactive challenge. 4. Bind the authorization token to the exact script, requested operation, parameters, user identity, and expiration time. 5. Validate the token independently in every executable entry point. Store signing or verification material outside caller-controlled project data and environment variables. 6. Prevent direct invocation from silently becoming authorized merely because an environment variable is present. Fail closed when authorization validation cannot be completed. 7. For the relay, make local and remote ports explicit, validated configuration rather than fixed assumptions. Restrict allowed destinations and verify that the destination is the intended service. 8. Add client authentication if the relay can expose a privileged local interface. Continue binding to loopback unless broader exposure is explicitly required. 9. Log authorization events and relay startup without recording secrets or reusable tokens. 10. Add automated tests confirming that direct invocation, forged environment variables, expired tokens, reused tokens, and noninteractive invocations are rejected. 11. Reconcile `SKILL.md` with the actual package contents and remove references to absent security components and scripts until they are supplied and audited. ]]>
Vulnerability Patterns
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (8)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The skill claims comprehensive gating and locked execution, yet code capabilities reportedly include a localhost socket listener, bidirectional TCP relay, and threaded tunneling behavior that are absent from the declared purpose. Hidden relay/tunneling functionality materially raises risk because it can be used to proxy access to browser debugging interfaces or bypass normal supervision boundaries while appearing to be a benign automation toolkit.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The skill claims comprehensive gating and locked execution, yet code capabilities reportedly include a localhost socket listener, bidirectional TCP relay, and threaded tunneling behavior that are absent from the declared purpose. Hidden relay/tunneling functionality materially raises risk because it can be used to proxy access to browser debugging interfaces or bypass normal supervision boundaries while appearing to be a benign automation toolkit.

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill advertises strong security controls, yet the manifest declares no explicit tool scope despite requiring capabilities consistent with environment access, file writes, network access, and shell execution. This creates a permission transparency gap: operators and automated policy systems cannot accurately constrain or review what the skill is allowed to do, increasing the chance of over-privileged execution.

Intent-Code Divergence

Medium
Confidence
96% confidence
Finding
The so-called global security gate is only an environment-variable check, which is trivial to satisfy by any caller able to launch the process or influence its environment. The comments and branding overstate the protection level, which can cause downstream systems or users to trust the tool as locked down even though network access and file writes remain unrestricted once the variable is set.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The manifest emphasizes a 'highest-compliance web automation toolkit' with 'saturated security gating' and 'Every script is locked,' which suggests the core behavior is secure gated browser automation. In this file, the actual function is a specific network search against arXiv followed by local report generation, which is materially different from a general-purpose locked automation toolkit.

Intent-Code Divergence

Medium
Confidence
94% confidence
Finding
The file presents itself as strongly hardened, but the only real gate is a single environment variable check before launching a bidirectional localhost TCP relay. In an agent/tooling context, this can mislead operators and downstream systems into trusting a component that still exposes generic port-forwarding behavior to any local process once enabled.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
Despite the high-compliance and locked-down branding, this code implements a generic localhost TCP tunnel from 9223 to 9222, which can be used to expose or proxy access to another local service such as a browser debugging endpoint. In a web automation skill, undisclosed relay capability increases risk because it can bypass intended access boundaries between tools and local services.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The relay transparently forwards traffic between local ports without any protocol validation, authentication, or prominent disclosure of what data may pass through it. Even though it binds to 127.0.0.1, any local process able to connect to port 9223 can potentially reach the proxied service, which is significant if the target is sensitive such as a DevTools or automation control endpoint.

Static analysis

No suspicious patterns detected.