CVE-2026-104022: Academy LMS privilege escalation vulnerability
medium 5.4 plugin closed published 2026-10-10 · updated 2026-10-13
- Affected versions
- 4.0.3 and older
- Fixed in
- unknown
- Severity
- Medium · CVSS 5.4
- Active installs
- closed
- Type
- Privilege escalation
What an attacker needs
- Access: A low-level account on the site, such as a subscriber or customer (per the CVSS score).
CVSS vector (score by Wordfence): CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
What to do now
- Replace Academy LMS. A closed plugin gets no updates through WordPress, so this hole stays open.
- Deactivate and delete it once you have a replacement (Plugins → Deactivate → Delete). Deactivating alone leaves its files on the server.
- Not sure which version you run? Check your version against every known Academy LMS issue.
- If you ran an affected version and something looks off (new admin users, spam pages, redirects), run the free scan below.
The advisory
The Academy LMS – AI Course Builder, Quizzes, Certificates & eLearning plugin for WordPress is vulnerable to Privilege Escalation in all versions up to, and including, 4.0.3. This is due to the `add_child()` function calling `add_role('academy_student')` on any existing account resolved from the attacker-supplied `email` parameter before `Store::link()` validates the guardian-ward relationship, and failing to roll back that role write when `Store::link()` returns a `WP_Error`. This makes it possible for authenticated attackers with the `academy_guardian` role or higher to elevate any existing WordPress account — including their own — to the `academy_student` role, gaining `edit_posts` (Contributor-equivalent) capabilities and, when the student file-upload setting is enabled, `upload_files` (Author-equivalent) capabilities not granted to the guardian role. When a guardian supplies their own email address, `email_exists()` resolves to their own user ID, causing `Store::link()` to reject the self-link, but because the `add_role()` call has already executed and is never reversed, the academy_student role grant on their own account persists permanently.
References
- NVD CVE-2026-104022 nvd.nist.gov
- Wordfence advisory www.wordfence.com
- Code change (fix) plugins.trac.wordpress.org
- Plugin source plugins.trac.wordpress.org
Related
Ran an affected version? Check your site for signs of a hack
The free scan reads the public side of your site and looks for spam pages, hidden redirects, injected scripts and blacklist entries. No login, no install, about a minute.
Already hacked? Flat $499 cleanup with a 30-day reinfection guarantee.
Where this data comes from
- CVE record, score and references: NIST National Vulnerability Database (NVD), checked 2026-11-04. This product uses data from the NVD API but is not endorsed or certified by the NVD.
- Versions and install counts: wordpress.org/plugins/academy (Plugins API), fetched 2026-11-04.
- The summary, “what an attacker needs” and “what to do” sections are our plain-English reading of the record and the plugin's release history; the quoted description is the record's own text. Spot an error? Email Daniel.