Bug #22030 » 0013372.diff
typo3/sysext/saltedpasswords/sv1/class.tx_saltedpasswords_sv1.php (working copy) | ||
---|---|---|
*/
|
||
protected $objInstanceSaltedPW = NULL;
|
||
/**
|
||
* Determines if no further authentication service should
|
||
* by tried when authentication fails.
|
||
*
|
||
* Prevents authentication bypass. See vulnerability report:
|
||
* { @link http://bugs.typo3.org/view.php?id=13372 }
|
||
*
|
||
* @var boolean
|
||
*/
|
||
protected $boolOverwriteOnlyAuthService = FALSE;
|
||
/**
|
||
* Checks if service is available. In case of this service we check that
|
||
* following prerequesties are fulfilled:
|
||
... | ... | |
if (is_object($this->objInstanceSaltedPW)) {
|
||
$validPasswd = $this->objInstanceSaltedPW->checkPassword($password,$user['password']);
|
||
// record is in format of Salted Hash password but authentication failed
|
||
// skip further authentication methods
|
||
if (!$validPasswd) {
|
||
$this->boolOverwriteOnlyAuthService = TRUE;
|
||
}
|
||
$defaultHashingClassName = tx_saltedpasswords_div::getDefaultSaltingHashingMethod();
|
||
$skip = FALSE;
|
||
... | ... | |
$validPasswd = $this->objInstanceSaltedPW->checkPassword(md5($password), substr($user['password'], 1));
|
||
}
|
||
// skip further authentication methods
|
||
if (!$validPasswd) {
|
||
$this->boolOverwriteOnlyAuthService = TRUE;
|
||
}
|
||
// password is stored as md5
|
||
} else if (preg_match('/[0-9abcdef]{32,32}/', $user['password'])) {
|
||
$validPasswd = (!strcmp(md5($password), $user['password']) ? TRUE : FALSE);
|
||
// skip further authentication methods
|
||
if (!$validPasswd) {
|
||
$this->boolOverwriteOnlyAuthService = TRUE;
|
||
}
|
||
// password is stored plain or unrecognized format
|
||
} else {
|
||
$validPasswd = (!strcmp($password, $user['password']) ? TRUE : FALSE);
|
||
... | ... | |
// instanciate default method class
|
||
$this->objInstanceSaltedPW = tx_saltedpasswords_salts_factory::getSaltingInstance(NULL);
|
||
$this->updatePassword(
|
||
intval($user['uid']),
|
||
intval($user['uid']),
|
||
array('password' => $this->objInstanceSaltedPW->getHashedPassword($password))
|
||
);
|
||
}
|
||
... | ... | |
);
|
||
}
|
||
if (!$validPasswd && intval($this->extConf['onlyAuthService'])) {
|
||
if (!$validPasswd && (intval($this->extConf['onlyAuthService']) || $this->boolOverwriteOnlyAuthService)) {
|
||
// Failed login attempt (wrong password) - no delegation to further services
|
||
$this->writeLog(
|
||
TYPO3_MODE . ' Authentication failed - wrong password for username \'%s\'',
|