Security advisory · 26 October 2026

aBlocks privilege escalation (CVE-2026-110018): a Contributor can make themselves an Editor

On 24 October 2026 Wordfence published CVE-2026-110018, a privilege escalation flaw in the aBlocks plugin — “Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder” by Kodezen — affecting every version up to and including 2.17.0. On a site where the plugin is active and a user already holds Contributor-level access or higher, that user can raise their own WordPress role to Editor, or any other non-administrator role, through the plugin’s form-builder registration REST endpoint. It is rated High, CVSS 3.1 8.8. The flaw cannot be used by an anonymous visitor, and it cannot reach administrator on a standard installation, but Editor is enough to publish and edit everyone’s content, and privilege escalation is a common second step after a low-value account is phished or a weak membership site is joined. Kodezen fixed it in 2.18.0 on 20 October. Here is what the flaw is, who is exposed, how to check whether it was used, and what to do.

Vulnerability
CVE-2026-110018, authenticated (Contributor+) privilege escalation via the `roleSlug` block attribute, CWE-269 improper privilege management
Affected
aBlocks (Kodezen) — all versions up to and including 2.17.0, on sites where the Form Builder registration flow is reachable
Fixed in
aBlocks 2.18.0, released 20 October 2026; the hardening began in 2.17.0 and was completed in 2.18.0
Severity
CVSS 3.1 8.8 (High), vector AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Who can use it
A logged-in user with Contributor-level access or above. Not reachable anonymously; capped below administrator, so Editor is the practical ceiling on a standard install
Reported
Found by Wordfence PRISM; vendor notified 21 October, disclosed 23 October, published 24 October 2026

Start here

A role set in page content, trusted by an endpoint that forgot to check the form

aBlocks includes a Form Builder, and one of its forms is a user-registration form. A registration form can be configured to give each new account a particular role, stored on the block as an attribute called roleSlug. So that an ordinary author cannot quietly configure a form that hands out powerful roles, the plugin strips roleSlug at save time for anyone who is not an administrator — but only when the block’s form type is set to registration. That is the gap. The save-time check looks at the form type; the endpoint that acts on the role does not.

The registration is completed by a REST endpoint, /ablocks/v1/form-builder/registration, which in the affected versions is registered to run for anyone who can present a valid REST nonce. Its handler reads roleSlug straight from the block attributes saved in the post content and uses it to set the new account’s role, without re-checking that the block was actually a registration form. A Contributor can therefore save a block with its form type set to login so the save-time sanitizer leaves an arbitrary roleSlug in place, then complete the flow and have that role assigned. The account is logged in at the elevated level in the same request.

There is a real limit built in. A check the plugin calls is_safe_registration_role() refuses any role that holds the capabilities an attacker would want most — manage_options, edit_users, promote_users, edit_theme_options and the like — so the escalation stops below the administrator tier. On a default WordPress install, where Editor is the highest role without those capabilities, Editor is the ceiling. That is still a large jump from Contributor: an Editor can publish, edit and delete everyone’s posts and pages, moderate comments, and upload files, and on many sites that is the whole content estate.

Figure 1 · CVE-2026-110018 at a glance

A Contributor can reach Editor — not administrator, but far enough.

QuestionWhat the advisory saysWhat to do
SeverityAuthenticated privilege escalation in PHP, CVSS 3.1 8.8Update aBlocks, then review your users
PatchaBlocks 2.18.0, released 20 October 2026Update through the dashboard or wp plugin update ablocks
Who can use itA logged-in Contributor or above; not anonymousWatch contributor, author and member accounts
How far it reachesEditor, or any non-admin role; administrator is refusedStill enough to publish and edit everyone’s content
ExploitationNone reported in the wild; ~2,000 installsUpdate calmly, but check whether it was used
After updatingA role that already escalated is not undoneDemote, end sessions and reset any unexplained Editor
What Wordfence published about CVE-2026-110018 in aBlocks, and what each item means for a WordPress site owner or agency.

What it is

An authenticated privilege escalation. A user who already has Contributor, Author or a comparable role can promote their own account to Editor (or another non-admin role) through the aBlocks form-builder registration endpoint, by placing a role in block content the endpoint trusts without re-checking the form type.

What it is not

Not an unauthenticated flaw — a visitor with no account cannot use it. Not a route to administrator on a standard install: roles carrying the dangerous capabilities are rejected. Not a flaw in WordPress Core or in any other plugin; it is specific to aBlocks ≤ 2.17.0.

Who should act now

Any site running aBlocks that also has accounts below administrator — membership sites, multi-author blogs, client sites with contributor logins, anywhere self-registration is open. If the only logins are trusted administrators, the practical risk is low, but update regardless.

What the fix does

aBlocks 2.18.0 (building on changes in 2.17.0) ties the role assignment to whether the form’s author could assign that role themselves, widens the list of capabilities a self-registration role may never carry, and escapes dynamic content by context. After updating, a Contributor can no longer make the endpoint hand out a role.

How it works

The save-time check and the run-time action disagree about the form

The flaw is a mismatch between two checks that should have agreed. This is the shape of it, kept to what Wordfence’s advisory and the plugin’s own fixed code describe; no working exploit is reproduced here.

Two conditions bound the attack. The attacker must already hold an account that can save or own a post carrying the block — Contributor-level access or above — and must be able to present a valid REST nonce, which a logged-in user’s own session supplies. Neither is a high bar on a site that accepts contributor sign-ups or open registration, which is exactly the kind of site a form-builder registration feature is built for. The flaw is in the gap between a save-time rule keyed on form type and a run-time action that trusted the stored role regardless.

StepWhat happensWhy it matters
Save a blockA Contributor saves an aBlocks form block with its form type set to login but with a role such as editor set on itThe save-time sanitizer only removes the role for non-admins when the form type is registration; a login form keeps the attribute
The role survives reviewThe role choice travels with the post content, not with the person saving itAn administrator who later publishes a contributor’s draft carries the contributor’s role choice through unchanged — the pre-2.17.0 code never asked who wrote the form
Complete the flowThe user sends a request to the form-builder registration endpoint with a valid REST nonceThe endpoint runs for any nonce-bearing request; it reads the role from the saved block without checking the form type again
Role assignedThe handler sets the account to the attacker-chosen role and establishes the sessionThe account is now Editor (or another non-admin role) and authenticated at that level in the same request
The cap holdsThe role check rejects any role holding manage_options, edit_users, promote_users, edit_theme_options and similarEscalation cannot reach administrator on a standard install; Editor is the highest reachable role

Who is exposed

Sites with aBlocks and any account below administrator

The plugin is active on roughly 2,000 sites, a small installed base, so this is not a mass-exploitation event in the way a million-install plugin flaw would be. The risk is concentrated and specific: a site is exposed when aBlocks ≤ 2.17.0 is active and at least one account exists that is not a trusted administrator. That covers membership sites, course and community sites, multi-author publications, and agency-built client sites where editors and contributors log in. It especially covers sites that leave self-registration open, because then the attacker does not need to compromise anyone — they register, then escalate.

A site where the only logins are administrators the owner trusts has little to fear from this flaw in practice, because there is no lower-privileged account to escalate from and administrators already hold more than Editor. That is a reason to update calmly rather than a reason to skip the update: a single contributor account added later, or an administrator credential phished and used to create a foothold account, changes the picture. Update now while it is routine.

Because the account ends up at Editor rather than administrator, the damage is bounded but real. An Editor can publish and rewrite every author’s content, delete posts and pages, moderate and delete comments, and upload media — enough to inject spam or malicious markup into existing published pages, deface the site, or stage further attacks against administrators who view the content. Treat an unexplained Editor on an affected site as a compromised account, not a mystery to leave in place.

Update

Update aBlocks, and confirm the version that is actually running

The fix is aBlocks 2.18.0. The role hardening started in 2.17.0 and was completed in 2.18.0, so 2.18.0 is the version to be on. Update through the dashboard or WP-CLI, and confirm the running version afterwards rather than trusting that auto-update kept pace.

  1. 01

    Update the plugin

    From the dashboard, Plugins → Installed Plugins → aBlocks → Update now. Across several sites, WP-CLI is faster:

    WP-CLI
    wp plugin update ablocks
    wp plugin get ablocks --field=version

    The second command prints the installed version; confirm it reads 2.18.0 or newer. On a multisite network, run it against each site or use the network and url flags as appropriate.

  2. 02

    Confirm there is no rogue copy

    Privilege escalation is often used to install a second, modified plugin or a must-use plugin as a backdoor. List what is actually installed and active, including must-use plugins the dashboard hides:

    shell
    wp plugin list --status=active
    ls -la wp-content/mu-plugins/ 2>/dev/null

    Anything here you did not install is a finding in its own right. An Editor cannot normally install plugins, but an escalation chain that reached further than Editor could have, so verify rather than assume.

  3. 03

    Turn off registration you do not need

    If the site does not actually need open self-registration, turn it off at Settings → General → “Anyone can register”, or with WP-CLI, until you have updated and reviewed:

    WP-CLI
    wp option get users_can_register
    wp option update users_can_register 0

    This does not fix the flaw — a Contributor added by other means can still escalate on an unpatched site — but it removes the easiest way for an outsider to obtain the Contributor account the attack starts from.

If you were exposed

How to tell whether an account already escalated, and what to do

No indicators specific to this flaw have been published, and the escalation leaves no file of its own — it changes a role in the database and issues a login cookie. So the evidence is in the user list and the role history, not on disk. Preserve a backup before you change anything, in case you need to investigate properly.

If you find an account that escalated, do not simply lower its role and move on. Treat it as a compromised account: note what it did, demote it to the role it should have held, end its sessions, and reset its password. From WP-CLI that is a short sequence — replace the placeholders with the real user and role:

WP-CLI
wp user set-role <user> subscriber
wp user session destroy <user> --all
wp user reset-password <user>

Then widen the review to the whole site, because an account that escalated once may have created persistence that survives the demotion: new administrators, new users, scheduled events, uploaded files, modified theme or plugin files. If any of that turns up, the question is no longer a single role but a site compromise, and the cleanup guides below are the next step.

IndicatorWhere to lookWhat it means
An Editor, or any elevated role, you cannot account forUsers → All Users, filtered by role; or wp user list --role=editorThe direct result of the flaw. Match every elevated account to a reason it holds that role
A user whose role is higher than the reason it was createdThe registration date and source against the current roleA Contributor or member account that is now an Editor is the signature of this escalation
Accounts registered during open registration in early-to-mid Octoberwp user list --field=user_registered, sorted; the newest accounts firstThe window in which an attacker could register the low-privileged account the attack starts from
Posts or pages edited or published by an unexpected accountPosts → All Posts, the author and modified columns; the activity log if one is installedWhat an escalated Editor can do: rewrite or publish content, including injecting markup into existing pages
A new administrator, a changed admin email, or a new pluginwp user list --role=administrator; wp option get admin_email; the plugin list aboveSigns the incident went beyond Editor — treat the whole site as compromised and move to cleanup

Actions

The actions, in priority order

The fix exists, so updating comes first; the rest is for making sure the flaw was not used before you updated. Record what you find.

  1. 01

    Update aBlocks to 2.18.0 everywhere

    On every site that runs the plugin, update through the dashboard or wp plugin update ablocks, and confirm the running version reads 2.18.0 or newer. This is the one step that stops new escalation.

  2. 02

    Review roles above Contributor

    List every account at Author, Editor and administrator and match each to a reason it holds that role. An account whose role outranks why it exists — a member or contributor now at Editor — is the thing this flaw produces. Demote, end sessions and reset the password on anything you cannot explain.

  3. 03

    Check how low-privileged accounts get in

    Read users_can_register and the newest registrations. If open registration is not needed, turn it off; if it is, it is now a more important thing to monitor. The attack needs a Contributor-level account to start from, and open registration is the easiest way to get one.

  4. 04

    Look for persistence beyond the role

    Confirm the active and must-use plugin lists, the administrator accounts and the admin email, and recent content changes. An escalation that went further than Editor, or that an attacker used as one step, may have left a backdoor; find it before you consider the matter closed.

  5. 05

    Keep the plugin current

    aBlocks shipped security fixes in 2.16.0, 2.17.0 and 2.18.0 within three weeks. A plugin under active security maintenance is a good sign, but only if the updates are actually applied; turn on auto-updates for it, or put it on your update schedule, and verify the version rather than assume.

Sources

Where every claim in this advisory comes from

This advisory is based on the Wordfence Intelligence entry for CVE-2026-110018, published 24 October 2026, the CVE record, and the aBlocks changelog and plugin code on WordPress.org, which carry the security entries for 2.16.0, 2.17.0 and 2.18.0 and the changeset that hardened the registration role flow. The description of the mechanism, the affected and fixed versions, the CVSS rating and the Editor ceiling are taken from those. The installed-base figure is WordPress.org’s active-installations count, which is an estimate. No exploitation in the wild has been reported, and no proof of concept is reproduced here.

Common questions

Common questions about CVE-2026-110018

Can someone with no account exploit this?

No. The flaw requires an authenticated user with Contributor-level access or above, and a valid REST nonce that a logged-in session supplies. An anonymous visitor cannot use it. The risk is that an attacker obtains a low-privileged account first — through open self-registration, a phished login, or a weak membership sign-up — and then escalates.

Can an attacker become an administrator?

Not on a standard WordPress installation. The plugin rejects any role holding the capabilities that matter most — manage_options, edit_users, promote_users, edit_theme_options and similar — so the escalation stops below the administrator tier. The highest practically reachable role is Editor. On a site with unusual custom roles, check that no non-administrator role carries those capabilities.

Which version do I need?

aBlocks 2.18.0, released 20 October 2026. The hardening began in 2.17.0 and was completed in 2.18.0, so be on 2.18.0 or newer. Confirm the installed version with wp plugin get ablocks --field=version rather than assuming an automatic update applied.

I updated. Am I done?

Updating stops any new escalation, but it does not demote an account that already escalated while you were on a vulnerable version. If the site ran aBlocks ≤ 2.17.0 with contributor or open registration, review your users: an Editor or other elevated account that does not match why it was created is the signature of this flaw. Demote it, end its sessions and reset its password, then look for any wider persistence.

Does a firewall or security plugin protect me?

Partly and not reliably for this. Wordfence’s own users receive a firewall rule, and other vendors may follow, but a rule that inspects requests to the registration endpoint is harder to tune than one blocking a clear attack string, because the request looks like a legitimate registration. The dependable fix is the plugin update. A firewall is a delay, not a substitute.

We only have trusted administrators logging in. Do we still need to update?

The practical risk to such a site is low, because there is no lower-privileged account to escalate from. Update anyway: a contributor account added later, or an administrator credential phished and used to plant a foothold account, would change that, and the update is routine. Treat it as housekeeping rather than an emergency.

Choose the response path

The containment plan should match the size of the incident.

The whole site, not just the plugin

Get every account, role and capability on your WordPress sites accounted for.

Best when you run one or more sites with contributor, author or member logins, are not certain every elevated role is one you granted, and want the users, plugins, configuration and recovery readiness reviewed in one pass with a written result.

An account already looks wrong

An Editor or administrator you did not create, or content changed by an account that should not have been able to.

Best when the review has turned up an account that escalated, or content changed by it, and you want the compromise scoped, the persistence removed, and the site returned to a trusted state rather than only the one role fixed.