Problem
The VEXA_API_KEY is stored as an environment variable (shown in
.env.example) with no documentation on:
- What the Vexa API key authorizes (e.g. whether it can create unlimited bots
that consume transcription minutes).
- How to detect unauthorized usage of the key.
- How to rotate the key if it is leaked.
- Whether the key is scoped to specific meetings or is a global account key.
If the key is leaked (e.g. accidentally committed to the repository or exposed
in server logs), an attacker can start Vexa bots for any meeting, consuming
the account's transcription quota or incurring charges without limit.
Impact
- Unauthorized meeting bot creation and quota exhaustion.
- Potential exposure of meeting invites and transcription data if bots are
started for meetings the attacker does not own.
- Financial cost from unauthorized usage of a paid transcription service.
Suggested Fix
- Document in
BACKEND.md the minimum required Vexa API permissions and
how to create a restricted-scope key if the Vexa API supports it.
- Add usage monitoring (Vexa dashboard alerts or webhook notifications) to
detect unexpected bot activity.
- Document a key rotation procedure in
BACKEND.md.
- Store the Vexa key only in Supabase Edge Function secrets, never in the
Flutter client or any client-accessible configuration.
- Add
.env to .gitignore (verify it is not currently tracked) to prevent
accidental commits.
Problem
The
VEXA_API_KEYis stored as an environment variable (shown in.env.example) with no documentation on:that consume transcription minutes).
If the key is leaked (e.g. accidentally committed to the repository or exposed
in server logs), an attacker can start Vexa bots for any meeting, consuming
the account's transcription quota or incurring charges without limit.
Impact
started for meetings the attacker does not own.
Suggested Fix
BACKEND.mdthe minimum required Vexa API permissions andhow to create a restricted-scope key if the Vexa API supports it.
detect unexpected bot activity.
BACKEND.md.Flutter client or any client-accessible configuration.
.envto.gitignore(verify it is not currently tracked) to preventaccidental commits.