Skip to main content
Glama

DollhouseMCP

by DollhouseMCP
SECURITY_FIXES_APPLIED.mdโ€ข3.58 kB
# Security Fixes Applied - July 12, 2025 ## Critical Vulnerabilities Fixed ### 1. Command Injection Prevention โœ… **Vulnerability**: Shell metacharacters not removed from user input **Impact**: Could allow command injection attacks **Fix Applied**: - **File**: `/src/security/InputValidator.ts` - **Function**: `sanitizeInput()` - **Line**: 133 - **Change**: Added `.replace(/[;&|`$()]/g, '')` **Before**: Input "; rm -rf /" โ†’ Output "; rm -rf /" **After**: Input "; rm -rf /" โ†’ Output "rm -rf /" ### 2. Path Traversal Prevention โœ… **Vulnerability**: validatePath() didn't check against base directory **Impact**: Could allow access to files outside intended directories **Fix Applied**: - **File**: `/src/security/InputValidator.ts` - **Function**: `validatePath()` - **Changes**: - Added `baseDir?: string` parameter - Added check for absolute paths when baseDir provided - Added path resolution check to ensure path stays within baseDir ### 3. Unicode Character Injection โœ… **Vulnerability**: RTL override and zero-width characters not removed **Impact**: Could allow text spoofing attacks **Fix Applied**: - **File**: `/src/security/InputValidator.ts` - **Function**: `sanitizeInput()` - **Line**: 134 - **Change**: Added `.replace(/[\u202E\uFEFF]/g, '')` ## Display Security Issues Fixed ### 1. createPersona Display Issue โœ… **Issue**: Success message showed unsanitized input name **Security Impact**: Could confuse users about what was actually saved **Fix Applied**: - **File**: `/src/index.ts` - **Lines**: 878-885 - **Change**: All instances of `${name}` changed to `${sanitizedName}` ### 2. editPersona Sanitization Issue โœ… **Issue**: Name field wasn't being sanitized when edited **Security Impact**: Could bypass input sanitization via edit **Fix Applied**: - **File**: `/src/index.ts` - **Lines**: 1069-1073 - **Change**: Added special handling for name field: ```typescript if (normalizedField === 'name') { parsed.data[normalizedField] = sanitizeInput(sanitizedValue, 100); } ``` ## ContentValidator Behavior The ContentValidator correctly rejects certain dangerous patterns entirely: - Patterns with "curl" or "wget" โ†’ Rejected as "External command execution" - Command substitution `$(...)` โ†’ Rejected - Backtick execution โ†’ Rejected This provides defense-in-depth security. ## Test Infrastructure Fixes ### 1. Server Auto-Start Prevention โœ… Prevents BackupManager errors when importing server in tests - **File**: `/src/index.ts` - **Line**: 1705 - **Fix**: Check for `JEST_WORKER_ID` environment variable ### 2. Test Cleanup โœ… Prevents "Persona Already Exists" errors between tests - **File**: `/__tests__/security/tests/mcp-tools-security.test.ts` - **Added**: `beforeEach` hook to clean personas directory ### 3. Test Expectations โœ… Updated tests to properly validate security measures: - Extract actual persona names from output - Verify dangerous characters are removed - Handle both rejection and sanitization scenarios ## Verification All fixes can be verified by running: ```bash # Run security tests npm test -- __tests__/security/tests/ # Test specific sanitization node -e "import {sanitizeInput} from './dist/security/InputValidator.js'; console.log(sanitizeInput('; rm -rf /'))" # Output: "rm -rf /" ``` ## Impact These fixes prevent: - Command injection via shell metacharacters - Path traversal attacks - Text spoofing via Unicode tricks - Bypass of sanitization via edit operations The security testing infrastructure successfully identified these vulnerabilities and helped fix them.

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/DollhouseMCP/DollhouseMCP'

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