FEATURE: Protect against replay attacks when using TLS 1.3 0-RTT (#8020)

This commit is contained in:
Rafael dos Santos Silva
2019-08-23 11:52:47 -03:00
committed by GitHub
parent 171618e7d6
commit 39c31a3d76
2 changed files with 30 additions and 0 deletions

View File

@ -0,0 +1,27 @@
# frozen_string_literal: true
module Middleware
class EarlyDataCheck
def initialize(app, settings = nil)
@app = app
end
# When a new connection happens, and it uses TLS 1.3 0-RTT
# the reverse proxy will set the header `Early-Data` to 1.
# Due to 0-RTT susceptibility to Replay Attacks only GET
# requests for anonymous users are allowed.
# Reference: https://tools.ietf.org/html/rfc8446#appendix-E.5
def call(env)
if env['HTTP_EARLY_DATA'].to_s == '1' &&
(env['REQUEST_METHOD'] != 'GET' || CurrentUser.has_auth_cookie?(env))
[
425,
{ 'Content-Type' => 'text/html', 'Content-Length' => '9' },
['Too Early']
]
else
@app.call(env)
end
end
end
end