The Synapse core engineering team takes security and container sandbox isolation very seriously. We appreciate your efforts to responsibly disclose your findings and will make every effort to acknowledge your contribution promptly.
Only the latest active release train of Synapse targeting JDK 25+ receives active security updates and vulnerability patches.
| Version | Java Target | Supported |
|---|---|---|
0.0.x (main) |
Java 25 | ✅ Yes |
| < 0.0.1 (Legacy / Java 21) | Java 21 | ❌ No |
If you discover a security vulnerability, sandbox escape, or improper token handling issue within Synapse, DO NOT create a public GitHub issue. Public disclosure of security flaws prior to remediation puts existing deployments at risk.
Instead, please report the vulnerability privately via email to the project maintainer:
- Maintainer Contact: Fatih Celik
- Private Disclosure Email:
celikfatih@protonmail.com
When submitting your private report, please provide:
- Description: A summary of the vulnerability and potential impact (e.g., container escape, token leakage, unauthorized outbox tampering).
- Steps to Reproduce: Minimal reproduction steps, sample payload (
SubmitTaskCommand), or proof-of-concept scripts. - Environment: Version of Synapse (
maincommit hash), Docker version, and Java build specification. - Suggested Remediation (if known): Any code or configuration recommendations to remediate the issue.
- Acknowledgement: We will acknowledge receipt of your private vulnerability report within 48 hours.
- Triage & Assessment: We will verify the vulnerability and assign a priority/severity rating within 5 business days.
- Remediation & Patch: We aim to release a verified security fix within 14 days of confirmation, depending on complexity and testing requirements.
- Public Disclosure & Credit: Once the patch is published and deployed, we will issue a public GitHub Security Advisory crediting your discovery (unless you request anonymity).
Because Synapse executes automated code modifications and shell verification commands (--test-cmd) via headless AI (aider), we enforce strict multi-layered security boundaries by design:
- Non-Root Ephemeral Sandbox Execution:
AI coding agents (
DockerAiderExecutionAdapter) run exclusively inside unprivileged Docker container sandboxes (synapse-sandbox:java25, UID1000) with strict CPU/memory quotas (8g,4 CPUs). Never run Synapse or its worker adapters asrooton host bare-metal systems. - Control Plane Git Ownership:
Headless Aider executes with
--no-auto-commits. The AI inside the sandbox cannot push arbitrary commits directly to remote origins. Synapse's control plane (GitRepositoryPort/JGitRepositoryAdapter) validates the test outcome before signing and pushing commits using isolated HTTPS token credentials (SYNAPSE_GIT_TOKEN). - Correlation & Audit Logging:
Every incoming webhook (
Slack,REST) generates a uniqueCorrelationIdpropagated through the Outbox, Kafka record headers, and container execution logs to ensure full cryptographic and operational traceability. - Inbound Slack Signature Verification (
X-Slack-Signature): All incoming Slack webhook requests (/api/slack/events,/api/slack/commands) pass throughSlackSignatureVerificationFilter. Every request must include theX-Slack-Request-TimestampandX-Slack-Signatureheaders. The filter verifies that the request timestamp is within 5 minutes of the system clock (preventing replay attacks) and verifies the HMAC-SHA256 signature (v0=...) calculated overv0:<timestamp>:<body_bytes>against the configured secret (SYNAPSE_SLACK_SIGNING_SECRET). Any missing, outdated, or invalid signature immediately yields HTTP401 Unauthorized.
Thank you for helping keep Synapse and our community safe!