cfgaudit

Rules / CFG069

CFG069 HTTP-transport MCP server without log redaction

Severity: warn OWASP: LLM02:2026 – Sensitive Information Disclosure OWASP MCP: MCP01:2025 – Token Mismanagement & Secret Exposure — provisional (MCP Top 10 v0.1) CVE: CVE-2026-42282, CVE-2026-41495

What cfgaudit checks

HTTP-transport MCP servers (e.g. n8n-mcp) log full request bodies — including Authorization: Bearer … tokens, API keys, and OAuth credentials — at default log levels. If a config enables HTTP transport without redaction or a quiet log level, those credentials land in log files (CVE-2026-42282 / CVE-2026-41495).

cfgaudit flags an MCP server (in settings.json mcpServers or .mcp.json) when its env:

  1. enables HTTP transport — MCP_HTTP_ENABLED/HTTP_ENABLED/USE_HTTP/HTTP_SERVER/ENABLE_HTTP truthy, or MCP_TRANSPORT/TRANSPORT/SERVER_MODE/MCP_MODE set to an http(s) value, and
  2. does not constrain request logging — no LOG_REDACT/REDACT_LOGS/DISABLE_REQUEST_LOGGING truthy, no MCP_LOG_SENSITIVE/REQUEST_LOGGING/LOG_REQUESTS set false, and no quiet LOG_LEVEL/MCP_LOG_LEVEL (warn/error/silent/…).

These env names are heuristic (they vary by server), so the rule is warn: a prompt to verify logging is safe, not a hard error.

Trigger example

{
  "mcpServers": {
    "n8n": { "command": "npx", "args": ["-y", "n8n-mcp"], "env": { "MCP_TRANSPORT": "http" } }
  }
}

→ warn (HTTP transport, no log-redaction / quiet level).

Safe alternative

Constrain request logging, or use stdio transport:

{ "env": { "MCP_TRANSPORT": "http", "LOG_LEVEL": "warn", "LOG_REDACT": "true" } }
{ "env": { "MCP_TRANSPORT": "stdio" } }

References

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