Repository navigation
Release v4.1.0
Changes
Security
-
DNS rebinding protection is now armed by default on the HTTP transport.
enableDnsRebindingProtectionwas only passed whenELFA_MCP_ALLOWED_ORIGINSwas set, and that variable is unset in the documented local run (ELFA_MCP_TRANSPORT=http npx -y @elfa-ai/mcp), so the control shipped present but disarmed. The transport accepted anyHostand anyOriginwhile holdingELFA_API_KEY, which let a page the user visits re-point its own hostname at127.0.0.1and reachtools/listandtools/callat that process's own privilege — including theauto_*tools that spend credits. Binding to127.0.0.1was never a mitigation, because the victim's browser is already on loopback.Setting the origin allowlist did not close it either.
allowedOriginswas passed butallowedHostsnever was, and the SDK guards each check with its ownlength > 0test, soHostvalidation never ran. An origin allowlist cannot carry this alone: a rebound request is same-origin and sends noOriginheader, which leavesHostas the only header still naming the attacker's domain.Refs GHSA-w48q-cv73-mx4w / CVE-2025-66414. Reported by mcpdone.
Added
ELFA_MCP_ALLOWED_HOSTS, a comma separatedHostallowlist. It defaults to the loopback names the server binds —ELFA_MCP_HOST:PORT,localhost:PORTand127.0.0.1:PORT— so the documented local run is closed with no configuration.
Changed
-
Action required for hosted deployments. The host allowlist fails closed, so a deployment answering on any
Hostother than the loopback names the server binds now returns403until it setsELFA_MCP_ALLOWED_HOSTS. That covers a public domain, a reverse proxy, and a container that maps the port to a different one than the server binds, since the default is derived fromELFA_MCP_PORT.A minor rather than a major, because nothing about the interaction with this server changes: the eleven tools, their arguments, the stdio transport and every client-facing contract are untouched. A self-hosted HTTP deployment needs one environment variable.
Migration: set
ELFA_MCP_ALLOWED_HOSTSto the host values the deployment serves, for exampleELFA_MCP_ALLOWED_HOSTS=mcp.example.com. The stdio transport is unaffected and needs no change.
Installation
npx -y @elfa-ai/mcp@4.1.0