CVE-2026-29787
mcp-memory-service: System Information Disclosure via Health Endpoint
mcp-memory-service is an open-source memory backend for multi-agent systems. Prior to version 10.21.0, the /api/health/detailed endpoint returns detailed system information including OS version, Python version, CPU count, memory totals, disk usage, and the full database filesystem path. When MCP_ALLOW_ANONYMOUS_ACCESS=true is set (required for the HTTP server to function without OAuth/API key), this endpoint is accessible without authentication. Combined with the default 0.0.0.0 binding, this exposes sensitive reconnaissance data to the entire network. This issue has been patched in version 10.21.0.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- Low
- Integrity
- None
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
5.3
mcp-memory-service: System Information Disclosure via Health Endpoint
mcp-memory-service is an open-source memory backend for multi-agent systems. Prior to version 10.21.0, the /api/health/detailed endpoint returns detailed system information including OS version, Python version, CPU count, memory totals, disk usage, and the full database filesystem path. When MCP_ALLOW_ANONYMOUS_ACCESS=true is set (required for the HTTP server to function without OAuth/API key), this endpoint is accessible without authentication. Combined with the default 0.0.0.0 binding, this exposes sensitive reconnaissance data to the entire network. This issue has been patched in version 10.21.0.
- Record
CVE-2026-29787- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N - Weakness
- CWE-200
- Updated
- 2026-11-02
EUVDEUVD-2026-10165
5.3
mcp-memory-service is an open-source memory backend for multi-agent systems. Prior to version 10.21.0, the /api/health/detailed endpoint returns detailed system information including OS version, Python version, CPU count, memory totals, disk usage, and the full database filesystem path. When MCP_ALLOW_ANONYMOUS_ACCESS=true is set (required for the HTTP server to function without OAuth/API key), this endpoint is accessible without authentication. Combined with the default 0.0.0.0 binding, this exposes sensitive reconnaissance data to the entire network. This issue has been patched in version 10.21.0.
- Record
EUVD-2026-10165- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-73hc-m4hx-79pj
5.3
mcp-memory-service Vulnerable to System Information Disclosure via Health Endpoint
Summary
The /api/health/detailed endpoint returns detailed system information including OS version, Python version, CPU count, memory totals, disk usage, and the full database filesystem path. When MCP_ALLOW_ANONYMOUS_ACCESS=true is set (required for the HTTP server to function without OAuth/API key), this endpoint is accessible without authentication. Combined with the default 0.0.0.0 binding, this exposes sensitive reconnaissance data to the entire network.
Details
Vulnerable Code
health.py:90-101 - System information collection
system_info = {
"platform": platform.system(), # e.g., "Linux", "Darwin"
"platform_version": platform.version(), # Full OS kernel version string
"python_version": platform.python_version(),# e.g., "3.12.1"
"cpu_count": psutil.cpu_count(), # CPU core count
"memory_total_gb": round(memory_info.total / (1024**3), 2),
"memory_available_gb": round(memory_info.available / (1024**3), 2),
"memory_percent": memory_info.percent,
"disk_total_gb": round(disk_info.total / (1024**3), 2),
"disk_free_gb": round(disk_info.free / (1024**3), 2),
"disk_percent": round((disk_info.used / disk_info.total) * 100, 2)
}
health.py:131-132 - Database path disclosure
if hasattr(storage, 'db_path'):
storage_info["database_path"] = storage.db_path # Full filesystem path
Authentication Bypass Path
The /api/health/detailed endpoint uses require_read_access which calls get_current_user. When MCP_ALLOW_ANONYMOUS_ACCESS=true, the auth middleware grants access:
# middleware.py:372-379
if ALLOW_ANONYMOUS_ACCESS:
logger.debug("Anonymous access explicitly enabled, granting read-only access")
return AuthenticationResult(
authenticated=True,
client_id="anonymous",
scope="read",
auth_method="none"
)
Note: The basic /health endpoint (line 68) has no auth dependency at all and returns version and uptime information unconditionally.
Information Exposed
| Field | Example Value | Reconnaissance Value |
|-------|--------------|---------------------|
| platform | "Linux" | OS fingerprinting |
| platform_version | "#1 SMP PREEMPT_DYNAMIC..." | Kernel version → CVE targeting |
| python_version | "3.12.1" | Python CVE targeting |
| cpu_count | 8 | Resource enumeration |
| memory_total_gb | 32.0 | Infrastructure profiling |
| database_path | "/home/user/.mcp-memory/memories.db" | Username + file path disclosure |
| database_size_mb | 45.2 | Data volume estimation |
Attack Scenario
- Attacker scans the local network for services on port 8000
- Finds mcp-memory-service with HTTP enabled and anonymous access
- Calls
GET /api/health/detailed(no credentials needed) - Receives OS version, Python version, full database path (revealing username), system resources
- Uses this information to:
- Target known CVEs for the specific OS/Python version
- Identify the database file location for potential direct access
- Profile the system for further attacks
PoC
# Show the system info that would be exposed
import platform, psutil
system_info = {
"platform": platform.system(),
"platform_version": platform.version(),
"python_version": platform.python_version(),
"cpu_count": psutil.cpu_count(),
"memory_total_gb": round(psutil.virtual_memory().total / (1024**3), 2),
}
print(system_info) # All of this is returned to unauthenticated users
Impact
- OS fingerprinting: Exact OS and kernel version enables targeted exploit selection
- Path disclosure: Database path reveals username, home directory structure, and file locations
- Resource enumeration: CPU, memory, and disk info reveal infrastructure scale
- Reconnaissance enablement: Combined information significantly reduces attacker effort for follow-up attacks
Remediation
- **Remove…
- Record
GHSA-73hc-m4hx-79pj- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N - Weakness
- CWE-200
- Updated
- 2026-11-02
NVD
5.3
mcp-memory-service is an open-source memory backend for multi-agent systems. Prior to version 10.21.0, the /api/health/detailed endpoint returns detailed system information including OS version, Python version, CPU count, memory totals, disk usage, and the full database filesystem path. When MCP_ALLOW_ANONYMOUS_ACCESS=true is set (required for the HTTP server to function without OAuth/API key), this endpoint is accessible without authentication. Combined with the default 0.0.0.0 binding, this exposes sensitive reconnaissance data to the entire network. This issue has been patched in version 10.21.0.
- Record
CVE-2026-29787- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N - Weakness
- CWE-200
- Updated
- 2026-11-02
OSV
5.3
mcp-memory-service: System Information Disclosure via Health Endpoint
mcp-memory-service is an open-source memory backend for multi-agent systems. Prior to version 10.21.0, the /api/health/detailed endpoint returns detailed system information including OS version, Python version, CPU count, memory totals, disk usage, and the full database filesystem path. When MCP_ALLOW_ANONYMOUS_ACCESS=true is set (required for the HTTP server to function without OAuth/API key), this endpoint is accessible without authentication. Combined with the default 0.0.0.0 binding, this exposes sensitive reconnaissance data to the entire network. This issue has been patched in version 10.21.0.
- Record
CVE-2026-29787- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N - Weakness
- CWE-200
- Updated
- 2026-11-02
OSVGHSA-73hc-m4hx-79pj
5.3
mcp-memory-service Vulnerable to System Information Disclosure via Health Endpoint
Summary
The /api/health/detailed endpoint returns detailed system information including OS version, Python version, CPU count, memory totals, disk usage, and the full database filesystem path. When MCP_ALLOW_ANONYMOUS_ACCESS=true is set (required for the HTTP server to function without OAuth/API key), this endpoint is accessible without authentication. Combined with the default 0.0.0.0 binding, this exposes sensitive reconnaissance data to the entire network.
Details
Vulnerable Code
health.py:90-101 - System information collection
system_info = {
"platform": platform.system(), # e.g., "Linux", "Darwin"
"platform_version": platform.version(), # Full OS kernel version string
"python_version": platform.python_version(),# e.g., "3.12.1"
"cpu_count": psutil.cpu_count(), # CPU core count
"memory_total_gb": round(memory_info.total / (1024**3), 2),
"memory_available_gb": round(memory_info.available / (1024**3), 2),
"memory_percent": memory_info.percent,
"disk_total_gb": round(disk_info.total / (1024**3), 2),
"disk_free_gb": round(disk_info.free / (1024**3), 2),
"disk_percent": round((disk_info.used / disk_info.total) * 100, 2)
}
health.py:131-132 - Database path disclosure
if hasattr(storage, 'db_path'):
storage_info["database_path"] = storage.db_path # Full filesystem path
Authentication Bypass Path
The /api/health/detailed endpoint uses require_read_access which calls get_current_user. When MCP_ALLOW_ANONYMOUS_ACCESS=true, the auth middleware grants access:
# middleware.py:372-379
if ALLOW_ANONYMOUS_ACCESS:
logger.debug("Anonymous access explicitly enabled, granting read-only access")
return AuthenticationResult(
authenticated=True,
client_id="anonymous",
scope="read",
auth_method="none"
)
Note: The basic /health endpoint (line 68) has no auth dependency at all and returns version and uptime information unconditionally.
Information Exposed
| Field | Example Value | Reconnaissance Value |
|-------|--------------|---------------------|
| platform | "Linux" | OS fingerprinting |
| platform_version | "#1 SMP PREEMPT_DYNAMIC..." | Kernel version → CVE targeting |
| python_version | "3.12.1" | Python CVE targeting |
| cpu_count | 8 | Resource enumeration |
| memory_total_gb | 32.0 | Infrastructure profiling |
| database_path | "/home/user/.mcp-memory/memories.db" | Username + file path disclosure |
| database_size_mb | 45.2 | Data volume estimation |
Attack Scenario
- Attacker scans the local network for services on port 8000
- Finds mcp-memory-service with HTTP enabled and anonymous access
- Calls
GET /api/health/detailed(no credentials needed) - Receives OS version, Python version, full database path (revealing username), system resources
- Uses this information to:
- Target known CVEs for the specific OS/Python version
- Identify the database file location for potential direct access
- Profile the system for further attacks
PoC
# Show the system info that would be exposed
import platform, psutil
system_info = {
"platform": platform.system(),
"platform_version": platform.version(),
"python_version": platform.python_version(),
"cpu_count": psutil.cpu_count(),
"memory_total_gb": round(psutil.virtual_memory().total / (1024**3), 2),
}
print(system_info) # All of this is returned to unauthenticated users
Impact
- OS fingerprinting: Exact OS and kernel version enables targeted exploit selection
- Path disclosure: Database path reveals username, home directory structure, and file locations
- Resource enumeration: CPU, memory, and disk info reveal infrastructure scale
- Reconnaissance enablement: Combined information significantly reduces attacker effort for follow-up attacks
Remediation
- **Remove…
- Record
GHSA-73hc-m4hx-79pj- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N - Weakness
- CWE-200
- Updated
- 2026-11-02
OSVPYSEC-2026-2623
5.3
mcp-memory-service Vulnerable to System Information Disclosure via Health Endpoint
Summary
The /api/health/detailed endpoint returns detailed system information including OS version, Python version, CPU count, memory totals, disk usage, and the full database filesystem path. When MCP_ALLOW_ANONYMOUS_ACCESS=true is set (required for the HTTP server to function without OAuth/API key), this endpoint is accessible without authentication. Combined with the default 0.0.0.0 binding, this exposes sensitive reconnaissance data to the entire network.
Details
Vulnerable Code
health.py:90-101 - System information collection
system_info = {
"platform": platform.system(), # e.g., "Linux", "Darwin"
"platform_version": platform.version(), # Full OS kernel version string
"python_version": platform.python_version(),# e.g., "3.12.1"
"cpu_count": psutil.cpu_count(), # CPU core count
"memory_total_gb": round(memory_info.total / (1024**3), 2),
"memory_available_gb": round(memory_info.available / (1024**3), 2),
"memory_percent": memory_info.percent,
"disk_total_gb": round(disk_info.total / (1024**3), 2),
"disk_free_gb": round(disk_info.free / (1024**3), 2),
"disk_percent": round((disk_info.used / disk_info.total) * 100, 2)
}
health.py:131-132 - Database path disclosure
if hasattr(storage, 'db_path'):
storage_info["database_path"] = storage.db_path # Full filesystem path
Authentication Bypass Path
The /api/health/detailed endpoint uses require_read_access which calls get_current_user. When MCP_ALLOW_ANONYMOUS_ACCESS=true, the auth middleware grants access:
# middleware.py:372-379
if ALLOW_ANONYMOUS_ACCESS:
logger.debug("Anonymous access explicitly enabled, granting read-only access")
return AuthenticationResult(
authenticated=True,
client_id="anonymous",
scope="read",
auth_method="none"
)
Note: The basic /health endpoint (line 68) has no auth dependency at all and returns version and uptime information unconditionally.
Information Exposed
| Field | Example Value | Reconnaissance Value |
|-------|--------------|---------------------|
| platform | "Linux" | OS fingerprinting |
| platform_version | "#1 SMP PREEMPT_DYNAMIC..." | Kernel version → CVE targeting |
| python_version | "3.12.1" | Python CVE targeting |
| cpu_count | 8 | Resource enumeration |
| memory_total_gb | 32.0 | Infrastructure profiling |
| database_path | "/home/user/.mcp-memory/memories.db" | Username + file path disclosure |
| database_size_mb | 45.2 | Data volume estimation |
Attack Scenario
- Attacker scans the local network for services on port 8000
- Finds mcp-memory-service with HTTP enabled and anonymous access
- Calls
GET /api/health/detailed(no credentials needed) - Receives OS version, Python version, full database path (revealing username), system resources
- Uses this information to:
- Target known CVEs for the specific OS/Python version
- Identify the database file location for potential direct access
- Profile the system for further attacks
PoC
# Show the system info that would be exposed
import platform, psutil
system_info = {
"platform": platform.system(),
"platform_version": platform.version(),
"python_version": platform.python_version(),
"cpu_count": psutil.cpu_count(),
"memory_total_gb": round(psutil.virtual_memory().total / (1024**3), 2),
}
print(system_info) # All of this is returned to unauthenticated users
Impact
- OS fingerprinting: Exact OS and kernel version enables targeted exploit selection
- Path disclosure: Database path reveals username, home directory structure, and file locations
- Resource enumeration: CPU, memory, and disk info reveal infrastructure scale
- Reconnaissance enablement: Combined information significantly reduces attacker effort for follow-up attacks
Remediation
- **Remove…
- Record
PYSEC-2026-2623- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
mcp-memory-servicePyPI |
before 10.21.0 | 10.21.0 |
mcp-memory-servicePyPI |
before 10.21.0, plus listed versions 10.0.010.0.110.0.210.0.310.1.0 Show 45 moreShow less10.1.110.1.210.10.010.10.110.10.210.10.310.10.410.10.510.10.610.11.010.11.110.11.210.12.010.12.110.13.010.13.110.13.210.14.010.15.010.15.110.16.010.16.110.17.010.17.1010.17.1210.17.1310.17.1410.17.1510.17.1610.17.210.17.310.17.410.17.510.17.610.17.710.17.810.17.910.18.010.18.110.18.210.18.310.19.010.2.010.2.110.20.0 |
10.21.0 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-29787 is a medium vulnerability (CVSS 5.3) in Doobidoo Mcp-memory-service, published March 5, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.41%, the 35th percentile. Fixed in mcp-memory-service 10.21.0.
References
github.com/doobidoo/mcp-memory-service/security/advisories/GHSA-73hc-m4hx-79pj
github.com/doobidoo/mcp-memory-service/commit/18f4323ca92763196aa2922f691dfbeb6bd84e48
nvd.nist.gov/vuln/detail/CVE-2026-29787
github.com/advisories/GHSA-73hc-m4hx-79pj
github.com/CVEProject/cvelistV5/tree/main/cves/2026/29xxx/CVE-2026-29787.json
github.com/doobidoo/mcp-memory-service
pypi.org/project/mcp-memory-service
Left out here: 131 versions and the rest of 3 source descriptions. The JSON record has them.