Vulnerability Disclosure & Bug Bounty Policy
Last updated: April 21, 2026
Available on: Mac, Windows, iOS, Android
Found a security vulnerability in Wispr Flow? This policy explains how to report it, what qualifies for a bounty, and the legal protections offered to researchers who follow responsible disclosure practices.
What this policy covers
This policy is designed to:
Encourage responsible security research and disclosure
Provide a clear reporting process for security vulnerabilities
Define what is in scope and out of scope for testing
Establish triage timelines for reported issues
Outline reward and severity guidance
Offer safe-harbor legal assurances for researchers who follow the policy
How to report a vulnerability
Report security vulnerabilities via email to security@wisprflow.ai.
Note: There is no in-app vulnerability reporting path — email directly.
Required information
Include all of the following when submitting a report. Submissions missing required fields will be returned for completion before triage begins.
Concise summary: Title and short description
CVSS vector string: A full CVSS 3.1 or 4.0 vector (not just a score). Example:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HCWE classification: The relevant CWE ID. Example: CWE-601 (URL Redirection to Untrusted Site)
Proof-of-concept: A functional, independently reproducible exploit — curl commands, scripts, or video walkthrough with timestamps. Must be reproducible at least 50% of the time.
Affected systems: Domains, application versions, and platforms
Evidence of testing: Specific HTTP response headers, status codes, timestamps, or server identifiers from Wispr's actual production systems
Testing details: Time window and relevant IP addresses
Contact information: Preferred method for follow-up
Submission quality & original research
Submissions must reflect original, hands-on security research performed by the submitter against Wispr Flow's actual production systems.
Reports that are primarily generated by AI tools without demonstrated manual verification and testing will be closed without review.
Indicators that may result in immediate closure:
Generic vulnerability descriptions not specific to Wispr Flow
Fabricated or fictitious technical details (e.g., referencing technologies Wispr doesn't use)
No evidence of actual interaction with Wispr systems
Scanner output (Burp Suite, Nessus, Nuclei) submitted without manual analysis
Internally inconsistent CVSS vectors
Submissions substantially identical in structure to other reports
Submission limits
Researchers may submit a maximum of 5 bounty-eligible reports per calendar month. Additional submissions beyond this limit will be queued but not eligible for bounty. This limit resets monthly and does not apply to Critical-severity findings.
Response timeline
All timelines below are measured from the acknowledgment date, except remediation targets, which begin after final classification & payout.
Stage | Timeline | Clock starts |
Acknowledgment | Within 3 business days | Date report received |
Initial triage | Within 10 business days | Acknowledgment |
Final classification & payout | Within 30 business days | Acknowledgment |
Remediation — Critical | Within 7 days | Final classification & payout |
Remediation — High | Within 30 days | Final classification & payout |
Remediation — Medium | Within 90 days | Final classification & payout |
Scope
In-scope assets
Domains:
*.wisprflow.aiand associated production domains/subdomains (excludingroadmap.wisprflow.ai— third-party hosted, see Out-of-scope)Production backend APIs: api.wisprflow.ai and dl.wisprflow.com (auto-update CDN)
Production backend dependencies: Supabase (*.supabase.co) and Baseten (*.api.baseten.co) are backend dependencies, though these are third-party hosted services
Client applications: Electron, macOS, Windows, iOS, and Android clients — issues affecting confidentiality, integrity, or availability beyond normal user operation
High-impact issues: Auth/authz flaws, data leakage, RCE, cryptographic misuse, serious misconfigurations, client-side enforcement bypasses where server-side validation is absent, auto-update supply-chain integrity
Infrastructure: Servers, containers, production databases, public S3 buckets, public cloud services
Note: Android has limited functionality compared to other clients. Core surfaces: dictation, floating bubble, transcript history, account profile, privacy mode toggle. No in-app subscription, no language selection UI, no dictionary/snippets, no feature flags. Enterprise users have privacy mode auto-enabled and locked client-side (cannot be changed by the user).
Out-of-scope items
Infrastructure & third-party:
Third-party services on non-Wispr domains (stripe.com, supabase.com, AWS console)
Subdomains not owned/managed by Wispr Flow
Attack categories:
Social engineering / phishing targeting Wispr employees
Social-engineering-dependent attack chains: Vulnerabilities whose exploitation relies on social engineering of any person (including non-Wispr users) under constraints that are highly unlikely in real-world conditions may be classified at lower severity than the hypothetical impact suggests. Severity is assessed based on realistic exploitability, not best-case attacker assumptions. For example, an attack requiring a victim to perform a complex, unusual sequence of actions in a narrow time window will be treated as lower severity than one requiring a single click.
Denial-of-service (DoS/DDoS) or load-testing
MITM attacks against HTTPS endpoints, including claims based on missing certificate pinning
Low-impact / theoretical findings:
Self-XSS: XSS that only fires in the submitter's own session (e.g., HTML injection in support forms visible only to internal staff)
Missing/non-critical security headers unless part of a working exploit chain
Clickjacking on pages with no sensitive state-changing actions
Software version disclosure without demonstrated exploit chain
SSL/TLS configuration issues without practical attack (BEAST, POODLE on non-vulnerable configs)
Missing CAA DNS records unless combined with real certificate misissuance
CSRF on unauthenticated or low-impact forms
Rate limiting & brute force:
Rate limiting or brute force without a demonstrated complete attack chain resulting in account compromise or data exposure. IP rotation to bypass IP-based rate limits is an inherent limitation of IP-based rate limiting, not a vulnerability. Reports must show end-to-end impact.
Authentication token storage:
Token storage in browser localStorage or cookies — this is the default behavior of Supabase Auth. Without a demonstrated XSS chain leveraging stored tokens for session hijacking, this is Informational.
Third-party dependency issues:
Vulnerabilities in third-party dependencies without a demonstrated exploit path specific to Wispr Flow. Reporting a CVE without showing exploitability in Wispr's context is not bounty-eligible.
Submission quality:
Scanner output (Burp, Nessus, Nuclei) submitted without manual validation
Non-security bugs / UX issues — submit via product feedback
Local-only issues unless they reveal a systemic problem
If unsure whether an issue is in scope, report it anyway — Wispr Flow will triage it.
Duplicate reports
Only the first reporter of a given vulnerability is eligible for a bounty. Wispr Flow tracks all reported findings internally. If your submission describes an issue that has already been reported, you will be notified that it is a duplicate and no payout will be issued. If you believe your finding is a novel variant of a previously reported issue, include a clear explanation of how it differs.
Reward and severity guidance
Rewards are based on actual impact, exploitability, and report quality. All awards are granted at Wispr Flow's discretion following internal validation.
Minimum bounty eligibility
Bounty payments require a minimum severity of Medium (CVSS 4.0+ or equivalent). Low and Informational findings are accepted and acknowledged but not eligible for monetary reward.
Severity levels
Wispr Flow classifies severity based on what is independently verified, not what the reporter claims.
Informational / Best Practice — $0
Missing CAA records, non-critical security headers
General security advice
Theoretical attacks without demonstrated exploitability
Working-as-designed behavior behind proper auth controls
Token storage in localStorage without XSS chain
Low — $0 (acknowledgment only)
Limited information leakage (non-sensitive data, stack traces)
Predictable session tokens with short TTL
Minor auth flaws without account takeover
Reflected XSS in limited contexts
Medium — $500 to $2,000
Authorization bypass on non-sensitive accounts
OAuth redirect token theft requiring social engineering
CSRF with sensitive state-changing actions
Stored XSS requiring victim interaction
SSRF reaching internal metadata with mitigations
Wispr example: OAuth redirect_to manipulation leaking tokens to attacker server after victim clicks crafted link.
High — $2,000 to $5,000
Authenticated RCE
Direct privilege escalation (regular user → enterprise admin)
Persistent XSS impacting many users without victim interaction
Significant PII exfiltration
Wispr example: Bypassing X-Impersonate-Enterprise middleware to perform write operations as impersonated enterprise.
Critical — $5,000+
Unauthenticated RCE in production
Full database exfiltration of PII/credentials
Active credential leaks enabling large-scale ATO
Supply-chain compromise of auto-update infrastructure (dl.wisprflow.com)
Wispr example: Unauthenticated access to Supabase admin API enabling bulk user data export.
Severity decision factors
User interaction? None (Critical/High) → Single click (Medium) → Complex chain (Low)
Scale? Mass/bulk (Critical) → Multiple users (High) → Single user (Medium/Low)
Auth required? Unauthenticated (Critical) → Unauth + user interaction (Medium) → Authenticated (varies)
Requires victim to grant access first? If attacker must be invited/onboarded before exploitation → Informational (insider threat, not a vulnerability)
Partial rewards
A partial reward (lower end of range) may be issued when:
The vulnerability is valid but actual impact is lower than the tier suggests
The PoC is incomplete but the vulnerability can be independently confirmed
The finding is a novel variant of a known issue adding meaningful new information
Reports that remain unreproducible after clarification will be closed.
Responsible disclosure
Researchers are asked to avoid public disclosure until:
Wispr Flow has remediated the issue, or
A mutually agreed disclosure date has been reached
Standard window: 90 days from acknowledgment.
Exceptions: May be shortened or extended if actively exploited or if legal/regulatory obligations require earlier disclosure.
If you plan to publish, notify Wispr Flow at least 7 days before public disclosure. When possible, Wispr Flow will publish a coordinated advisory.
Safe harbor and legal protection
If you follow this policy and act in good faith, Wispr Flow will not initiate legal action against you, provided you:
Avoid unnecessary data exfiltration beyond what demonstrates impact
Do not publicly disclose details before coordination
Do not perform DoS or service-degrading tests
Warning: Wispr Flow reserves the right to deny safe harbor if testing is reckless, destructive, or violates this policy.
Report template
All fields marked * are required.
Title: *
Affected component(s) / domain(s): *
CVSS 3.1 vector string: *
CWE ID: *
Summary (1–2 lines): *
Impact (what an attacker can do): *
Steps to reproduce (curl commands, scripts, or video with timestamps): *
Evidence of testing (response headers, timestamps, server identifiers): *
Evidence (screenshots, logs, exploit code):
Remediation suggestion:
Test time window & IP(s): *
Confirmation: "I confirm this report reflects original research performed by me against Wispr Flow's production systems." *
Contact information: *
FAQs
Are missing CAA records eligible for a bounty?
Informational only — bounty-eligible if combined with real certificate misissuance.
Are subdomain takeovers in scope?
Yes, if the takeover allows control of a Wispr Flow domain (e.g., dangling CNAME).
Are client-side issues eligible?
Yes, if they result in remote compromise or user data leakage beyond expected behavior.
Are Low-severity findings bounty-eligible?
No. Bounty requires minimum Medium severity (CVSS 4.0+). Valid Low findings may receive hall of fame recognition.
Can I use AI tools in my research?
As research assistants, yes. The submission must reflect hands-on testing you performed. AI-generated reports without manual verification will be closed.
What if my finding is a duplicate?
Only the first reporter is eligible for a bounty. If you believe your finding is a novel variant, include a clear explanation of how it differs.
Is there a submission limit?
5 bounty-eligible reports per month per researcher. Critical findings are exempt.
Researcher notes
API keys: 35 characters starting with
fl-Electron CSP: Allowlisted domains, includes
unsafe-evalandunsafe-inlineinscript-src(production builds only)Auth token caching: Short delay between revocation and enforcement
Platform differences: iOS vs desktop authorization logic varies
Electron renderer:
sandbox: false,contextIsolation: true,nodeIntegration: falseCertificate pinning: System root CAs (macOS via mac-ca, Windows root store via win-ca) filtered by isRootCA() (self-signed + CA flag), merged with Node.js built-in Mozilla root certificates. Windows only queries root store (not ca store).
OAuth redirects: Strict domain allowlist (wisprflow.ai, *.wisprflow.ai, platform.flowvoice.ai, localhost, Vercel previews)
OAuth callbacks: Tokens (access_token, refresh_token, email, name, user_id) passed as URL query params in redirects — exposed to server logs, browser history, referrer headers
API key storage: Stored hashed (bcrypt), Redis cached (300s sliding TTL); SHA-256 used only for cache key derivation; last-4-char pre-filtering for DB lookups; JWTs support server-side revocation with DB expiry check
CORS:
/api/v1/dash/*permissive; all other endpoints restricted allowlistCORS dash endpoints:
/api/v1/dash/*allows credentialed requests from any origin (allow_credentials=True with wildcard)Admin impersonation:
X-Impersonate-Enterpriseheader enforces read-only (mutations return 403)Internal admin endpoints:
/api/v1/internal— publicly routable, no IP allowlist; protected by @wispr.ai email check only (TODO: add role check, affects ~40 endpoints). Superadmin endpoints require both email + SuperAdmin roleRate limiting: Four strategies — user ID, install UUID, client IP, email from body
Email signup rate limiter: 3 attempts per email per hour (Redis-backed); fails closed (HTTP 503) on Redis failure
Install UUID rate limiter: Malformed UUIDs bucketed under shared 'install:invalid' key
Redis API key cache TTL: Sliding (resets on every hit) — frequently-used keys stay cached indefinitely
LLM rate limiter: 3 concurrent + 5/10s per user (in-process, non-Redis)
Desktop subscription: Cached on disk, refreshed hourly, stale cache when offline. Retries once with 2s delay before cache fallback. Enterprise past_due treated as active; personal past_due treated as non-premium.
Premium validation: iOS treats
past_due/pausedas premium; desktop does notEnterprise SSO: Enforcement disabled if subscription lapses, even if setting is ON
Word usage limits: Client-side only — no server-side enforcement on transcription API
Audio transport: Android/iOS: gRPC streaming primary, HTTP REST fallback (Android rejects >10MB). Desktop: WebSocket primary (gRPC rolling out via feature flag), WebSocket fallback. gRPC failure triggers 3-hour cooldown on desktop. Android retries up to 3x on auth errors.
Transcription data: Storage depends on privacy mode and enterprise settings. Privacy mode OFF (default): data stored server-side. Privacy mode ON or enterprise ZDR enabled: zero data retention. Desktop also has local data policy (StoreNormally/DeleteAfter24h/NeverStore) configurable per-user or enterprise-enforced.
Desktop auth tokens: Stored in file-based electron-store, not browser localStorage
Auto-update: 3 release channels (prod, beta, override). Safety: random stagger up to 1h, exponential backoff, 20-min post-dictation cooldown, max 3 retries then 24h pause
API key revocation on org removal: All keys created by removed user are auto-deleted
JWT validation: DB-stored expires_at checked independently of JWT signature expiry
Production infrastructure: Includes Supabase (dodjkfqhwrzqjwkfnthl.supabase.co) and Baseten (chain-o232k03l.api.baseten.co) — not listed in domain scope
hCaptcha: Uses wispr.ai domain (not wisprflow.ai)
DevTools: Disabled in production builds