Every CVE Search/ Get API key

CVE-2026-57995

phpMyFAQ - Privilege Escalation via Missing Self-Rights Constraint in GroupController::updatePermissions

8.7 HighFix available

phpMyFAQ before 4.1.5 contains a privilege escalation vulnerability in GroupController::updatePermissions that allows GROUP_EDIT administrators to grant arbitrary rights to groups without verifying they hold those rights themselves. A delegated administrator can exploit this by assigning high-value permissions to a group they belong to, inheriting those rights and escalating privileges up to full administrative control.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
Low
User interaction
None

What an attacker can affect

Confidentiality
High
Integrity
High
Availability
High

Exploit likelihood

0.44%Up 0.1 points since Jul 1, 2026
90%50%10%1%

What each source reports

CVE List Score used 8.7

phpMyFAQ - Privilege Escalation via Missing Self-Rights Constraint in GroupController::updatePermissions

phpMyFAQ before 4.1.5 contains a privilege escalation vulnerability in GroupController::updatePermissions that allows GROUP_EDIT administrators to grant arbitrary rights to groups without verifying they hold those rights themselves. A delegated administrator can exploit this by assigning high-value permissions to a group they belong to, inheriting those rights and escalating privileges up to full administrative control.

Record
CVE-2026-57995
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-269
Updated
2026-11-02
EUVDEUVD-2026-40454 8.7

phpMyFAQ before 4.1.5 contains a privilege escalation vulnerability in GroupController::updatePermissions that allows GROUP_EDIT administrators to grant arbitrary rights to groups without verifying they hold those rights themselves. A delegated administrator can exploit this by assigning high-value permissions to a group they belong to, inheriting those rights and escalating privileges up to full administrative control.

Record
EUVD-2026-40454
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-996g-x95h-p2f5 8.7

phpMyFAQ before 4.1.5 contains a privilege escalation vulnerability in GroupController:...

phpMyFAQ before 4.1.5 contains a privilege escalation vulnerability in GroupController::updatePermissions that allows GROUP_EDIT administrators to grant arbitrary rights to groups without verifying they hold those rights themselves. A delegated administrator can exploit this by assigning high-value permissions to a group they belong to, inheriting those rights and escalating privileges up to full administrative control.

Record
GHSA-996g-x95h-p2f5
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-269
Updated
2026-11-02
GitHub AdvisoriesGHSA-pg62-f8g4-4wqh 8.8

phpMyFAQ privilege escalation: GroupController::updatePermissions lets a GROUP_EDIT admin grant rights they do not hold

Overview

When phpMyFAQ hardened its admin permission-assignment endpoints against privilege escalation, it added a "a non-SuperAdmin may only assign rights they themselves hold" constraint to the user-rights endpoint (UserController::updateUserRights). The equivalent group-rights endpoint, GroupController::updatePermissions, did not receive that constraint. A delegated administrator holding only the GROUP_EDIT permission can therefore grant any group an arbitrary set of rights — including rights the administrator does not possess — and, by being (or becoming) a member of that group, inherit those rights, escalating to higher privileges up to full administrative control.

Impact

phpMyFAQ supports delegated administration: the GROUP_EDIT right can be granted to a non-SuperAdmin so they can manage groups. Such an administrator can escalate:

  1. They call POST /admin/group/update/permissions with group_id set to a group they belong to (or can manage membership of) and group_rights[] containing high-value rights they do not themselves hold (e.g. user administration, or any right gating sensitive actions).
  2. The endpoint grants every requested right to the group with no check that the caller holds them.
  3. Members of that group — including the attacker — inherit the granted rights, escalating the attacker's effective privileges.

This is the group-side mirror of exactly what the maintainers blocked on the user-rights side, where the code comment names the threat explicitly ("prevents an administrator with the delegable USER_EDIT right from granting privileges they do not possess (privilege escalation)"). The group path remains open.

PR:L (the attacker needs the delegable GROUP_EDIT right, below SuperAdmin), S:U (escalation within phpMyFAQ's single authorization authority), C:H/I:H/A:H (inherited rights can reach full administrative read/write/availability control). The one added step versus the user-rights path — the attacker must be a member of the group they elevate (a GROUP_EDIT admin generally manages group membership, hence AC:L) — is noted in Technical Details.

Technical Details

References are to phpmyfaq/src/phpMyFAQ/ at HEAD 04db2b999d8d.

The vulnerable endpoint — no self-rights check (Controller/Administration/GroupController.php:309-349):

#[Route(path: '/group/update/permissions', name: 'admin.group.update.permissions', methods: ['POST'])]
public function updatePermissions(Request $request): Response
{
    $this->userHasPermission(PermissionType::GROUP_EDIT);     // only requires GROUP_EDIT — not SuperAdmin, no per-right check
    // ... CSRF verified ...
    $groupId = (int) Filter::filterVar($request->request->get('group_id'), FILTER_VALIDATE_INT);
    $groupPermissions = $request->request->all()['group_rights'];   // attacker-controlled list of right IDs

    $refuseResult = $this->user->perm->refuseAllGroupRights($groupId);
    if ($refuseResult) {
        foreach ($groupPermissions as $groupPermission) {
            $this->user->perm->grantGroupRight($groupId, (int) $groupPermission);   // grants ANY right, unconstrained
        }
        ...
    }
}

Each group_rights[] entry is granted to the group verbatim; there is no verification that the acting administrator holds that right.

The fixed sibling — updateUserRights DOES constrain to self-held rights (Controller/Administration/Api/UserController.php:558-579):

$actingIsSuperAdmin = $this->currentUser->isSuperAdmin();
// A non-SuperAdmin may only assign rights they hold themselves. This prevents an
// administrator with the delegable USER_EDIT right from granting privileges they do not
// possess (privilege escalation).
if (!$actingIsSuperAdmin) {
    $actingUserId = $this->currentUser->getUserId();
    foreach ($userRights as $userRight) {
        if (!$this->currentUser->perm->hasPermission($actingUserId, (int) $userRight)) {
            return…
Record
GHSA-pg62-f8g4-4wqh
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-269
Updated
2026-11-02
NVD 8.7

phpMyFAQ before 4.1.5 contains a privilege escalation vulnerability in GroupController::updatePermissions that allows GROUP_EDIT administrators to grant arbitrary rights to groups without verifying they hold those rights themselves. A delegated administrator can exploit this by assigning high-value permissions to a group they belong to, inheriting those rights and escalating privileges up to full administrative control.

Record
CVE-2026-57995
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-269
Updated
2026-11-02
OSV 8.7

phpMyFAQ - Privilege Escalation via Missing Self-Rights Constraint in GroupController::updatePermissions

phpMyFAQ before 4.1.5 contains a privilege escalation vulnerability in GroupController::updatePermissions that allows GROUP_EDIT administrators to grant arbitrary rights to groups without verifying they hold those rights themselves. A delegated administrator can exploit this by assigning high-value permissions to a group they belong to, inheriting those rights and escalating privileges up to full administrative control.

Record
CVE-2026-57995
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-269
Updated
2026-11-02
OSVGHSA-pg62-f8g4-4wqh 8.8

phpMyFAQ privilege escalation: GroupController::updatePermissions lets a GROUP_EDIT admin grant rights they do not hold

Overview

When phpMyFAQ hardened its admin permission-assignment endpoints against privilege escalation, it added a "a non-SuperAdmin may only assign rights they themselves hold" constraint to the user-rights endpoint (UserController::updateUserRights). The equivalent group-rights endpoint, GroupController::updatePermissions, did not receive that constraint. A delegated administrator holding only the GROUP_EDIT permission can therefore grant any group an arbitrary set of rights — including rights the administrator does not possess — and, by being (or becoming) a member of that group, inherit those rights, escalating to higher privileges up to full administrative control.

Impact

phpMyFAQ supports delegated administration: the GROUP_EDIT right can be granted to a non-SuperAdmin so they can manage groups. Such an administrator can escalate:

  1. They call POST /admin/group/update/permissions with group_id set to a group they belong to (or can manage membership of) and group_rights[] containing high-value rights they do not themselves hold (e.g. user administration, or any right gating sensitive actions).
  2. The endpoint grants every requested right to the group with no check that the caller holds them.
  3. Members of that group — including the attacker — inherit the granted rights, escalating the attacker's effective privileges.

This is the group-side mirror of exactly what the maintainers blocked on the user-rights side, where the code comment names the threat explicitly ("prevents an administrator with the delegable USER_EDIT right from granting privileges they do not possess (privilege escalation)"). The group path remains open.

PR:L (the attacker needs the delegable GROUP_EDIT right, below SuperAdmin), S:U (escalation within phpMyFAQ's single authorization authority), C:H/I:H/A:H (inherited rights can reach full administrative read/write/availability control). The one added step versus the user-rights path — the attacker must be a member of the group they elevate (a GROUP_EDIT admin generally manages group membership, hence AC:L) — is noted in Technical Details.

Technical Details

References are to phpmyfaq/src/phpMyFAQ/ at HEAD 04db2b999d8d.

The vulnerable endpoint — no self-rights check (Controller/Administration/GroupController.php:309-349):

#[Route(path: '/group/update/permissions', name: 'admin.group.update.permissions', methods: ['POST'])]
public function updatePermissions(Request $request): Response
{
    $this->userHasPermission(PermissionType::GROUP_EDIT);     // only requires GROUP_EDIT — not SuperAdmin, no per-right check
    // ... CSRF verified ...
    $groupId = (int) Filter::filterVar($request->request->get('group_id'), FILTER_VALIDATE_INT);
    $groupPermissions = $request->request->all()['group_rights'];   // attacker-controlled list of right IDs

    $refuseResult = $this->user->perm->refuseAllGroupRights($groupId);
    if ($refuseResult) {
        foreach ($groupPermissions as $groupPermission) {
            $this->user->perm->grantGroupRight($groupId, (int) $groupPermission);   // grants ANY right, unconstrained
        }
        ...
    }
}

Each group_rights[] entry is granted to the group verbatim; there is no verification that the acting administrator holds that right.

The fixed sibling — updateUserRights DOES constrain to self-held rights (Controller/Administration/Api/UserController.php:558-579):

$actingIsSuperAdmin = $this->currentUser->isSuperAdmin();
// A non-SuperAdmin may only assign rights they hold themselves. This prevents an
// administrator with the delegable USER_EDIT right from granting privileges they do not
// possess (privilege escalation).
if (!$actingIsSuperAdmin) {
    $actingUserId = $this->currentUser->getUserId();
    foreach ($userRights as $userRight) {
        if (!$this->currentUser->perm->hasPermission($actingUserId, (int) $userRight)) {
            return…
Record
GHSA-pg62-f8g4-4wqh
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-269
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
phpmyfaq/phpmyfaq
Packagist
through 4.1.4
4.1.5
thorsten/phpmyfaq
Packagist
through 4.1.4
4.1.5
phpmyfaq/phpmyfaq
Packagist
before 4.1.5, plus listed versions
2.10.0-alpha2.8.02.8.0-RC2.8.0-RC22.8.0-RC3
Show 45 moreShow less
2.8.0-RC42.8.0-alpha22.8.0-alpha32.8.0-beta2.8.0-beta22.8.0-beta32.8.12.8.102.8.112.8.122.8.132.8.142.8.152.8.162.8.172.8.182.8.192.8.22.8.202.8.212.8.222.8.232.8.242.8.252.8.262.8.272.8.282.8.292.8.32.8.42.8.52.8.62.8.72.8.82.8.92.9.02.9.0-alpha2.9.0-alpha22.9.0-alpha32.9.0-alpha42.9.0-beta2.9.0-beta22.9.0-rc2.9.0-rc22.9.0-rc3
4.1.5
thorsten/phpmyfaq
Packagist
before 4.1.5, plus listed versions
2.10.0-alpha2.8.02.8.0-RC2.8.0-RC22.8.0-RC3
Show 45 moreShow less
2.8.0-RC42.8.0-alpha22.8.0-alpha32.8.0-beta2.8.0-beta22.8.0-beta32.8.12.8.102.8.112.8.122.8.132.8.142.8.152.8.162.8.172.8.182.8.192.8.22.8.202.8.212.8.222.8.232.8.242.8.252.8.262.8.272.8.282.8.292.8.32.8.42.8.52.8.62.8.72.8.82.8.92.9.02.9.0-alpha2.9.0-alpha22.9.0-alpha32.9.0-alpha42.9.0-beta2.9.0-beta22.9.0-rc2.9.0-rc22.9.0-rc3
4.1.5

History

History
RecordedChangedSources
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-57995 is a high vulnerability (CVSS 8.7) in Phpmyfaq, published June 30, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.44%, the 38th percentile. Fixed in phpmyfaq/phpmyfaq 4.1.5.

References

This page doesn't list everything

Left out here: 246 versions and the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open