Skip to content

Commit e716762

Browse files
authored
Merge pull request #2856 from internetee/fix-hmac-signature
Fixed ident request webhook hmac validation
2 parents b9d24bd + 1a0d76b commit e716762

3 files changed

Lines changed: 22 additions & 5 deletions

File tree

Gemfile.lock

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ GEM
197197
coffee-script-source
198198
execjs
199199
coffee-script-source (1.12.2)
200-
concurrent-ruby (1.3.4)
200+
concurrent-ruby (1.3.5)
201201
connection_pool (2.4.1)
202202
countries (4.0.1)
203203
i18n_data (~> 0.13.0)
@@ -610,7 +610,7 @@ DEPENDENCIES
610610
capybara (~> 3.40.0)
611611
coffee-rails (>= 5.0)
612612
company_register!
613-
concurrent-ruby (= 1.3.4)
613+
concurrent-ruby (= 1.3.5)
614614
countries
615615
data_migrate (~> 9.0)
616616
database_cleaner
@@ -657,8 +657,8 @@ DEPENDENCIES
657657
redis
658658
rest-client
659659
rexml
660-
rubyzip
661660
ruby-openai
661+
rubyzip
662662
sass-rails
663663
select2-rails (= 4.0.13)
664664
selectize-rails (= 0.12.6)

app/controllers/eeid/webhooks/identification_requests_controller.rb

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,24 @@ def render_invalid_signature
4242

4343
def valid_hmac_signature?(ident_type, hmac_signature)
4444
secret = ENV["#{ident_type}_ident_service_client_secret"]
45-
computed_signature = OpenSSL::HMAC.hexdigest('SHA256', secret, request.raw_post)
46-
ActiveSupport::SecurityUtils.secure_compare(computed_signature, hmac_signature)
45+
Rails.logger.debug("[valid_hmac_signature?] ident_type: #{ident_type}")
46+
Rails.logger.debug("[valid_hmac_signature?] ENV secret present: #{secret.present?}")
47+
Rails.logger.debug("[valid_hmac_signature?] request.raw_post: #{request.raw_post.inspect}")
48+
Rails.logger.debug("[valid_hmac_signature?] Provided HMAC signature: #{hmac_signature.inspect}")
49+
50+
# Remove all spaces and newlines from raw body for canonicalization
51+
canonical_body = request.raw_post.to_s.gsub(/[\s]+/, '')
52+
Rails.logger.debug("[valid_hmac_signature?] request.body (canonical no-space): #{canonical_body}")
53+
54+
provided = hmac_signature.to_s.strip
55+
56+
computed_signature = OpenSSL::HMAC.hexdigest('SHA256', secret, canonical_body)
57+
Rails.logger.debug("[valid_hmac_signature?] Computed HMAC signature: #{computed_signature}")
58+
59+
result = ActiveSupport::SecurityUtils.secure_compare(computed_signature, provided)
60+
Rails.logger.debug("[valid_hmac_signature?] Signature valid: #{result}")
61+
62+
result
4763
end
4864

4965
def verify_contact(contact)

config/boot.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
22

3+
require 'logger'
34
require 'bundler/setup' # Set up gems listed in the Gemfile.
45
require 'bootsnap/setup'

0 commit comments

Comments
 (0)