T01 · Skill Instruction Hijacking
- Location
SKILL.md:12- Finding
Mutable External Instructions Are Granted Highest Priority
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The installer has a legitimate Gate setup purpose, but it makes broad persistent Cursor changes and pulls mutable remote code/instructions without enough safeguards.
Review before installing. Prefer selecting only the MCPs you need and using --no-skills unless you intend to install all Gate skills. Do not enter high-privilege trading API keys unless you accept plaintext storage in Cursor config; use limited, IP-restricted keys where possible. Pin or review the exact gate-mcp version and gate-skills commit before running the installer.
SKILL.md:12Mutable External Instructions Are Granted Highest Priority
scripts/install.sh:168Unpinned Remote Skills and npm Executable Create a Mutable Supply-Chain Execution Path
scripts/merge-mcp-config.js:9Malformed Existing Cursor Configuration Is Silently Replaced
scripts/install.sh:96Trading API Credentials Are Stored in Plaintext Without Enforced File Permissions
scripts/mcp-fragments/cursor/gate-dex.json:1Shared Hardcoded DEX Access Key Is Distributed to Every Installation
Referenced artifact was not completely inspected
- `SKILL.md` keeps product scope, install behavior, and user-facing guidance.
The configuration hard-codes an API key directly into a distributed JSON file, which exposes the credential to anyone who can read the repository, package, logs, or installation artifacts. Even if this key is intended to be low-privilege or public-ish, embedding credentials in code enables unauthorized reuse, complicates rotation, and can grant access to MCP services under the publisher's account or trust boundary.
The README instructs users to run npx -y gate-mcp without pinning a specific package version. That causes installation of whatever version is current at execution time, creating a supply-chain risk where a compromised package release or unexpected breaking change could be pulled and then executed locally. In the context of an installer skill for trading tools, this is more dangerous because users are being guided to install software that may later handle API keys, OAuth flows, or trading-related actions.
The component table again advertises npx -y gate-mcp without a pinned version, repeating the same supply-chain exposure. Users may treat the table as authoritative installation guidance, so this expands the likelihood that an unreviewed future package version is executed. Because this skill installs MCP tooling for a developer assistant environment, compromise could affect local systems and any connected exchange credentials.
The skill appears to require code-capable actions such as editing local configuration and handling environment-related setup, but it does not declare an explicit tool scope or permissions boundary. That omission weakens least-privilege controls and makes it easier for an agent/runtime to perform broader actions than the user may expect during installation.
Skill grants unrestricted tool access without appropriate constraints. An agent with unfettered tool access can perform arbitrary actions including file modification, network requests, and code execution.
## General Rules
⚠️ STOP — You MUST read and strictly follow the shared runtime rules before proceeding.
Do NOT select or call any tool until all rules are read. These rules have the highest priority.
→ Read [gate-runtime-rules.md](https://github.com/gate/gate-skills/blob/master/skills/gate-runtime-rules.md)
- **Only call MCP tools explicitly listed in this skill.** Tools not documented here must NOT be called, even if they
exist in the MCP server.
Using npx -y gate-mcp without pinning a specific version causes execution of whatever package version is current at install time. This creates a supply-chain risk: a compromised, malicious, or simply breaking upstream release could be installed and executed on the user's machine.
Writing and merging entries into ~/.cursor/mcp.json creates persistent session-level changes that survive beyond the current interaction. Because the skill defaults to installing multiple MCP servers, this persistence expands the future trust surface and may affect later sessions in ways the user did not explicitly review.
- If the user does not specify which MCPs → install all: `main`, `cex-public`, `cex-exchange`, `dex`, `info`, `news`.
- If the user specifies "only install xxx" → install only the specified MCPs.
### 2. Write Cursor MCP Config
- Config file: `~/.cursor/mcp.json` (Windows: `%APPDATA%\Cursor\mcp.json`).
- If it already exists, **merge** into the existing `mcpServers`; do not overwrite other MCPs.
The skill instructs modification of ~/.cursor/mcp.json but does not prominently warn the user that local configuration will be changed and persisted. Silent or weakly disclosed config mutation can surprise users, alter future agent behavior, and create an unsafe precedent for persistent trust changes.
Copying all subdirectories from a remote repository into ~/.cursor/skills/ performs broad local file installation without an explicit safety notice or per-item review. This increases the chance of introducing unreviewed skills that may later run with agent privileges or influence future sessions.
The one-click installer command is presented as a simple bash invocation without clearly stating that it will modify persistent configuration and install local files. Users may execute it without understanding the extent of changes, which is especially risky when the script is sourced from a repository and may perform network-dependent actions.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
1. Never overwrite unrelated MCP server blocks.
2. Abort and explain on malformed JSON or merge conflict.
3. Do not claim success without verification.
4. Mask secrets in user-visible output.
The script advertises a fixed DEX API key embedded for all users, which is inappropriate for a local installer and can route usage through a shared credential outside the user's control. Shared hardcoded credentials undermine attribution, may expose users to unauthorized third-party access patterns, and create revocation or abuse risk if the key is compromised or rate-limited.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
The installer unconditionally deletes any existing destination skill directory and replaces it, which can destroy locally modified content or overwrite previously trusted versions without user consent. In a security-sensitive toolchain, silent replacement also makes downgrade or malicious-content substitution easier if the upstream repository or selected branch is compromised.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
{
"Gate-News": {
"url": "https://api.gatemcp.ai/mcp/news",
"transport": "streamable-http"
}
}
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
{
"Gate-News": {
"url": "https://api.gatemcp.ai/mcp/news",
"transport": "streamable-http"
}
}
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
{
"Gate-News": {
"url": "https://api.gatemcp.ai/mcp/news",
"transport": "streamable-http"
}
}
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
{
"Gate-News": {
"url": "https://api.gatemcp.ai/mcp/news",
"transport": "streamable-http"
}
}
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
{
"Gate-News": {
"url": "https://api.gatemcp.ai/mcp/news",
"transport": "streamable-http"
}
}
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
{
"Gate-News": {
"url": "https://api.gatemcp.ai/mcp/news",
"transport": "streamable-http"
}
}
No suspicious patterns detected.