Security Overview
Security is not a feature of Honeybee — it’s a property of every commit. The platform has undergone 6 rounds of security audits across all 7 repositories, with 90+ findings identified and fixed before any public release.
Philosophy
Section titled “Philosophy”- Defense in depth: Every layer scans, validates, and constrains independently
- Fail closed: When in doubt, block. Carapace blocks on scan failure, not passes
- Zero trust agents: Agent IDs are server-generated, never client-supplied
- Opt-in telemetry: Only structural metadata (counts, scores, latency) — never content
- Zero dependencies where it matters: Carapace scanner has zero npm dependencies — no supply chain attack surface
Audit history
Section titled “Audit history”| Round | Scope | Findings | Status |
|---|---|---|---|
| Round 1 | Hivemind (6 packages) | 13 | All fixed |
| Round 2 | Hivemind (6 packages) | 16 | All fixed |
| Round 3 | Hivemind (6 packages) | 16 | All fixed |
| Round 4 | Hivemind (6 packages) | 13 | All fixed |
| Round 6 | All 7 repos (full sweep) | 48 | All fixed |
| Anti-spoofing | Incubator | 3 layers | Verified |
Total: 90+ findings identified and fixed, 1,165+ tests passing.
What was audited
Section titled “What was audited”- Input validation and sanitization
- Authentication and token handling
- Injection vectors (command, SQL, XSS, prompt)
- Secrets exposure (env vars, logs, error messages)
- OWASP Top 10 where applicable
- Cloudflare Worker-specific: binding security, Durable Object access control
- Carapace-specific: detection bypass, evasion patterns
- ReDoS (regular expression denial of service)
- SSRF (server-side request forgery)
- Race conditions and atomicity
Finding severity breakdown
Section titled “Finding severity breakdown”High (10 in Round 6 alone)
Section titled “High (10 in Round 6 alone)”- Command injection via shell concatenation (fixed:
execFileSyncwith array args) - Unauthenticated WebSocket connections (fixed: shared-secret token auth)
- Shell injection via message content (fixed: per-platform escaping)
eval()of user commands (fixed:bash -cwith escaping)- No input length limits (fixed: 100KB for scan, 1MB for API, 10MB for proxy)
- SSRF via gateway (fixed: private IP/loopback blocking)
- Command injection via domain names (fixed: domain validation regex)
- KV cache with no TTL (fixed: 1-hour expiration)
- Missing MFA re-verification (fixed: require TOTP code)
- Null user_id bypass (fixed: explicit null guard)
Medium (20 in Round 6)
Section titled “Medium (20 in Round 6)”- Header injection (CRLF), namespace path traversal, unbounded responses
- YAML prototype pollution, ReDoS in glob matching, wildcard CORS
- Unbounded request bodies, guard bypass on messages
- Redis claim TOCTOU (fixed: Lua script atomic CAS)
- Protocol spec injection, streaming scanner chunk bypass
- Token refresh race condition (fixed: promise-based mutex)
- CSV injection in audit exports
Low (18 in Round 6)
Section titled “Low (18 in Round 6)”- File permissions, token visibility, PATH injection
- Namespace validation, snapshot permissions, event caps
- Session ID validation, GraphiQL disabled, cache prefix isolation
- Generic error messages (no info leakage)
Security checklist
Section titled “Security checklist”Every code change is mentally reviewed against this checklist:
- Every external input validated with explicit type + range checks
- Every SQL query uses parameterized placeholders
- Every shell invocation uses
execFile/spawnwith array args - Every error response returns a generic message
- Every
console.errorlogserr.messageonly - Every secret comparison uses
timingSafeEqual - Every pagination has bounded limit/offset
- Every file operation validates paths against traversal (
../) - Every regex from user input is rejected or escaped
- Every
JSON.parseis wrapped in try/catch - Every identity (agent ID, session ID) is server-generated
- Every WebSocket requires authentication
Anti-spoofing (latest)
Section titled “Anti-spoofing (latest)”The incubator implements 3-layer anti-spoofing:
- WebSocket pinning: Connection-level agent ID takes precedence over per-message IDs
- Session tokens: 48-character hex tokens mapped to agents via
SessionStore - Token passing: Orchestrator registers agents and passes
ACP_SESSION_TOKENto subprocesses
This prevents any client from impersonating another agent — a critical requirement for multi-agent coordination where agents may have different trust levels.
Related
Section titled “Related”- Scanner — how Carapace detection works
- eBPF Firewall — kernel-level network interception
- Audit Trail — what Nectar captures
- Privacy — data handling and opt-in policies