Page MenuHomePhabricator

Password Hash is always regenerated when logging in when using EncryptedPassword
Closed, ResolvedPublic

Description

After T150647 and T216682 I noticed, while the changes itself are working, that MediaWiki generates and stores a new salt and a new hash during every login, even if the password is already stored in the correct format.

After some debugging with ReflectionClass I noticed that ->needsUpdate returns true due to a strict comparison failing.

> $params->getValue( $password );
= [
    "cipher" => "aes-256-cbc",
    "secret" => "0",
  ]

> $default->invoke( $password )
= [
    "cipher" => "aes-256-cbc",
    "secret" => 0,
  ]

> $default->invoke( $password ) == $params->getValue( $password )
= true

> $default->invoke( $password ) === $params->getValue( $password )
= false

>

EncryptedPassword stores its default config as an integer while the read one is always a string.

Event Timeline

Change #1036772 had a related patch set uploaded (by Zabe; author: Zabe):

[mediawiki/core@master] EncryptedPassword: Store default parameters as strings

https://gerrit.wikimedia.org/r/1036772

FWIW you can use the sudo builtin to make reflection more convenient:

> $password = $pf->newFromCiphertext( $hash )
= MediaWiki\Password\EncryptedPassword {#6797}

> sudo $password->params
= [
    "cipher" => "aes-256-cbc",
    "secret" => "0",
  ]

> sudo $password->getDefaultParams()
= [
    "cipher" => "aes-256-cbc",
    "secret" => 0,
  ]

Change #1036772 merged by jenkins-bot:

[mediawiki/core@master] EncryptedPassword: Store default parameters as strings

https://gerrit.wikimedia.org/r/1036772

Change #1038312 had a related patch set uploaded (by Reedy; author: Zabe):

[mediawiki/core@REL1_42] EncryptedPassword: Store default parameters as strings

https://gerrit.wikimedia.org/r/1038312

Change #1038313 had a related patch set uploaded (by Reedy; author: Zabe):

[mediawiki/core@REL1_41] EncryptedPassword: Store default parameters as strings

https://gerrit.wikimedia.org/r/1038313

Change #1038314 had a related patch set uploaded (by Reedy; author: Zabe):

[mediawiki/core@REL1_40] EncryptedPassword: Store default parameters as strings

https://gerrit.wikimedia.org/r/1038314

Change #1038315 had a related patch set uploaded (by Reedy; author: Zabe):

[mediawiki/core@REL1_39] EncryptedPassword: Store default parameters as strings

https://gerrit.wikimedia.org/r/1038315

Change #1038315 merged by jenkins-bot:

[mediawiki/core@REL1_39] EncryptedPassword: Store default parameters as strings

https://gerrit.wikimedia.org/r/1038315

Change #1038313 merged by jenkins-bot:

[mediawiki/core@REL1_41] EncryptedPassword: Store default parameters as strings

https://gerrit.wikimedia.org/r/1038313

Change #1038314 merged by jenkins-bot:

[mediawiki/core@REL1_40] EncryptedPassword: Store default parameters as strings

https://gerrit.wikimedia.org/r/1038314

Change #1038312 merged by jenkins-bot:

[mediawiki/core@REL1_42] EncryptedPassword: Store default parameters as strings

https://gerrit.wikimedia.org/r/1038312

matmarex assigned this task to Zabe.
matmarex subscribed.