WordPress plugin · High, 7.2 of 10 · patched
The fix that forgot about capital letters
A booking plugin gives salon staff a role to manage customers. An earlier security fix blocked dangerous profile entries by name, and as written it blocked almost every name, capitals included. The next release made the check exact. The database that stores those entries does not care about capital letters. The same entry, spelled in capitals, walked straight past the guard, and a staff member could make any account on the site an administrator. It is public as CVE-2026-110031, scored 7.2 of 10 by WPScan, and credited to RIA Labs.
Read this part first
If your site runs an appointment booking plugin for salons, read the advisory. It names the plugin and the affected versions: 10.17 to 10.31.10. The fix shipped in 10.31.11, dated 14 October 2026 in its changelog. Update to it or later.
Then open your list of administrators. Our own suggestion, not the advisory’s: look for any account you do not recognise, and for plugins you did not install. Someone who used this bug would have ended up with an administrator account.
WPScan is holding its proof of concept back until 16 November 2026, to give sites time to update. There is no exploit code below, and none of the names that would make one easy to write.
How bad it is
7.2 of 10, WPScan’s score: CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H. Over the network, no click, and total loss on all three counts: what the site holds, what it says, and whether it runs. PR:H is the gap between WPScan’s 7.2 and our own 8.8, which treated a staff account as low privilege. Either way it is High: the attacker must already hold the staff role, which only an administrator grants. WPScan’s number is the one of record.
Do not read “staff” as one trusted person. That role can sit on a shared front-desk login. Whoever holds it can make any account an administrator. An administrator can normally install plugins, and installing a plugin is running code on the server. In our lab the promoted account reached the plugin upload form.
The first fix
10.15, which fixed an earlier privilege-escalation CVE in this plugin, CVE-2025-31560, added a guard here. Our report called what we found an incomplete fix of it: the same code. WPScan’s range for ours starts at 10.17.
The code lets staff save extra details about a customer, a list of names and values, into that customer’s profile. The 10.15 fix skipped any name that starts with the prefix WordPress uses for its own sensitive profile entries. It was written loosely, and as written it blocked almost every name, capitals included.
The next release made the comparison exact. Exact meant exact letters. But WordPress keeps those entries in a database table, and the database compares names without regard to capitals. A name in capitals no longer matched the blocked prefix, and landed in the same stored row anyway.
Making a guard exact is a change to what it lets through, and it needs its own test. A guard that compares by letters, in front of a database that does not, is a common way for a blocklist to fail.
The alibi we checked
The plugin has a second way to edit customers, through its REST interface. We read it for the same fault. It demanded administrator rights and wrote only three fixed fields, so that door was shut. We checked because one of its read paths lets a user view their own record, and we wanted to be sure it did not also write.
How we know
A description is not a finding. We ran 10.31.0 on a throwaway local site. Our own agent found it. We did not take its word: we ran it again with fresh accounts and our own negative control.
Our first run did not reproduce. The victim stayed an ordinary customer. The fault was our test: it never reached the code we meant to test. We found that out before calling the result a verdict. An empty result is explained first, and only then does it count.
Then the real run. The attacker was a staff account. The users page refused it, so it was not an administrator, though it could open the customers screen. After the request, the victim account was an administrator, and logging in with it reached the users page, the settings and the plugin upload form. The control sent the same request with the name in the lowercase the old fix expected. It did nothing: the victim stayed a customer and the users page stayed closed to them.
Three questions for your own fixes
None of this is specific to one plugin. Any fix that blocks a name is worth asking these about.
- Does the fix stop the bug, or one spelling of it? Test more than the spelling you expected. If the guard only knows the form you expected, it will not hold.
- Does your code compare names the way your database does? A check made in code and a lookup made in a database can disagree about whether two names are the same.
- Which roles can write arbitrary names into a user profile? A form that writes whatever it is sent should be the most restricted form you have, not the most convenient.
None of it needs exotic tooling. It needs someone to read the fix as an attacker would, with the first fix open next to it.
What it proves, and what it doesn’t
It proves a staff account made another account an administrator on 10.31.0, and the capitals did it: the lowercase control did nothing.
It does not prove we found this alone or first. The plugin’s own changelog credits RIA Labs and one other researcher for the fix, and the WPScan record lists RIA Labs. We ran 10.31.0 only, though the affected range is wider, and we did not test a multisite install. We have not retested 10.31.11 for this post, and the listing shows 2,000+ active installs, so we cannot say how many sites have updated.
If you ship a plugin, or run a site full of them, we’ll read it. Nominate a target and the first scan costs nothing.
Published 16 October 2026. CVE-2026-110031 · CVSS 3.1 base score 7.2 · CWE-269 (Improper Privilege Management) · credited to RIA Labs, scored and published by WPScan. Status as of 19 October 2026. Corrections, or a plugin you maintain and want looked at: info@ria-labs.com.
See what a scan turns up
Nominate a target. The first scan costs nothing, and we’ll walk you through it.