Read the docs

Privilege escalation in Academy LMS lets guardians gain student role

Priority LOW 23CWE-269Published · Updated

Key facts

Attack vector
Network
Privileges required
Low
User interaction
None
Attack complexity
Low
Impact type
Privilege escalation
Confidentiality · integrity · availability
Low · Low · None
Fix status
No fix listed

Attack profile from CVSS 3.1 · CNA. Fix status from CNA. Impact type from CWE-269.

Summary

The Academy LMS plugin for WordPress is affected in all versions through 4.0.3. The add_child() function assigns the academy_student role to an existing account before the guardian-ward link is validated, and it does not undo that role change when the link is rejected (CWE-269). An authenticated attacker with the academy_guardian role or higher can change any existing WordPress account, including their own, to the academy_student role and gain edit_posts capabilities.

Written with Claude Haiku 5.5 from the sources below · 2026-10-29

Description from the CNA

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.

Why it matters now

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.00125 2nd percentileScored 2026-11-07
Fix No fix listed No fixed version in the sources yet

SSVC decision points

CISA ADP · SSVC 2.0.3

Exploitation
None
Automatable
No
Technical impact
Partial

The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.

Affected products

VendorProductAffected versionsFixed inStatusSource
kodezenAcademy LMS – AI Course Builder, Quizzes, Certificates & eLearningup to 4.0.3—No fix listedCNA
  • Academy LMS – AI Course Builder, Quizzes, Certificates & eLearning Vendorkodezen Affected up to 4.0.3 Fixed in — No fix listed CNA

Remediation

The sources list no fixed version for Academy LMS.

Written with Claude Haiku 5.5 from the sources below · 2026-10-29

Timeline

  1. 2026-10-10 Threatist record created from CVE-2026-104022
  2. 2026-10-10 Alias added: GHSA-vxgf-qvq7-h87v
  3. 2026-10-11 Priority changed: MEDIUM → LOW
  4. 2026-10-11 CISA SSVC decision points changed

References

  • TI-2025-08451 Unrestricted file upload in kodezen StoreEngine — Complete eCommerce Solution with… CVSS 3.1HIGH 8.8
  • TI-2024-25935 WordPress Academy LMS plugin <= 2.0.4 - Broken Access Control vulnerability CVSS 3.1HIGH 8.8
  • TI-2025-08450 Path traversal in kodezen StoreEngine — Complete eCommerce Solution with Memberships… CVSS 3.1MEDIUM 6.5
  • TI-2025-14160 Authorization bypass in kodezen Academy LMS – WordPress LMS Plugin for Complete eLearning… CVSS 3.1CRITICAL 9.8
  • TI-2024-01406 Improper privilege management in kodezen Academy LMS – WordPress LMS Plugin for Complete… CVSS 3.1HIGH 8.8
  • TI-2026-80065 Privilege escalation in aBlocks WordPress plugin CVSS 3.1HIGH 8.8
See all 27 →

Sources