Echo is a production AI voice-calling system that handles real customer phone calls, Shopify order data, personal phone numbers, and conversation transcripts. Security vulnerabilities here can have direct consequences for end-customers and shop operators. We take all reports seriously and respond promptly.
Only the latest commit on main is actively maintained and eligible for security patches.
| Branch / Tag | Supported |
|---|---|
main (latest) |
✅ Actively supported |
| Older commits | ❌ No patches |
The following components and data surfaces are in scope:
- Webhook endpoints — Shopify
orders/createHMAC verification, LiveKit egress webhook, tool-call secret (X-COD-Tool-Secret) - Outbound call dispatch —
/calls/dispatch, Retell AI trigger, Twilio ConversationRelay TwiML, LiveKit SIP trigger - Tool endpoints —
confirm_order,cancel_order,request_human_agent,request_callback(authenticated viaLIVEKIT_TOOL_SECRET) - Relay WebSocket server —
src/relay-server.jsatwss://…/relay/ws - Database access — Prisma/PostgreSQL (
Session,ScheduledCall,CallAttempt,CallTurn) - Audio/transcript storage — Cloudflare R2 bucket access and egress URI handling
- Secrets management —
.envkeys for Retell, ElevenLabs, Sarvam, OpenAI, Vobiz SIP, Twilio, Shopify, R2 - Multi-tenant isolation —
ALLOWED_SHOPSallowlist, per-shop HMAC secrets,STORE_BRANDINGmapping
Out of scope: the private prompt repository, third-party providers (Retell AI, ElevenLabs, Twilio, Sarvam, OpenAI, Vobiz, Shopify), and infrastructure-level issues outside this codebase.
Please do not file public GitHub issues for security vulnerabilities.
Report security issues privately to:
📧 help.nuraveda@gmail.com
Subject line: [SECURITY] Echo — <brief description>
- A clear description of the vulnerability and affected component
- Steps to reproduce or a proof-of-concept (sanitized — no real customer data)
- The potential impact (e.g., unauthenticated call dispatch, PII exposure, order mutation)
- Your suggested severity (Critical / High / Medium / Low)
| Stage | Timeline |
|---|---|
| Acknowledgement | Within 48 hours |
| Initial triage & severity assessment | Within 5 business days |
| Fix or mitigation shipped | Within 14 days for Critical/High; best-effort for lower severity |
| Disclosure coordination | We will notify you before any public disclosure |
We do not currently offer a bug bounty program, but we will credit researchers in the changelog (with your permission).
These are the primary controls in place — useful context when evaluating findings:
- Shopify webhook authentication — every
orders/createevent is verified withcrypto.timingSafeEqualHMAC comparison using the per-shop secret fromSHOPIFY_WEBHOOK_SECRETS. Shops not inALLOWED_SHOPSreceive HTTP 403. - Tool endpoint authentication — all agent→server tool calls require the
X-COD-Tool-Secretheader, compared withcrypto.timingSafeEqual. - Outcome atomicity —
ScheduledCalloutcome writes useupdateManywith a non-terminal-status guard to prevent double-writes (e.g., confirm then cancel on the same order). - DND enforcement — outbound calls are blocked outside the configured DND window (default 20:00–10:00 IST). The
/flow-test-livekitendpoint bypasses DND and must never be exposed publicly in production. - DPDP Act consent disclosure — a recording consent disclosure is played at call greeting (
RECORDING_CONSENT_DISCLOSURE=on). Disabling this in regions that legally require consent is a compliance issue. - SIP credential isolation — Vobiz SIP credentials (
VOBIZ_SIP_HOST,VOBIZ_SIP_USERNAME,VOBIZ_SIP_PASSWORD) are environment-only and never committed to the repository. - Retell config redaction —
retell/agent.config.jsonhas the tool secret redacted in git and rehydrated at apply time viapnpm retell:apply. Verify this before everypnpm retell:capturecommit. - No public tool endpoints — tool callback routes must be behind a firewall or authenticated proxy and must never be openly routable on the public internet.
- Multi-tenant isolation — branding and webhook secrets are keyed per
shopdomain. A misconfiguredSHOPIFY_WEBHOOK_SECRETSorALLOWED_SHOPScan allow cross-shop order mutations; verify both on every new store onboard.
Echo processes the following categories of personal and sensitive data:
| Data type | Storage | Retention |
|---|---|---|
| Customer phone numbers | PostgreSQL (ScheduledCall) |
Operator-managed |
| Conversation transcripts (text) | PostgreSQL (CallTurn) |
Operator-managed |
| Call recordings (audio) | Cloudflare R2 (MP4/Opus) | Operator-managed |
| Shopify order details (product, amount, address) | PostgreSQL + R2 | Operator-managed |
Operators are responsible for configuring retention policies and access controls on their PostgreSQL instance and R2 bucket in accordance with DPDP Act (India) and any applicable data protection laws.
- Dependencies are managed via
pnpmwith a committed lockfile (pnpm-lock.yaml). Audit regularly withpnpm audit. - Pre-commit hooks (
.pre-commit-config.yaml) should include secret-scanning. Never commit real API keys, SIP credentials, or webhook secrets. - The
.env.examplefile must never contain real values — it is a template only.
Echo is part of Mesh Pilot — the AI marketing-operations platform by Nuraveda Labs.
Built for Indian e-commerce, shipping production AI voice agents that confirm COD orders, qualify leads, and handle support callbacks at scale.
Echo is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.