FD-2026-001 — GET /v1/webhooks returned the full signing secret
What was exposed
GET /v1/webhooks returned the full 64-character signing secret for every
registered endpoint, on every call. The
registration docs stated the secret was
returned once, at registration, and not afterwards. That was not true of this
endpoint for the period above.
Who could reach it
The endpoint requires a valid API key and returns only the endpoints belonging to that key. A caller received their own secrets, over TLS, and never anyone else’s. There was no unauthenticated path to the data and no path for one account to read another account’s secret.Why it still required a fix
A signing secret is the only thing that distinguishes a genuine FastDrop webhook from a forged one. Placing it in a routine list response put it everywhere such responses go: proxy and gateway logs, HTTP client caches, application debug output, terminal scrollback, screen shares, and support tickets. Any of those copies is a working key. Whoever holds one can sign a request your handler will verify and accept as ours. The scope above bounds who could read the response. It does not bound where the response was subsequently written.What changed
The endpoint now returnssecret_prefix — the first 8 characters, enough to tell
two endpoints apart and useless for signing. The full secret is returned only by
Register Webhook and
Rotate Secret, each of which returns it
exactly once.
What you should do
Rotate the signing secret for any endpoint registered before 2026-08-15 if a response fromGET /v1/webhooks was written anywhere durable — a log
aggregator, an error tracker, a CI transcript, a saved HTTP session, a ticket, a
recording.
GET /v1/webhooks, or only ever called it interactively
without persisting the output, the secret was not written anywhere it had not
already been by registration, and there is nothing to do.