#10239: Security: Add production guard for skipSignatureVerification
channel: voice-call
stale
Cluster:
Security Enhancements and Fixes
## Summary
The `skipSignatureVerification` configuration option in the voice-call extension completely disables webhook signature verification for Twilio and Plivo providers without any runtime protection against accidental use in production environments.
## Security Impact
| Metric | Value |
|--------|-------|
| **CVSS Score** | 8.6 / 10.0 |
| **Severity** | High |
| **CWE** | CWE-347 (Improper Verification of Cryptographic Signature) |
## Attack Vector
An attacker could send forged webhook requests if a production deployment accidentally has `skipSignatureVerification: true` configured. Without signature verification, there's no way to confirm webhooks actually came from Twilio/Plivo.
## Fix
Added guards in `runtime.ts`:
1. **Production Error**: Throws an error if `NODE_ENV=production` and `skipSignatureVerification=true`
2. **Development Warning**: Logs a warning when verification is disabled in non-production environments
```typescript
if (config.skipSignatureVerification) {
if (process.env.NODE_ENV === "production") {
throw new Error("skipSignatureVerification cannot be enabled in production...");
}
logger?.warn("[voice-call] WARNING: skipSignatureVerification is enabled...");
}
```
Fixes #10228
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
<!-- greptile_comment -->
<h2>Greptile Overview</h2>
<h3>Greptile Summary</h3>
- Adds a runtime guard in `extensions/voice-call/src/runtime.ts` to prevent `skipSignatureVerification: true` when `NODE_ENV === "production"`.
- Emits a warning log when signature verification is disabled in non-production environments.
- Plumbs the existing runtime logger into provider resolution so the warning is emitted consistently during runtime initialization.
<h3>Confidence Score: 5/5</h3>
- This PR is safe to merge with minimal risk.
- Change is small and isolated to the voice-call runtime initialization path: it adds a hard fail in production when an explicitly insecure flag is enabled and logs a warning otherwise. No behavior changes occur unless `skipSignatureVerification` is set, and the new logger parameter is passed from the existing runtime logger.
- extensions/voice-call/src/runtime.ts
<!-- greptile_other_comments_section -->
<sub>(4/5) You can add custom instructions or style guidelines for the agent [here](https://app.greptile.com/review/github)!</sub>
**Context used:**
- Context from `dashboard` - CLAUDE.md ([source](https://app.greptile.com/review/custom-context?memory=fd949e91-5c3a-4ab5-90a1-cbe184fd6ce8))
- Context from `dashboard` - AGENTS.md ([source](https://app.greptile.com/review/custom-context?memory=0d0c8278-ef8e-4d6c-ab21-f5527e322f13))
<!-- /greptile_comment -->
Most Similar PRs
#21101: Security/Voice Call: gate skipSignatureVerification to local-dev or...
by bmendonca3 · 2026-02-19
78.2%
#6128: Fail closed when Telnyx webhook public key is missing (voice-call p...
by yueyueL · 2026-02-01
75.1%
#10238: Security: Fix TwiML injection via unescaped locale/language/voice p...
by StreetJammer · 2026-02-06
74.9%
#7704: fix(voice-call): add authentication to WebSocket media stream endpoint
by coygeek · 2026-02-03
74.6%
#21532: Security/Voice Call: block signed webhook replay
by bmendonca3 · 2026-02-20
74.1%
#21050: security(voice-call): path-based stream token for Twilio WebSocket ...
by richvincent · 2026-02-19
72.1%
#8175: fix: suppress raw API errors for non-owners
by Rakshi2609 · 2026-02-03
71.7%
#20155: feat(telegram): add tg-network-guard transcript status + reply flow
by artemgetmann · 2026-02-18
71.7%
#21197: Security/Voice Call: enforce exact webhook path matching
by bmendonca3 · 2026-02-19
71.7%
#21128: Security/Voice Call: require trusted proxy IPs for forwarded-header...
by bmendonca3 · 2026-02-19
71.4%