Commit graph

13 commits

Author SHA1 Message Date
Dayllan Maza
4b39919c47 Add password policy setting suggestChangeOnLogin
Password policy checks that fail and have `suggestChangeOnLogin` set to true will
prompt for a password change on login.

Below are some rules that apply to this setting in different scenarios:

- If only one policy fails and has `suggestChangeOnLogin = false`, a password change will
  not be requested
- If more than one policy fails and one or more have `suggestChangeOnLogin` set to true`,
  a password change will be requested
- If `forceChange` is present in any of the failing policies, `suggestChangeOnLogin` value
  will be ignored and password change will be enforced
- if $wgInvalidPasswordReset is set to false `suggestChangeOnLogin` is ignored

IMPORTANT**
Before this patch, suggesting a password change was the default behavior (depending on
$wgInvalidPasswordReset), which means that the necessary changes to $wgPasswordPolicy
need to be in place before this patch is merged and gets to production.

Bug: T211621
Change-Id: I7a4a0a06273fa4e8bd0da3dac54cf5a1b78bb3fd
2019-03-09 14:59:02 -05:00
Max Semenik
7a7976ba7a Password: replace equals() with verify()
So far, our key derivation code assumed that it has control over
the salt used by the derivation routines, however I want to add Argon2
support and it doesn't work this way: password_hash() generates the
salt itself, and the only way to verify a password is by using
password_verify(). Current way the things are done doesn't support it
because it relies on the result of password hashing with parameters we
provide to be deterministic.

Therefore, I'm deprecating Password::equals(), as well as whole concept
of comparing Password objects - it's used only in tests anyway. It's
getting replaced with verify() that only accepts password strings.
Uses of old function are fixed with exception of a few calls in tests
that will be addressed in my Argon2 patch.

Change-Id: I2b2be9a422ee0f773490eac316ad81505c3f8571
2019-01-24 13:40:40 -08:00
Umherirrender
a8da270698 Fix caller name in LocalPasswordPrimaryAuthenticationProvider
Seeing {closure} in the logs as caller is not helpful

Change-Id: I8dc921feb13432ed636686f918d8747ae71cf62b
2018-09-30 16:17:27 +02:00
Brian Wolff
e7ea90509c SECURITY: Do not reveal if user exists during login failure
This is meant for private wikis where the list of users may
be secret. It is only meant to prevent trivial enumeration
of usernames. It is not designed to prevent enumeration
via timing attacks.

Bug: T134100
Change-Id: I7afaa955a4b393ef00b11e420709bd62b84fbc71
2017-11-15 00:58:44 +00:00
Umherirrender
9cd5a3fccf clone keyword must not be used as a function
Also changed a require_once

Change-Id: Ib8030ea5320a62ee4f114d8d506382c5665e3e02
2017-06-28 16:29:33 +02:00
jenkins-bot
6124d71e25 Merge "Prevent login-only local password provider from removing passwords" 2016-11-30 16:39:12 +00:00
jenkins-bot
3c108c8f46 Merge "Use different varname for upgraded hash from original hash" 2016-11-17 06:43:37 +00:00
Gergő Tisza
6dbe9b2397 Prevent login-only local password provider from removing passwords
When the local password provider is in login-only mode, it should
disable itself as soon as some other primary provider is enabled.
It's impossible to tell whether that is the case though, so err in
the safer direction.

Change-Id: Ie77a9cc6d8f06aa52a893e753d9971e30b0f55e5
2016-11-15 07:27:57 +00:00
Brian Wolff
55c1a53cef Use different varname for upgraded hash from original hash
I found this confusing when reading the code. This should have
identical logic but slightly clearer.

Change-Id: I4918c29bd5dca3642de7bb60219fc246299d952d
2016-11-15 03:53:38 +00:00
Tim Starling
7a157e0bea Fix interpretation of "A-type" password hashes
An A-type hash is an unsalted hash. A B-type hash is a salted hash of
the form md5(salt "-" md5(password)). So it's not correct to have an
A-type hash with a salt. User::comparePasswords() and
CentralAuthUser::getPasswordFromString() already get this right, they
generate :B: prefixes for legacy salted hashes where the salt is not
specified in the database.

Change-Id: Icb809274f9f63641e54daf98332a5646fd58b550
2016-11-14 16:47:03 +11:00
Aaron Schulz
8d59074c3b Avoid DB_MASTER use on password checks and defer password upgrades
Change-Id: Iceaafa31a5d8efcd9881b8a4a5c0e2aca1b1447c
2016-09-23 11:54:28 -07:00
Kunal Mehta
5c7bd77867 auth: Fix case of function call
Change-Id: I415a7f7ba2ea97515a110cd963ed96bb77ec7b97
2016-08-02 23:53:51 -07:00
Brad Jorsch
d245bd25ae Add AuthManager
This implements the AuthManager class and its needed interfaces and
subclasses, and integrates them into the backend portion of MediaWiki.
Integration with frontend portions of MediaWiki (e.g. ApiLogin,
Special:Login) is left for a followup.

Bug: T91699
Bug: T71589
Bug: T111299
Co-Authored-By: Gergő Tisza <gtisza@wikimedia.org>
Change-Id: If89d24838e326fe25fe867d02181eebcfbb0e196
2016-05-16 15:11:02 +00:00