CVE-2026-34384
Admidio: Missing CSRF Protection on Registration Approval Actions
Admidio is an open-source user management solution. Prior to version 5.0.8, the create_user, assign_member, and assign_user action modes in modules/registration.php approve pending user registrations via GET request without validating a CSRF token. Unlike the delete_user mode in the same file (which correctly validates the token), these three approval actions read their parameters from $_GET and perform irreversible state changes without any protection. An attacker who has submitted a pending registration can extract their own user UUID from the registration confirmation email URL, then trick any user with the rol_approve_users right into visiting a crafted URL that automatically approves the registration. This bypasses the manual registration approval workflow entirely. This issue has been patched in version 5.0.8.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- High
- User interaction
- Required
What an attacker can affect
- Confidentiality
- None
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
4.5
Admidio: Missing CSRF Protection on Registration Approval Actions
Admidio is an open-source user management solution. Prior to version 5.0.8, the create_user, assign_member, and assign_user action modes in modules/registration.php approve pending user registrations via GET request without validating a CSRF token. Unlike the delete_user mode in the same file (which correctly validates the token), these three approval actions read their parameters from $_GET and perform irreversible state changes without any protection. An attacker who has submitted a pending registration can extract their own user UUID from the registration confirmation email URL, then trick any user with the rol_approve_users right into visiting a crafted URL that automatically approves the registration. This bypasses the manual registration approval workflow entirely. This issue has been patched in version 5.0.8.
- Record
CVE-2026-34384- CVSS 3.1
- 4.5 Medium
CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:H/A:N - Weakness
- CWE-352
- Updated
- 2026-11-02
EUVDEUVD-2026-17628
4.5
Admidio is an open-source user management solution. Prior to version 5.0.8, the create_user, assign_member, and assign_user action modes in modules/registration.php approve pending user registrations via GET request without validating a CSRF token. Unlike the delete_user mode in the same file (which correctly validates the token), these three approval actions read their parameters from $_GET and perform irreversible state changes without any protection. An attacker who has submitted a pending registration can extract their own user UUID from the registration confirmation email URL, then trick any user with the rol_approve_users right into visiting a crafted URL that automatically approves the registration. This bypasses the manual registration approval workflow entirely. This issue has been patched in version 5.0.8.
- Record
EUVD-2026-17628- CVSS 3.1
- 4.5 Medium
CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:H/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-ph84-r98x-2j22
4.5
Admidio has Missing CSRF Protection on Registration Approval Actions
Summary
The create_user, assign_member, and assign_user action modes in modules/registration.php approve pending user registrations via GET request without validating a CSRF token. Unlike the delete_user mode in the same file (which correctly validates the token), these three approval actions read their parameters from $_GET and perform irreversible state changes without any protection. An attacker who has submitted a pending registration can extract their own user UUID from the registration confirmation email URL, then trick any user with the rol_approve_users right into visiting a crafted URL that automatically approves the registration. This bypasses the manual registration approval workflow entirely.
Details
CSRF Protection Is Present for delete_user but Absent for Approval Modes
File: modules/registration.php, lines 90-128
The delete_user mode validates the CSRF token (line 99), but the three approval modes do not:
// assign_member and assign_user: no CSRF check
} elseif (in_array($getMode, array('assign_member', 'assign_user'))) {
$registrationService = new RegistrationService($gDb, $getUserUUID);
$message = $registrationService->assignRegistration($getUserUUIDAssigned, $getMode === 'assign_member');
$gMessage->setForwardUrl($message['forwardUrl']);
$gMessage->show($message['message']);
// create_user: no CSRF check
} elseif ($getMode === 'create_user') {
$registrationUser->acceptRegistration();
if ($gCurrentUser->isAdministratorRoles()) {
admRedirect(SecurityUtils::encodeUrl(ADMIDIO_URL . FOLDER_MODULES.'/profile/roles.php',
array('accept_registration' => true, 'user_uuid' => $getUserUUID)));
}
// delete_user: CSRF IS validated
} elseif ($getMode === 'delete_user') {
SecurityUtils::validateCsrfToken($_POST['adm_csrf_token']); // <-- protected
$registrationUser->delete();
}
The three approval modes read both UUIDs exclusively from $_GET (lines 41-43):
The approve action modes accept $_GET parameters user_uuid and user_uuid_assigned without any POST body or CSRF token. Both parameters pass through admFuncVariableIsValid() with uuid type validation, which prevents SQL injection but provides no CSRF protection.
User UUID Is Known to the Attacker from Registration Email
File: D:/bugcrowd/admidio/repo/src/Infrastructure/Service/RegistrationService.php, lines 154-157
When a user submits a registration, Admidio sends a confirmation email containing a URL of the form:
https://TARGET/adm_program/modules/registration.php?id=VALIDATION_ID&user_uuid=REGISTRANT_UUID
The user_uuid in this URL is the registrant's own UUID. The attacker has this UUID because they received the confirmation email for their own registration.
isAdministratorRegistration() Is a Delegated Right
File: D:/bugcrowd/admidio/repo/src/Users/Entity/User.php, lines 1603-1606
public function isAdministratorRegistration(): bool
{
return $this->checkRolesRight('rol_approve_users');
}
The rol_approve_users right is a delegated organizational privilege, not full system administrator access. Any member designated to review registrations -- for example, a membership secretary or club administrator -- is a valid CSRF victim.
PoC
Scenario: Attacker bypasses manual registration approval
Prerequisites: (1) Manual registration approval is enabled. (2) The attacker submits a registration form and receives a confirmation email with their user_uuid. (3) After clicking the confirmation link, their registration enters the pending queue.
Step 1: Attacker extracts their own user_uuid from the registration email
The confirmation email contains a link of the form:
https://TARGET/adm_program/modules/registration.php?id=VALIDATION_ID&user_uuid=ATTACKER_UUID
The ATTACKER_UUID is visible to the attacker from their own email.
Step 2: CSRF auto-approval via image tag
The attacker hosts a page that the victim (admin…
- Record
GHSA-ph84-r98x-2j22- CVSS 3.1
- 4.5 Medium
CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:H/A:N - Weakness
- CWE-352
- Updated
- 2026-11-02
NVD
4.5
Admidio is an open-source user management solution. Prior to version 5.0.8, the create_user, assign_member, and assign_user action modes in modules/registration.php approve pending user registrations via GET request without validating a CSRF token. Unlike the delete_user mode in the same file (which correctly validates the token), these three approval actions read their parameters from $_GET and perform irreversible state changes without any protection. An attacker who has submitted a pending registration can extract their own user UUID from the registration confirmation email URL, then trick any user with the rol_approve_users right into visiting a crafted URL that automatically approves the registration. This bypasses the manual registration approval workflow entirely. This issue has been patched in version 5.0.8.
- Record
CVE-2026-34384- CVSS 3.1
- 4.5 Medium
CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:H/A:N - CVSS 3.1
- 7.3 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N - Weakness
- CWE-352
- Updated
- 2026-11-02
OSV
4.5
Admidio: Missing CSRF Protection on Registration Approval Actions
Admidio is an open-source user management solution. Prior to version 5.0.8, the create_user, assign_member, and assign_user action modes in modules/registration.php approve pending user registrations via GET request without validating a CSRF token. Unlike the delete_user mode in the same file (which correctly validates the token), these three approval actions read their parameters from $_GET and perform irreversible state changes without any protection. An attacker who has submitted a pending registration can extract their own user UUID from the registration confirmation email URL, then trick any user with the rol_approve_users right into visiting a crafted URL that automatically approves the registration. This bypasses the manual registration approval workflow entirely. This issue has been patched in version 5.0.8.
- Record
CVE-2026-34384- CVSS 3.1
- 4.5 Medium
CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:H/A:N - Weakness
- CWE-352
- Updated
- 2026-11-02
OSVGHSA-ph84-r98x-2j22
4.5
Admidio has Missing CSRF Protection on Registration Approval Actions
Summary
The create_user, assign_member, and assign_user action modes in modules/registration.php approve pending user registrations via GET request without validating a CSRF token. Unlike the delete_user mode in the same file (which correctly validates the token), these three approval actions read their parameters from $_GET and perform irreversible state changes without any protection. An attacker who has submitted a pending registration can extract their own user UUID from the registration confirmation email URL, then trick any user with the rol_approve_users right into visiting a crafted URL that automatically approves the registration. This bypasses the manual registration approval workflow entirely.
Details
CSRF Protection Is Present for delete_user but Absent for Approval Modes
File: modules/registration.php, lines 90-128
The delete_user mode validates the CSRF token (line 99), but the three approval modes do not:
// assign_member and assign_user: no CSRF check
} elseif (in_array($getMode, array('assign_member', 'assign_user'))) {
$registrationService = new RegistrationService($gDb, $getUserUUID);
$message = $registrationService->assignRegistration($getUserUUIDAssigned, $getMode === 'assign_member');
$gMessage->setForwardUrl($message['forwardUrl']);
$gMessage->show($message['message']);
// create_user: no CSRF check
} elseif ($getMode === 'create_user') {
$registrationUser->acceptRegistration();
if ($gCurrentUser->isAdministratorRoles()) {
admRedirect(SecurityUtils::encodeUrl(ADMIDIO_URL . FOLDER_MODULES.'/profile/roles.php',
array('accept_registration' => true, 'user_uuid' => $getUserUUID)));
}
// delete_user: CSRF IS validated
} elseif ($getMode === 'delete_user') {
SecurityUtils::validateCsrfToken($_POST['adm_csrf_token']); // <-- protected
$registrationUser->delete();
}
The three approval modes read both UUIDs exclusively from $_GET (lines 41-43):
The approve action modes accept $_GET parameters user_uuid and user_uuid_assigned without any POST body or CSRF token. Both parameters pass through admFuncVariableIsValid() with uuid type validation, which prevents SQL injection but provides no CSRF protection.
User UUID Is Known to the Attacker from Registration Email
File: D:/bugcrowd/admidio/repo/src/Infrastructure/Service/RegistrationService.php, lines 154-157
When a user submits a registration, Admidio sends a confirmation email containing a URL of the form:
https://TARGET/adm_program/modules/registration.php?id=VALIDATION_ID&user_uuid=REGISTRANT_UUID
The user_uuid in this URL is the registrant's own UUID. The attacker has this UUID because they received the confirmation email for their own registration.
isAdministratorRegistration() Is a Delegated Right
File: D:/bugcrowd/admidio/repo/src/Users/Entity/User.php, lines 1603-1606
public function isAdministratorRegistration(): bool
{
return $this->checkRolesRight('rol_approve_users');
}
The rol_approve_users right is a delegated organizational privilege, not full system administrator access. Any member designated to review registrations -- for example, a membership secretary or club administrator -- is a valid CSRF victim.
PoC
Scenario: Attacker bypasses manual registration approval
Prerequisites: (1) Manual registration approval is enabled. (2) The attacker submits a registration form and receives a confirmation email with their user_uuid. (3) After clicking the confirmation link, their registration enters the pending queue.
Step 1: Attacker extracts their own user_uuid from the registration email
The confirmation email contains a link of the form:
https://TARGET/adm_program/modules/registration.php?id=VALIDATION_ID&user_uuid=ATTACKER_UUID
The ATTACKER_UUID is visible to the attacker from their own email.
Step 2: CSRF auto-approval via image tag
The attacker hosts a page that the victim (admin…
- Record
GHSA-ph84-r98x-2j22- CVSS 3.1
- 4.5 Medium
CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:H/A:N - Weakness
- CWE-352
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
admidio/admidioPackagist |
before 5.0.8 | 5.0.8 |
admidio/admidioPackagist |
before 5.0.8, plus listed versions 4.1.04.1.3v4.2-Beta.1v4.2-Beta.2v4.2-Beta.3 Show 45 moreShow lessv4.2.0v4.2.1v4.2.10v4.2.11v4.2.12v4.2.13v4.2.14v4.2.2v4.2.3v4.2.4v4.2.5v4.2.6v4.2.7v4.2.8v4.2.9v4.3-Beta.1v4.3-Beta.3v4.3-Beta.4v4.3-Beta.5v4.3.0v4.3.1v4.3.10v4.3.11v4.3.12v4.3.13v4.3.14v4.3.15v4.3.16v4.3.17v4.3.2v4.3.3v4.3.4v4.3.5v4.3.6v4.3.7v4.3.8v4.3.9v5.0-Beta.1v5.0-Beta.2v5.0-Beta.3v5.0.0v5.0.1v5.0.2v5.0.3v5.0.4 |
5.0.8 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-34384 is a medium vulnerability (CVSS 4.5) in Admidio, published March 31, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.18%, the 7th percentile. Fixed in admidio/admidio 5.0.8.
References
github.com/Admidio/admidio/security/advisories/GHSA-ph84-r98x-2j22
github.com/Admidio/admidio/commit/707171c188b3e8f36007fc3f2bccbfac896ed019
nvd.nist.gov/vuln/detail/CVE-2026-34384
github.com/advisories/GHSA-ph84-r98x-2j22
github.com/CVEProject/cvelistV5/tree/main/cves/2026/34xxx/CVE-2026-34384.json
github.com/Admidio/admidio
Left out here: 3 versions and the rest of 2 source descriptions. The JSON record has them.