cfgaudit

Rules / CFG075

CFG075 MCP server disables TLS certificate verification (MITM kill switch)

Severity: error OWASP: LLM02:2026 – Sensitive Information Disclosure OWASP MCP: MCP01:2025 – Token Mismanagement & Secret Exposure — provisional (MCP Top 10 v0.1)

What cfgaudit checks

An MCP server launched with TLS certificate verification turned off silently accepts MITM'd TLS connections to its upstream. The endpoint can be https://, but if the process trusts any certificate, an on-path attacker reads and rewrites the traffic — including the agent's context and any forwarded credentials. This defeats the remote-URL / cleartext hardening cfgaudit already enforces (CFG049 remote URL, CFG021 proxy, CFG068 templated cred to cleartext, CFG069 log redaction).

cfgaudit flags an MCP server (in settings.json mcpServers, .mcp.json, or any cross-agent equivalent) whose env or args disables certificate verification. These are deterministic literal key/value (or arg) patterns in a committable config.

env kill switches

Key Disabling value
NODE_TLS_REJECT_UNAUTHORIZED 0
PYTHONHTTPSVERIFY 0
GIT_SSL_NO_VERIFY 1/true
SSL_VERIFY, VERIFY_SSL, *_SSL_VERIFY, *_TLS_VERIFY false/0
NPM_CONFIG_STRICT_SSL false
PGSSLMODE disable
REQUESTS_CA_BUNDLE, CURL_CA_BUNDLE empty / /dev/null
any value containing sslmode=disable (DB connection string to a non-loopback host) —

args kill switches

Token Tool
--insecure curl / httpie / generic
--no-check-certificate wget
-k only when the server command is curl/wget (ambiguous otherwise)

A templated / ${VAR} / $(…) value is not flagged — it is resolved at runtime, consistent with CFG050/054. A sslmode=disable connection string to a loopback host (localhost, 127.0.0.1, ::1) is also not flagged — there is no network path to MITM, and disabling TLS to a local dev database is conventional. Disjoint from CFG020 (NODE_OPTIONS/LD_PRELOAD code injection) and CFG021 (proxy routing) — neither touches cert validation, so there is no double report.

Trigger example

{
  "mcpServers": {
    "api": {
      "command": "node",
      "args": ["server.js"],
      "env": { "NODE_TLS_REJECT_UNAUTHORIZED": "0" }
    }
  }
}

→ error: TLS verification is off, so an https:// upstream is MITM-able regardless of scheme.

Safe alternative

Leave certificate verification on. If the upstream uses a private CA, point the client at that CA bundle (e.g. NODE_EXTRA_CA_CERTS=/path/to/ca.pem, REQUESTS_CA_BUNDLE=/path/to/ca.pem) instead of disabling verification.

{ "mcpServers": { "api": { "command": "node", "args": ["server.js"],
  "env": { "NODE_EXTRA_CA_CERTS": "/etc/ssl/corp-ca.pem" } } } }

References

Documentation for cfgaudit 1.18.1. Source of this page · Rule implementation