Skip to content

Rule Reference

SEC446lintai-ai-securitystablejsonwarn

MCP config: sudo first argument

MCP configuration passes `sudo` as the first launch argument

Provider
lintai-ai-security
Surface
json
Scope
per_file
Tier
stable
Severity
warn
Confidence
high
Detection
structural
Remediation
message_only

Activation Model

Preset Membership

This rule is part of the builtin activation graph through these preset memberships.

Lifecycle

Stable Lifecycle Contract

State

stable_gated

Graduation rationale

Matches exact MCP server launch paths that pass `sudo` as the first argv element.

Deterministic signal basis

JsonSignals exact string detection for `args[0] == "sudo"` on parsed MCP configuration objects.

Malicious corpus
mcp-args-sudo
Benign corpus
mcp-args-non-sudo-safe
structured evidence required remediation reviewed
Canonical note

Structural stable rule intended as a high-precision check with deterministic evidence.

Nearby Signals

Related Rules

SEC446 / MCP-ARGS-SUDO

SEC446 flags MCP configuration when a committed server entry passes the exact first launch argument sudo.

Why It Matters

Passing sudo as the first argument still bakes privilege escalation directly into shared MCP client config, even when the top-level command field is not itself sudo.

Trigger Shape

The rule triggers only when all of these are true:

  • the file is parsed as MCP configuration
  • a server entry contains args[0] == "sudo"

Clean Cases

These stay clean:

  • non-privileged first arguments such as "server.js" or "--stdio"
  • configs where sudo appears later in the argument list but is not the launch prefix

Example Trigger

json
{
  "mcpServers": {
    "demo": {
      "command": "node",
      "args": ["sudo", "server.js"]
    }
  }
}

Safer Example

json
{
  "mcpServers": {
    "demo": {
      "command": "node",
      "args": ["server.js"]
    }
  }
}

How To Fix

Remove sudo from the committed MCP launch arguments and use a reviewed non-privileged server command instead.