EcoSeek is pre-alpha. This document describes the current security posture — what is implemented, what is tested, and what remains open. If a rule here conflicts with code in the repository, the rule wins and the code is a bug.
Last updated: 2026-05-18, after P0 stabilization.
For the complete threat model with 24 scenarios, 12 assets, 6 threat actor profiles, and risk matrix, see the full-stack threat model in the knowledgebase.
.env files with real values, no service-account JSON.YOUR_DEEPSEEK_API_KEY) and document the shape of a secret, never an example value that could be mistaken for a real one.alrobles/agenticSeek has TruffleHog pre-commit scanning to catch secrets before they are committed.For users who supply their own keys (e.g. DeepSeek):
~/.config/ecoseek/keys.json. Keys are never committed, logged, or transmitted to EcoSeek infrastructure.cryptography library is not installed, the keystore raises KeystoreCryptoUnavailable with an actionable error message. It never silently downgrades to base64 or plaintext storage.python -m sources.keystore {set|get|list|delete}. Revocation is immediate.Implementation: agenticSeek PR #23, agenticSeek PR #33. 41 keystore tests.
GitHub proves who the user is. AgenticPlug decides what the user can do.
admin, operator, read_only), and issues a 128-bit crypto-random session ID.admin: full access including session management and approval decisions.operator: task execution and read access; cannot manage sessions.read_only: read-only access; cannot execute tasks or approve actions.X-Role or body role fields are ignored.Six capabilities are approval-gated: hpc.submit, hpc.cancel, hpc.write, hpc.delete, hpc.credential, hpc.systemd. The authorizer runs before the approval gate — read_only users get forbidden before any approval request is created. SHA-256 request binding prevents approving one action and executing another. Approvals expire after a configurable TTL (default 15 min).
Implementation: AgenticPlug PRs #49, #57, #58, #66, #67, #68, #74. 600+ tests.
The following are considered risky and must go through the gateway:
The gateway makes an explicit, auditable decision based on the caller, the requested action, and the active policy. “Allow all” is not a valid default — the gateway fails closed when no policy matches.
Tool.save_block() resolves all paths against the agent’s work_dir using os.path.realpath() + os.path.commonpath(). Blocked: ../ traversal, absolute paths outside work_dir, symlink escapes. Re-validates after directory creation to close TOCTOU windows. Error messages omit host paths.
Implementation: agenticSeek PR #33. 12 jail tests.
safety.py maintains allowlists/blocklists for shell commands. P0 fix corrected a missing comma that concatenated "route" and "--force" into a single entry, bypassing both filters.
Implementation: agenticSeek PR #33. 11 safety tests.
exec() in the code interpreter runs with full os/sys/__builtins__. No process-level sandbox.safe_mode defaults to False — the safety filter is opt-in, not opt-out.Three-layer defense for remote file access:
.. check, absolute path, POSIX allowlist, path.resolve, local realpath).readlink -f over SSH before tail catches remote symlinks escaping allowed roots. Fails closed on SSH failure, timeout, or non-POSIX output.execFileSync with argument arrays, not string concatenation.HPC_ALLOWED_LOG_PATHS validated at startup; invalid entries (including /) prevent the connector from starting.
Implementation: AgenticPlug PRs #69, #74. 29 symlink tests + 86 HPC tests.
| Layer | Threats | Status |
|---|---|---|
| Client | API key theft, raw token misuse, sandbox escape | Partial — keystore implemented, sandbox not fully hardened |
| Gateway | Unauth access, session hijack, role escalation, scope bypass, approval bypass, replay | Implemented and tested (600+ tests) |
| Compute | Path traversal, job injection, token leak, SSH credential exposure | Implemented with defense in depth |
| Infrastructure | Supply chain, GitHub OAuth, workstation compromise, SQLite corruption | Minimal deps, WAL mode, process controls |
| Human | Secrets in git, tokens in chat, misconfigured allowlists | Process controls, startup validation, TruffleHog |
For the complete catalog with mitigations, residual risk, and recommendations, see the full-stack threat model.
EcoSeek does not yet have a dedicated public security contact. Until one is published here, report suspected issues by opening a private issue in the relevant repository, or contacting the maintainers directly through the channel they used to invite you to the project.