User tests: Successful: Unsuccessful:
Pull Request resolves #
This PR adds allowed_classes allowlists to all six unserialize() calls in the Joomla WebAuthn plugins (plg_system_webauthn and plg_multifactorauth_webauthn).
Without allowed_classes, PHP's unserialize() will instantiate any autoloaded class if an attacker can control the session value. The WebAuthn session keys (session.webauthn.pkRequests, session.webauthn.pkRegistration) store Base64-encoded serialized PublicKeyCredential*Options objects — an attacker who can write to the session backend (e.g., via session fixation or a compromised session store) can trigger PHP Object Injection.
Fix: Restrict deserialization to only the expected webauthn-lib classes.
false).unserialize() in WebAuthn plugin session handling has no allowed_classes restriction — any autoloaded PHP class can be instantiated from a controlled session value.
unserialize() is restricted to only the specific WebAuthn library classes that legitimately appear in these session values.
| Status | New | ⇒ | Pending |
| Category | ⇒ | Front End Plugins |
Sorry @brianteeman — I've now updated the PR body with the full template (summary, testing instructions, before/after results, and documentation checkboxes). Thanks for the reminder!
There was a reason that you were given a template to complete when you submitted this PR. Please update your pr with the required information. You can find the template here https://github.com/joomla/joomla-cms/blob/5.4-dev/.github/PULL_REQUEST_TEMPLATE.md
In addition please read https://github.com/joomla/joomla-cms/security