mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 07:53:49 +08:00
SECURITY: Monkey-patch web-push gem to use safer HTTP client
`FinalDestination::HTTP` is our patch of `Net::HTTP` which defend us against SSRF and DNS rebinding attacks.
This commit is contained in:

committed by
Blake Erickson

parent
d89b537d8f
commit
52ef44f43b
27
lib/freedom_patches/web_push_request.rb
Normal file
27
lib/freedom_patches/web_push_request.rb
Normal file
@ -0,0 +1,27 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# This is a patch to avoid the direct use of `Net::HTTP` in the `webpush` gem and instead rely on `FinalDestination::HTTP`
|
||||
# which protects us from DNS rebinding attacks as well as server side forgery requests.
|
||||
#
|
||||
# This patch is considered temporary until we can decide on a longer term solution. In the meantime, we need to patch
|
||||
# the SSRF vulnerability being exposed by this gem.
|
||||
module WebPushPatch
|
||||
def perform
|
||||
http = FinalDestination::HTTP.new(uri.host, uri.port, *proxy_options)
|
||||
http.use_ssl = true
|
||||
http.ssl_timeout = @options[:ssl_timeout] unless @options[:ssl_timeout].nil?
|
||||
http.open_timeout = @options[:open_timeout] unless @options[:open_timeout].nil?
|
||||
http.read_timeout = @options[:read_timeout] unless @options[:read_timeout].nil?
|
||||
|
||||
req = FinalDestination::HTTP::Post.new(uri.request_uri, headers)
|
||||
req.body = body
|
||||
|
||||
resp = http.request(req)
|
||||
verify_response(resp)
|
||||
|
||||
resp
|
||||
end
|
||||
end
|
||||
|
||||
klass = defined?(WebPush) ? WebPush : Webpush
|
||||
klass::Request.prepend(WebPushPatch)
|
Reference in New Issue
Block a user