/

CVE-2026-76087

Severity:

HIGH RISK

(8.2)

Broken Access Control (CWE-639) in Formie Submissions

CVE-2026-76087

Deferred

Vulnerability type

Category:

Broken Access Control

CWE:

CWE-639, CWE-862

Impact:

Unauthorized modification of in-progress submissions and potential downstream data exposure or integrity loss

Severity:

HIGH RISK

(8.2)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Formie contains an authorization flaw in its anonymous submission endpoint that trusts a client-supplied identifier when loading incomplete submissions. An unauthenticated attacker who can identify another user's in-progress submission may overwrite or hijack its data, which could later be persisted or forwarded through notifications and integrations.

Affected context

The issue occurs in Formie deployments that support multi-page or save-for-later submissions through the anonymous formie/submissions/submit action. Risk arises when an incomplete submission is selected using a client-controlled submissionId without session binding, ownership validation, or a valid submission edit token. Completed submissions are excluded by the incomplete-submission filter.

Exploit preconditions

  • Attack surface: Publicly reachable Formie submission endpoint
  • Required access: No authentication is generally required
  • Trigger point: Submission of data to the anonymous formie/submissions/submit action
  • Required condition: An incomplete submission must exist and its identifier must be discoverable or guessable
  • Why exploitation is possible: The endpoint accepts a client-supplied identifier without adequately verifying session ownership or a valid edit token

Why this happens

The underlying bug is an authorization failure involving a user-controlled object reference. The application loads an incomplete submission based on the supplied identifier but does not consistently bind that object to the requesting user's session or require a valid capability token before allowing updates. This maps primarily to CWE-639: Authorization Bypass Through User-Controlled Key, with CWE-862: Missing Authorization also applicable because the update operation lacks an effective ownership or permission check.

Potential impact

  • An attacker may overwrite another user's in-progress form data
  • An attacker could hijack or corrupt a multi-page or save-for-later submission
  • Sensitive information may be altered before final submission
  • Modified data could be persisted in the application
  • Altered content may be forwarded through notifications or external integrations
  • Business workflows and submission records could suffer integrity loss

General mitigation guidance

Mitigation generally focuses on enforcing authorization at the point where an incomplete submission is loaded and modified.

Common defensive patterns include:

  • Bind submissions to an authenticated session, user identity, or other non-forgeable ownership context
  • Require a cryptographically strong, scoped, and validated edit token for every update path
  • Avoid treating sequential or client-controlled identifiers as authorization credentials
  • Apply consistent ownership and permission checks across save, submit, resume, and multi-page workflows
  • Use deny-by-default authorization for anonymous submission operations
  • Limit notification and integration permissions so compromised or altered records have minimal downstream reach
  • Record and monitor failed ownership, token, and access validations

How teams detect issues like this

Detection can include static analysis and code review for controller actions that load records directly from request parameters before authorization checks.

Useful signals include:

  • Client-controlled identifiers used in database lookups without session, owner, or token validation
  • Anonymous endpoints that update persisted objects
  • Authorization checks implemented for one workflow path but absent from equivalent paths
  • Sequential identifiers exposed in URLs, forms, or API requests
  • Tests that fail to verify cross-user access to incomplete records

Dynamic testing can use separate test users and attempts to access or modify each other's in-progress submissions. Automated security review tools and CI policy checks may help identify missing authorization patterns.

Sources

SourceLink
github.comgithub.com/verbb/formie/commit/323c2fe647a76fbccadf749728ee4ad9420efee1
github.comgithub.com/verbb/formie/commit/78a298ac3baf85ac283988dfce9cd42c9b958f16
github.comgithub.com/verbb/formie/releases/tag/2.2.23
github.comgithub.com/verbb/formie/releases/tag/3.1.31
github.comgithub.com/verbb/formie/security/advisories/GHSA-584p-f93j-wpgc

Frequently asked

questions

Yes. The affected action is an anonymous web endpoint, so exploitation may be possible over the network when an incomplete submission identifier can be discovered or guessed.

No authenticated account is generally required. The key conditions are access to the public submission endpoint and the ability to identify a target incomplete submission.

Enforce authorization for every incomplete-submission update by binding the record to the originating session or owner and requiring a valid, scoped edit token. Client-supplied identifiers should never serve as proof of permission.

Test every workflow transition, including save-for-later, resume, and final submit, for cross-user access. Use deny-by-default authorization, avoid predictable identifiers as security controls, and include authorization checks in code review and automated testing.

Find out what's already
exploitable in your codebase.