Skip to content

Conversation

@peteski22
Copy link
Contributor

Summary:

Fixes a security vulnerability where environment variables and command-line arguments with cross-server references (e.g. ${MCPD__DATABASE_SERVER__DB_PASSWORD}) were bypassing filtering due to premature expansion.

This regression was introduced in PR #144 when environment variable expansion was moved to load time.

Changes:

  • Add RawEnv/RawArgs fields to preserve unexpanded values for filtering
  • Implement secure SafeEnv() (formerly Environ()) and SafeArgs() methods that filter on raw values
  • Update daemon to use safe methods, preventing cross-server data leakage
  • Add comprehensive tests to verify cross-server isolation

Security Impact:

Prevents servers from accessing environment variables and arguments intended for other servers, maintaining proper isolation between MCP server configurations.

@peteski22 peteski22 added bug Something isn't working daemon labels Sep 22, 2025
@peteski22 peteski22 requested a review from agpituk September 22, 2025 17:50
* Add RawEnv and RawArgs fields to ServerExecutionContext
* Store unexpanded values before environment variable expansion
* Update all methods to handle new fields (Get, Equals, AggregateConfigs)
* Update tests to expect new fields
* Add documentation for security-aware usage
* Convert filterEnv to Server receiver method
* Use RawEnv to detect cross-server references before expansion
* Check both raw and expanded values for comprehensive filtering
* Update all test calls to use Server receiver method
* Add filterArgs method to detect cross-server references in args
* Use RawArgs to check unexpanded values for security filtering
* Update exportRuntimeArgs to filter args before processing
* Filter both expanded and raw argument values
* Add SafeArgs() method that returns filtered command-line arguments
* Rename Environ() to SafeEnv() for consistency and clarity
* Update daemon to use SafeArgs() and SafeEnv() when starting servers
* Ensure production usage is secure by default
* Add end-to-end tests for SafeEnv and SafeArgs methods
* Verify cross-server references are filtered from environment variables and arguments
* Test with realistic config files to ensure production-like scenarios
@peteski22 peteski22 merged commit 1b8a5c4 into main Sep 24, 2025
2 checks passed
@peteski22 peteski22 deleted the peteski22/bug/env-filtering branch September 24, 2025 10:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working daemon

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants