Skip to main content
Glama
deslicer

MCP Server for Splunk

SECURITY.md8.81 kB
# Security Policy ## Supported Versions We release security updates for the following versions: | Version | Supported | | ------- | ------------------ | | 0.4.x | :white_check_mark: | | 0.3.x | :white_check_mark: | | < 0.3 | :x: | ## Security Advisories ### Active Mitigations #### CVE-2025-20381 (SVD-2025-1210) - Subsearch Injection **Status**: ✅ NOT AFFECTED **Description**: This vulnerability affects Splunk's official MCP Server which implements an MCP-layer command allowlist that can be bypassed via subsearches. **Why We're Not Affected**: Our architecture differs fundamentally: - We do NOT implement an MCP-layer command allowlist - All SPL queries execute with the authenticated user's Splunk RBAC permissions - Subsearches and index access are controlled by Splunk's native authorization - Users can only access data their Splunk credentials permit **Defense-in-Depth Measures**: - Implemented SPL query validation in `src/core/security.py` - Blocked dangerous commands that could modify data or execute external code (`collect`, `outputlookup`, `delete`, `sendemail`, `script`, `run`) - Query complexity limits to prevent DoS - Comprehensive security testing suite added **Upgrade Path**: ```bash # Update to latest version git pull origin main uv sync # Verify security features are active python -c "from src.core.security import get_security_config; import json; print(json.dumps(get_security_config(), indent=2))" ``` ## Reporting a Vulnerability We take security vulnerabilities seriously. If you discover a security issue, please report it responsibly. ### Reporting Process 1. **DO NOT** open a public GitHub issue 2. **DO** send a detailed report to: [security@deslicer.com] or use GitHub Security Advisories 3. **Include** in your report: - Description of the vulnerability - Steps to reproduce - Potential impact assessment - Suggested remediation (if any) ### What to Expect - **Initial Response**: Within 48 hours - **Status Update**: Within 7 days - **Fix Timeline**: - Critical: 1-7 days - High: 7-30 days - Medium: 30-90 days - Low: 90+ days or next release ### Disclosure Policy - We follow **coordinated disclosure** principles - Security advisories will be published after fixes are available - We will credit security researchers (with permission) - Typical disclosure timeline: 90 days after initial report ## Security Best Practices ### For Users 1. **Keep Updated**: Always use the latest version ```bash git pull origin main uv sync ``` 2. **Environment Variables**: Never commit credentials ```bash # Use .env files (already in .gitignore) cp env.example .env # Edit .env with your credentials ``` 3. **Network Security**: Run behind firewalls/reverse proxies ```yaml # Example: Using Traefik for TLS termination services: mcp-server: environment: MCP_SERVER_HOST: 0.0.0.0 MCP_SERVER_PORT: 8001 networks: - internal ``` 4. **Least Privilege**: Use Splunk service accounts with minimal permissions ```spl # Create a read-only user for MCP | rest /services/authentication/users | search title=mcp_readonly ``` 5. **Audit Logging**: Enable MCP audit logs ```bash export MCP_LOG_LEVEL=INFO # Check logs tail -f logs/mcp_splunk_server.log ``` ### For Developers 1. **Security Reviews**: All PRs with security implications require review 2. **Dependency Updates**: Keep dependencies updated ```bash uv lock --upgrade ``` 3. **Security Testing**: Run security tests before committing ```bash pytest tests/security/ -v ``` 4. **Static Analysis**: Use pre-commit hooks ```bash pre-commit install pre-commit run --all-files ``` ## Security Features ### Query Validation (v0.4.0+) **Dangerous Command Blocking** ```python from src.core.security import validate_query, QuerySecurityError # Data modification commands are blocked try: validate_query("index=main | outputlookup mydata.csv") except QuerySecurityError: print("Blocked - outputlookup can modify data") # External execution commands are blocked try: validate_query("| script python my_script.py") except QuerySecurityError: print("Blocked - script can execute external code") # Normal queries are allowed (access controlled by Splunk RBAC) validate_query("index=main error | stats count") # OK validate_query("index=main [ search index=_audit ]") # OK - user RBAC applies ``` **Forbidden Commands** The following commands are blocked at the MCP layer as defense-in-depth: - `collect`, `outputlookup`, `outputcsv` - Data modification - `delete` - Data deletion - `sendemail` - External communication - `script`, `run` - External code execution **Index Access** - Index access is controlled by Splunk RBAC, not the MCP layer - Users can only query indexes their Splunk credentials permit ### Authentication & Authorization **Current Implementation**: - Token-based authentication - Username/password authentication - HTTP header-based credential passing - Session-based credential caching **Planned Enhancements**: - OAuth 2.0 / OIDC support - RBAC (Role-Based Access Control) - API key management - Multi-factor authentication (MFA) ### Network Security **TLS/HTTPS**: ```bash # Run behind a reverse proxy with TLS # Example with Traefik: docker-compose -f docker-compose.yml -f docker-compose-traefik.yml up ``` **Rate Limiting** (Planned): - Request rate limiting per client - Query complexity limits - Resource usage monitoring ### Secrets Management **Current**: - `.env` files (gitignored) - Environment variables - HTTP headers for credentials **Best Practices**: ```bash # Use a secrets manager export SPLUNK_PASSWORD=$(aws secretsmanager get-secret-value --secret-id splunk-password --query SecretString --output text) # Or use Docker secrets docker secret create splunk_password password.txt ``` ## Compliance ### Standards We aim to align with: - **OWASP Top 10**: Protection against common web vulnerabilities - **CWE Top 25**: Mitigation of dangerous software weaknesses - **SOC 2 Type II**: Security controls for service organizations - **HIPAA**: Healthcare data protection (when applicable) - **PCI-DSS**: Payment card industry standards (when applicable) ### Security Controls | Control | Status | Description | |---------|--------|-------------| | Input Validation | ✅ Implemented | SPL query validation, command filtering | | Authentication | ✅ Implemented | Token and credential-based auth | | Authorization | 🔄 Partial | User-based, RBAC planned | | Encryption in Transit | ✅ Supported | TLS via reverse proxy | | Encryption at Rest | ⚠️ External | Depends on Splunk configuration | | Audit Logging | ✅ Implemented | Request and query logging | | Secrets Management | ✅ Implemented | Environment variables, headers | | Dependency Scanning | ✅ Automated | Daily scans via GitHub Actions | | SAST | ✅ Automated | Bandit, Semgrep, CodeQL | | Secret Scanning | ✅ Automated | Gitleaks, TruffleHog | ## Security Tools & Scanning ### Automated Scans Our CI/CD pipeline includes: 1. **Bandit**: Python-specific security linter 2. **Semgrep**: Multi-pattern SAST tool 3. **CodeQL**: Advanced semantic analysis 4. **Safety**: Python dependency vulnerability scanner 5. **Trivy**: Container and dependency scanner 6. **Gitleaks**: Secret detection in git history 7. **TruffleHog**: Secret and credential scanner ### Running Scans Locally ```bash # Install security tools pip install bandit safety # Run Bandit scan bandit -r src/ -ll # Check dependencies safety check --file requirements.txt # Run security tests pytest tests/security/ -v ``` ## Incident Response ### Security Incident Categories 1. **Critical**: Active exploitation, data breach 2. **High**: Vulnerability with high impact 3. **Medium**: Limited impact vulnerability 4. **Low**: Informational, no immediate risk ### Response Process 1. **Detection**: Security scans, user reports, monitoring 2. **Containment**: Disable affected features, deploy hotfix 3. **Investigation**: Root cause analysis, impact assessment 4. **Remediation**: Develop and test fix 5. **Communication**: Notify users, publish advisory 6. **Post-Mortem**: Document lessons learned ## Contact - **Security Issues**: [security@deslicer.com] - **General Questions**: [GitHub Discussions](../../discussions) - **Bug Reports**: [GitHub Issues](../../issues) (non-security only) ## References - [OWASP Top 10](https://owasp.org/www-project-top-ten/) - [CWE Top 25](https://cwe.mitre.org/top25/) - [Splunk Security Advisories](https://advisory.splunk.com/) - [National Vulnerability Database](https://nvd.nist.gov/) --- **Last Updated**: December 5, 2025 **Version**: 1.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/deslicer/mcp-for-splunk'

If you have feedback or need assistance with the MCP directory API, please join our Discord server