/

CVE-2026-107622

Severity:

CRITICAL RISK

(9.8)

Privilege Escalation (CWE-269) in BuddyForms WordPress

CVE-2026-107622

Deferred

Vulnerability type

Category:

Privilege Escalation

CWE:

CWE-269

Impact:

Unauthenticated account creation with administrator-level privileges, potentially leading to full site takeover

Severity:

CRITICAL RISK

(9.8)

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

BuddyForms has a privilege-escalation flaw in its public form-submission flow: unauthenticated submissions can cause attacker-controlled form settings to be registered and used to create accounts with elevated roles. The risk arises when WordPress registration is enabled and a public BuddyForms form is available.

BuddyForms has a privilege-escalation flaw in its public form-submission flow: unauthenticated submissions can cause attacker-controlled form settings to be registered and used to create accounts with elevated roles. The risk arises when WordPress registration is enabled and a public BuddyForms form is available.

Affected context

The issue lies in BuddyForms' frontend submission handler and the save handler for newly inserted BuddyForms posts. The public submission path checks whether the target form permits public submissions, but does not consistently bind the submitted post type to that form; the save handler also lacks capability and form-builder nonce checks when persisting options. Exploitation depends on site configuration, including enabled WordPress registration and an available public BuddyForms form.

The issue lies in BuddyForms' frontend submission handler and the save handler for newly inserted BuddyForms posts. The public submission path checks whether the target form permits public submissions, but does not consistently bind the submitted post type to that form; the save handler also lacks capability and form-builder nonce checks when persisting options. Exploitation depends on site configuration, including enabled WordPress registration and an available public BuddyForms form.

Exploit preconditions

  • Attack surface: Public BuddyForms frontend submission and WordPress registration flow
  • Required access: No authenticated account is required when the affected public flow is available
  • Trigger point: Submission that leads to creation of a BuddyForms post and subsequent registration through the rogue form configuration
  • Required configuration: WordPress "Anyone can register" must be enabled, and at least one public BuddyForms form must be attached to a page
  • Why exploitation is possible: The handler uses the form's public-submission setting without adequately checking the attacker-supplied post type for new-object creation; the save listener persists supplied form options without a capability check or builder nonce
  • Attack surface: Public BuddyForms frontend submission and WordPress registration flow
  • Required access: No authenticated account is required when the affected public flow is available
  • Trigger point: Submission that leads to creation of a BuddyForms post and subsequent registration through the rogue form configuration
  • Required configuration: WordPress "Anyone can register" must be enabled, and at least one public BuddyForms form must be attached to a page
  • Why exploitation is possible: The handler uses the form's public-submission setting without adequately checking the attacker-supplied post type for new-object creation; the save listener persists supplied form options without a capability check or builder nonce

Why this happens

This is an authorization and privilege-management failure (CWE-269). The submission handler treats permission to submit to a public form as sufficient authorization for a separate object-creation path, while trusting a client-controlled post-type value. For newly inserted BuddyForms posts, the save listener persists submitted options without verifying the caller's capabilities or validating a form-builder nonce. Together, these checks allow untrusted input to alter global form configuration and influence the role assigned during registration.

This is an authorization and privilege-management failure (CWE-269). The submission handler treats permission to submit to a public form as sufficient authorization for a separate object-creation path, while trusting a client-controlled post-type value. For newly inserted BuddyForms posts, the save listener persists submitted options without verifying the caller's capabilities or validating a form-builder nonce. Together, these checks allow untrusted input to alter global form configuration and influence the role assigned during registration.

Potential impact

  • Unauthenticated attackers may create accounts with administrator-level privileges
  • Attackers could gain broad control over site content, settings, and users
  • A compromised administrator account could be used to install malicious components or maintain access
  • Site data and availability may be put at risk
  • Unauthenticated attackers may create accounts with administrator-level privileges
  • Attackers could gain broad control over site content, settings, and users
  • A compromised administrator account could be used to install malicious components or maintain access
  • Site data and availability may be put at risk

General mitigation guidance

Defensive patterns should ensure that public submission permissions cannot authorize unrelated object types or configuration changes. Treat client-supplied post types and form options as untrusted, bind submissions to the intended server-side form, and enforce capability checks and nonce validation before saving privileged settings. Apply least privilege to registration roles, disable open registration when it is not needed, and restrict access to administrative form-building functions. Validate configuration against an explicit schema before adding it to a live registry.

Defensive patterns should ensure that public submission permissions cannot authorize unrelated object types or configuration changes. Treat client-supplied post types and form options as untrusted, bind submissions to the intended server-side form, and enforce capability checks and nonce validation before saving privileged settings. Apply least privilege to registration roles, disable open registration when it is not needed, and restrict access to administrative form-building functions. Validate configuration against an explicit schema before adding it to a live registry.

How teams detect issues like this

Review public submission and save-handler code for paths where client-controlled identifiers select post types or configuration targets. Check that authorization is performed for every object type and operation, including creation of new objects, and that sensitive saves require both appropriate capabilities and request-integrity validation. Monitor for unexpected BuddyForms post creation, changes to form options or registration roles, and new accounts receiving elevated roles. Static analysis and CI policies can flag missing authorization checks on write paths and untrusted request data used in privileged configuration.

Review public submission and save-handler code for paths where client-controlled identifiers select post types or configuration targets. Check that authorization is performed for every object type and operation, including creation of new objects, and that sensitive saves require both appropriate capabilities and request-integrity validation. Monitor for unexpected BuddyForms post creation, changes to form options or registration roles, and new accounts receiving elevated roles. Static analysis and CI policies can flag missing authorization checks on write paths and untrusted request data used in privileged configuration.

Sources

SourceLink
github.comgithub.com/Themekraft/buddyforms/pull/779/files
plugins.trac.wordpress.orgplugins.trac.wordpress.org/browser/buddyforms/tags/2.10.2/includes/admin/register-post-types.php#L216
plugins.trac.wordpress.orgplugins.trac.wordpress.org/browser/buddyforms/tags/2.10.2/includes/form/form-control.php#L258
plugins.trac.wordpress.orgplugins.trac.wordpress.org/browser/buddyforms/tags/2.10.2/includes/form/form-control.php#L642
plugins.trac.wordpress.orgplugins.trac.wordpress.org/browser/buddyforms/tags/2.10.2/includes/form/form.php#L476
plugins.trac.wordpress.orgplugins.trac.wordpress.org/browser/buddyforms/tags/2.10.2/includes/wp-insert-user.php#L241
plugins.trac.wordpress.orgplugins.trac.wordpress.org/browser/buddyforms/tags/2.10.2/includes/wp-insert-user.php#L702
plugins.trac.wordpress.orgplugins.trac.wordpress.org/changeset/3780268/buddyforms/trunk/includes/admin/register-post-types.php
wordfence.comwordfence.com/threat-intel/vulnerabilities/id/2e83e654-f8a6-44a6-a687-92606331309e?source=cve

Frequently asked

questions

The affected flow is exposed through public frontend submissions. Exploitation requires the relevant WordPress registration and BuddyForms configuration to be present.

The described attack can be performed without authentication when "Anyone can register" is enabled and a public BuddyForms form is available.

Authorize each object creation and configuration change independently. Do not trust client-supplied post types or settings, and require capability checks and request-integrity validation for privileged saves.

Keep public submission paths separate from administrative configuration writes, use least-privilege registration roles, validate inputs against a strict schema, and review every write handler for explicit authorization.

The affected flow is exposed through public frontend submissions. Exploitation requires the relevant WordPress registration and BuddyForms configuration to be present.

The described attack can be performed without authentication when "Anyone can register" is enabled and a public BuddyForms form is available.

Authorize each object creation and configuration change independently. Do not trust client-supplied post types or settings, and require capability checks and request-integrity validation for privileged saves.

Keep public submission paths separate from administrative configuration writes, use least-privilege registration roles, validate inputs against a strict schema, and review every write handler for explicit authorization.

Find out what's already
exploitable in your codebase.