diff --git a/CHANGELOG.rdoc b/CHANGELOG.rdoc index 515fe1f4..a7723895 100644 --- a/CHANGELOG.rdoc +++ b/CHANGELOG.rdoc @@ -1,3 +1,10 @@ +== 2.2.8 + +Security announcement: http://blog.plataformatec.com.br/2013/11/e-mail-enumeration-in-devise-in-paranoid-mode + +* bug fix + * Avoid e-mail enumeration on sign in when in paranoid mode + == 2.2.7 * bug fix diff --git a/Gemfile.lock b/Gemfile.lock index a9a649c1..d744491b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - devise (2.2.7) + devise (2.2.8) bcrypt-ruby (~> 3.0) orm_adapter (~> 0.1) railties (~> 3.1) @@ -38,7 +38,7 @@ GEM i18n (= 0.6.1) multi_json (~> 1.0) arel (3.0.2) - bcrypt-ruby (3.1.1) + bcrypt-ruby (3.1.2) builder (3.0.4) erubis (2.7.0) faraday (0.8.7) diff --git a/gemfiles/Gemfile.rails-3.1.x.lock b/gemfiles/Gemfile.rails-3.1.x.lock index 54f765e8..80bbe3e8 100644 --- a/gemfiles/Gemfile.rails-3.1.x.lock +++ b/gemfiles/Gemfile.rails-3.1.x.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - devise (2.2.7) + devise (2.2.8) bcrypt-ruby (~> 3.0) orm_adapter (~> 0.1) railties (~> 3.1) @@ -39,7 +39,7 @@ GEM activesupport (3.1.12) multi_json (~> 1.0) arel (2.2.3) - bcrypt-ruby (3.1.1) + bcrypt-ruby (3.1.2) builder (3.0.4) columnize (0.3.6) erubis (2.7.0) diff --git a/lib/devise/strategies/database_authenticatable.rb b/lib/devise/strategies/database_authenticatable.rb index bccebb25..e0a38a10 100644 --- a/lib/devise/strategies/database_authenticatable.rb +++ b/lib/devise/strategies/database_authenticatable.rb @@ -5,13 +5,16 @@ module Devise # Default strategy for signing in a user, based on his email and password in the database. class DatabaseAuthenticatable < Authenticatable def authenticate! - resource = valid_password? && mapping.to.find_for_database_authentication(authentication_hash) - return fail(:not_found_in_database) unless resource + resource = valid_password? && mapping.to.find_for_database_authentication(authentication_hash) + encrypted = false - if validate(resource){ resource.valid_password?(password) } + if validate(resource){ encrypted = true; resource.valid_password?(password) } resource.after_database_authentication success!(resource) end + + mapping.to.new.password = password if !encrypted && Devise.paranoid + fail(:not_found_in_database) unless resource end end end diff --git a/lib/devise/version.rb b/lib/devise/version.rb index 1ef16416..e9bce564 100644 --- a/lib/devise/version.rb +++ b/lib/devise/version.rb @@ -1,3 +1,3 @@ module Devise - VERSION = "2.2.7".freeze + VERSION = "2.2.8".freeze end