Skip to content

fix(EverCore): require MinIO credentials from environment (CWE-798)#206

Closed
sebastiondev wants to merge 645 commits into
EverMind-AI:mainfrom
sebastiondev:fix/cwe798-docker-compose-hardcoded-0857
Closed

fix(EverCore): require MinIO credentials from environment (CWE-798)#206
sebastiondev wants to merge 645 commits into
EverMind-AI:mainfrom
sebastiondev:fix/cwe798-docker-compose-hardcoded-0857

Conversation

@sebastiondev
Copy link
Copy Markdown

Summary

methods/EverCore/docker-compose.yaml ships with the literal MinIO vendor defaults (minioadmin / minioadmin) hardcoded as MINIO_ACCESS_KEY / MINIO_SECRET_KEY for the memsys-milvus-minio service. The same compose file publishes the MinIO ports 9000 and 9001 to the host (the default bind is 0.0.0.0). Anyone who follows the EverCore quickstart and runs docker compose up from a fresh clone exposes a MinIO instance on the network with credentials that are publicly known and continuously scanned for by automated bots.

This PR makes the credentials required environment variables so compose refuses to start until the operator sets explicit values.

  • CWE: CWE-798: Use of Hard-coded Credentials
  • File: methods/EverCore/docker-compose.yaml (the memsys-milvus-minio service block)
  • Severity: High — default credentials grant full S3-compatible read/write on the Milvus object store the moment ports 9000/9001 are reachable.

Fix

-      MINIO_ACCESS_KEY: minioadmin
-      MINIO_SECRET_KEY: minioadmin
+      MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:?Set MINIO_ACCESS_KEY in your .env file}
+      MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:?Set MINIO_SECRET_KEY in your .env file}

The ${VAR:?message} form is a Compose/Bash interpolation that aborts startup with a clear error if the variable is unset or empty — failing closed instead of silently inheriting the insecure default.

methods/EverCore/env.template is updated with placeholder entries (change-me-...) and a comment pointing at the compose requirement, so the existing cp env.template .env workflow continues to work — the operator just has to substitute values.

What I tested

  • docker compose -f methods/EverCore/docker-compose.yaml config with no .env: aborts with the Set MINIO_ACCESS_KEY in your .env file message (fail-closed verified).
  • Same command with MINIO_ACCESS_KEY / MINIO_SECRET_KEY set in .env: renders the expected configuration with the operator-supplied values.
  • No other service in the compose file references MINIO_ACCESS_KEY / MINIO_SECRET_KEY (Milvus reads the bucket through its own client config), so this change is self-contained.

Why it's exploitable in practice

The preconditions are minimal:

  1. An operator runs docker compose up against methods/EverCore/docker-compose.yaml without overriding the credentials (the documented quickstart path).
  2. The MinIO ports become reachable to an attacker — typical scenarios include developer laptops on shared LAN/Wi-Fi, cloud VMs where security groups expose the port, Docker bypassing host firewalls (a well-known footgun), or accidental public exposure on a demo box.

When both hold, the attacker uses minioadmin:minioadmin against http://target:9000 and gets full bucket access — read/write/delete of any objects Milvus stores there. Internet-wide scanners actively probe for exactly this credential pair.

Scope note

There is a separate hardcoded-credentials issue with the MongoDB service in the same file. I'm keeping that change in its own PR so each fix can be reviewed and reverted independently.

Adversarial review

Before submitting I tried to disprove this — looked for an existing mitigation that would make the report moot. There isn't one: the compose file has no 127.0.0.1: host binding on the MinIO ports, no override file ships defaults from the environment, and env.template did not previously contain MINIO_* entries, so an operator copying the template would not be prompted to change them. The credentials really are the literal vendor default that bots scan for, and they really are reachable on whatever interface Docker binds to. The fix is the minimal change that converts a silent insecure default into a loud, fail-fast configuration error.

cc @lewiswigmore

Xingze.Gao and others added 30 commits December 25, 2025 14:20
Feat/profilev2

See merge request npc-work/aic/ai/evermemos-opensource!61
Feat/update demo

See merge request npc-work/aic/ai/evermemos-opensource!62
Use self-deployed embedding and rerank APIs by default

See merge request npc-work/aic/ai/evermemos-opensource!64
cyfyifanchen and others added 23 commits April 15, 2026 14:40
Update EverMemOS: optimize search perf, improve skill search
chore: add devcontainer configuration and development tooling
Fix/unify port in demo and docs to the default 1995
Update the GitHub asset URLs for all banner images to ensure they point to the correct and current locations. This includes fixing a typo in a section title from "LAI Wearable" to "AI Wearable".
Update the asset IDs for the banner GIFs in the README to point to the correct new assets.
…ind-AI#186)

* feat: add game of throne demo and claude code plugin use cases

Add two new use cases to the repository:
1. Game of Thrones Story Memory Demo - A full-stack web application demonstrating EverMem's memory capabilities through a side-by-side comparison interface for book Q&A
2. Claude Code Plugin - A memory plugin for Claude Code that automatically stores and retrieves context from past coding sessions

The demo includes React frontend, Express backend, Docker configurations, and novel loading scripts. The plugin provides hooks for automatic memory injection and search capabilities.

* docs: update readme links to use relative paths for use cases
Update the banner image URL in the README file to point to the new asset location.
…erMind-AI#192)

server.ts used 8001 but the EverMemOS server default is 1995.
This broke local demo runs unless EVERMEMOS_URL was manually set.

Fixes EverMind-AI#28

Co-authored-by: pazyork <pazyorkcc@gmail.com>
Skip tool call/response msg in profile generation
* feat(use-cases): add OpenHer persona engine with EverMemOS integration

OpenHer is an AI Being engine that creates personas with emergent
personality, emotional thermodynamics, and long-term memory.

EverMemOS integration:
- 4D relationship vector (depth, valence, trust, foresight)
  expands neural network perception from 8D to 12D
- Async two-stage memory retrieval (fire on Turn N,
  collect on Turn N+1) with 500ms timeout + graceful fallback
- Semi-emergent relationship EMA blending EverMemOS priors
  with LLM-judged deltas per turn
- Fire-and-forget turn storage via asyncio.create_task

Includes:
- README with architecture diagrams and integration walkthrough
- Runnable demo with simulation mode (no EverMemOS needed)
- Core integration code: mixin, types, context features
- .env.example with placeholder values

Repo: https://github.com/kellyvv/OpenHer

* docs: rewrite README — storytelling style, emotion-first

* docs: English README, storytelling style, no emoji

* rename: openher-persona-engine → openher

---------

Co-authored-by: kellyzxiaowei <129767595+kellyzxiaowei@users.noreply.github.com>
* chore: rename project from evermemos to EverCore

This commit renames the project directory and updates all internal references from "evermemos" to "EverCore". The changes include:
- Renaming the main directory from `methods/evermemos` to `methods/EverCore`
- Updating all import paths and module references
- Maintaining the same code structure and functionality
- Adding new configuration files (.vscode/settings.json, .pylintrc, pyrightconfig.json)
- Updating Dockerfile and project metadata

* docs: update references from evermemos to EverCore

Update documentation files to reflect the renaming of the 'evermemos' directory to 'EverCore'. This includes fixing clone commands, directory paths, and documentation links across multiple files to ensure consistency and correct navigation for users.

* chore: rename EverMemOS to EverCore across codebase

This is a project-wide rebranding from EverMemOS to EverCore. The changes include:
- Update project name in source files, documentation, and configuration
- Rename API references, environment variables, and service names
- Modify demo descriptions and benchmark configurations
- Update URLs and citations to reflect new project identity

All functionality remains identical; only naming has changed to align with the new project branding.

* docs: update README with EverCore focus and restructured TOC

- Add line break before Table of Contents for better visual separation
- Rewrite project description to highlight EverCore as the central component
- Reorder directory tree to prioritize benchmarks and methods over use-cases
- Update use-cases list with more examples and clarify they are templates
- Improve flow from Quick Start to use-cases to benchmarks

* docs: update README with clearer methods description and benchmarks

Add benchmark numbers directly in the method summaries for better visibility.
Clarify introductory text to emphasize choice and composition of methods.

* docs: fix markdown formatting in README table of contents

Adjust whitespace and line breaks to ensure proper rendering of the collapsible table of contents section.
@lewiswigmore
Copy link
Copy Markdown

Closing this as inactive — no maintainer response after 14 days.

The security finding and fix remain valid. If this is still relevant, I'm happy to reopen, rebase, or re-submit against a different branch. Just drop a comment.

1 similar comment
@lewiswigmore
Copy link
Copy Markdown

Closing this as inactive — no maintainer response after 14 days.

The security finding and fix remain valid. If this is still relevant, I'm happy to reopen, rebase, or re-submit against a different branch. Just drop a comment.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.