PR-7.0-dev Pending

User tests: Successful: Unsuccessful:

avatar lemuelvdm
lemuelvdm
15 Oct 2026

Pull Request resolves # .

  • I read the Generative AI policy and my contribution is either not created with the help of AI or is compatible with the policy and GNU/GPL 2 or later.

Summary of Changes

Removes MD5Handler, deprecated since Joomla 4.0 and scheduled for removal in 7.0, together with:

  • UserHelper::HASH_MD5, its algorithm mapping, and MD5 service registration.
  • MD5 participation in the password-handler chain.

Adds upgrade cleanup for the deleted file and updates the PHPStan baseline and spelling-reference comment.

Testing Instructions

  1. Apply the patch to Joomla 7.0-dev.
  2. Verify frontend and administrator login with supported password hashes. Correct passwords should succeed; incorrect passwords should fail.
  3. Verify that salted and unsalted MD5 passwords are rejected without PHP errors.
  4. Reset an affected test account's password and confirm login succeeds.
  5. Test an upgrade with this change included and confirm libraries/src/Authentication/Password/MD5Handler.php is removed.

Actual result BEFORE applying this Pull Request

The deprecated MD5 handler remains registered and accepts legacy MD5 password hashes.

Expected result AFTER applying this Pull Request

MD5 password support is removed. BCrypt, Argon2i, Argon2id, and the extensible handler chain remain available.

Link to documentations

Please select:

  • No documentation changes for guide.joomla.org needed
  • Pull Request link for manual.joomla.org: joomla/Manual#723
avatar lemuelvdm lemuelvdm - open - 15 Oct 2026
avatar lemuelvdm lemuelvdm - change - 15 Oct 2026
Status New ⇒ Pending
avatar joomla-cms-bot joomla-cms-bot - change - 15 Oct 2026
Category ⇒ Repository Administration com_admin Libraries
avatar lemuelvdm lemuelvdm - change - 15 Oct 2026
Title
…
Remove deprecated `MD5Hander` class
[7.0] Remove deprecated `MD5Hander` class
avatar lemuelvdm lemuelvdm - edited - 15 Oct 2026
avatar tecpromotion tecpromotion - change - 16 Oct 2026
Labels Added: PR-7.0-dev
avatar tecpromotion tecpromotion - test_item - 16 Oct 2026 - Tested successfully
avatar tecpromotion
tecpromotion - comment - 16 Oct 2026

I have tested this item ✅ successfully on 6df4d05


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/48633.

avatar tecpromotion
tecpromotion - comment - 16 Oct 2026

I have tested this item ✅ successfully on 6df4d05


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/48633.

avatar tecpromotion
tecpromotion - comment - 16 Oct 2026

I have tested this item ✅ successfully on 6df4d05


MD5 password support is gone, BCrypt/Argon2i/Argon2id logins still work, and the upgrade cleanup removes the old file.

Verification

7.0-dev + PR, PHP in DDEV, fresh install. Test users with hashes set directly in #__users:

Stored hash 7.0-dev (before) PR (after)
MD5 salted hash:salt, frontend logged in rejected, no PHP errors
MD5 unsalted, frontend logged in rejected, no PHP errors
MD5 salted, Super User, backend logged in rejected
BCrypt, frontend (right / wrong pw) — logged in / rejected
Argon2id, frontend — logged in
admin (BCrypt), backend (right / wrong pw) — logged in / rejected
  • user:reset-password on the unsalted MD5 user, then login → works.
  • Upgrade cleanup: placed a dummy libraries/src/Authentication/Password/MD5Handler.php, ran JoomlaInstallerScript::deleteUnexistingFiles() → dry run lists it, real run deletes it.
  • UserHelper::hashPassword('md5') now throws InvalidArgumentException (unsupported algorithm); HASH_MD5, the class and the password.handler.md5 service are gone. No other core references are left.

Suggestions (non-blocking)

  • libraries/src/User/User.php:81: the $password docblock still says "MD5 encrypted password". Could be "Hashed password".
  • Docs: users whose stored hash is still MD5 (old 1.5/2.5/3.x imports that never logged in again) are locked out until they reset their password. That is intended, but it belongs on the manual.joomla.org 6.x → 7.0 "removed backward incompatibility" page, together with the removed class, the HASH_MD5 constant and the password.handler.md5 service.
  • Title typo: MD5Hander → MD5Handler.

This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/48633.

avatar lemuelvdm lemuelvdm - change - 20 Oct 2026
Title
…
[7.0] Remove deprecated `MD5Hander` class
[7.0] Remove deprecated `MD5Handler` class
avatar lemuelvdm lemuelvdm - edited - 20 Oct 2026
avatar lemuelvdm lemuelvdm - change - 20 Oct 2026
The description was changed
avatar lemuelvdm lemuelvdm - edited - 20 Oct 2026
avatar lemuelvdm
lemuelvdm - comment - 20 Oct 2026

Hi @tecpromotion,
I've made those suggested changes and added the necessary documentation to the manual.
Thanks.

avatar HLeithner
HLeithner - comment - 21 Oct 2026

@lemuelvdm thanks for the PR, would you like to propose a new way for https://guide.joomla.org/user-guide/users/users-admin-password-recovery since using md5 passwords would no longer be possible we should provide an alternative (if possible).

I would expect bcrypt and argon is not as simple as md5 but didn't tried it yet

avatar github-actions[bot]
github-actions[bot] - comment - 7 Nov 2026

This pull request has conflicts, please resolve those before we can evaluate the pull request.

Add a Comment

Login with GitHub to post a comment