Vulnerability
In the Bridge webhook handler, HMAC signature verification is gated on a nil check of the encryption key field. When the encryption key is nil (due to misconfiguration, feature flag disabled, or specific deployment modes), the entire HMAC verification block is skipped, and the webhook payload is processed as if it were authentic.
Impact
- An attacker can POST arbitrary webhook events to
/internal/webhooks/bridge/{sandboxID} and they will be processed as legitimate Bridge events.
- Fake events can inject conversations, trigger conversation naming tasks, update conversation statuses (including marking conversations as ended or errored), and publish events to the SSE event bus.
- The sandbox
last_active_at timestamp is updated, potentially skewing monitoring and billing.
- Any tenant's sandbox is affected — the sandboxID is a URL path parameter with no additional auth when HMAC is bypassed.
Endpoint
POST /internal/webhooks/bridge/{sandboxID} — the HMAC verification conditional allows the entire verification to be skipped.
Recommendation
Reject webhook requests with an explicit error when the encryption key is not configured, rather than silently skipping verification. A nil encryption key should be treated as a configuration error, not as an opt-out of security.
Vulnerability
In the Bridge webhook handler, HMAC signature verification is gated on a nil check of the encryption key field. When the encryption key is nil (due to misconfiguration, feature flag disabled, or specific deployment modes), the entire HMAC verification block is skipped, and the webhook payload is processed as if it were authentic.
Impact
/internal/webhooks/bridge/{sandboxID}and they will be processed as legitimate Bridge events.last_active_attimestamp is updated, potentially skewing monitoring and billing.Endpoint
POST /internal/webhooks/bridge/{sandboxID}— the HMAC verification conditional allows the entire verification to be skipped.Recommendation
Reject webhook requests with an explicit error when the encryption key is not configured, rather than silently skipping verification. A nil encryption key should be treated as a configuration error, not as an opt-out of security.