Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
use secure string comparisons for basic auth username / password
this will avoid timing attacks against applications that use basic auth. Conflicts: activesupport/lib/active_support/security_utils.rb CVE-2015-7576
- Loading branch information
1 parent
e694ac5
commit 859ca44
Showing
2 changed files
with
33 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| require 'digest' | ||
|
|
||
| module ActiveSupport | ||
| module SecurityUtils | ||
| # Constant time string comparison. | ||
| # | ||
| # The values compared should be of fixed length, such as strings | ||
| # that have already been processed by HMAC. This should not be used | ||
| # on variable length plaintext strings because it could leak length info | ||
| # via timing attacks. | ||
| def secure_compare(a, b) | ||
| return false unless a.bytesize == b.bytesize | ||
|
|
||
| l = a.unpack "C#{a.bytesize}" | ||
|
|
||
| res = 0 | ||
| b.each_byte { |byte| res |= byte ^ l.shift } | ||
| res == 0 | ||
| end | ||
| module_function :secure_compare | ||
|
|
||
| def variable_size_secure_compare(a, b) # :nodoc: | ||
| secure_compare(::Digest::SHA256.hexdigest(a), ::Digest::SHA256.hexdigest(b)) | ||
| end | ||
| module_function :variable_size_secure_compare | ||
| end | ||
| end |