Skip to content

Commit

Permalink
SECURITY: Ensure _forum_session cookies cannot be reused between sites (
Browse files Browse the repository at this point in the history
#14950)

This only affects multisite Discourse instances (where multiple forums are served from a single application server). The vast majority of self-hosted Discourse forums do not fall into this category.

On affected instances, this vulnerability could allow encrypted session cookies to be re-used between sites served by the same application instance.
  • Loading branch information
davidtaylorhq committed Nov 15, 2021
1 parent 5c43b8a commit f458536
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Gemfile.lock
Expand Up @@ -323,7 +323,7 @@ GEM
activerecord (~> 6.0)
concurrent-ruby
railties (~> 6.0)
rails_multisite (3.1.0)
rails_multisite (4.0.0)
activerecord (> 5.0, < 7)
railties (> 5.0, < 7)
railties (6.1.4.1)
Expand Down
25 changes: 25 additions & 0 deletions spec/integration/multisite_cookies_spec.rb
@@ -0,0 +1,25 @@
# frozen_string_literal: true

require 'rails_helper'

describe 'multisite', type: [:multisite, :request] do
it "works" do
get "http://test.localhost/session/csrf.json"
expect(response.status).to eq(200)
cookie = response.cookies["_forum_session"]
id1 = session["session_id"]

get "http://test.localhost/session/csrf.json", headers: { "Cookie" => "_forum_session=#{cookie};" }
expect(response.status).to eq(200)
id2 = session["session_id"]

expect(id1).to eq(id2)

get "http://test2.localhost/session/csrf.json", headers: { "Cookie" => "_forum_session=#{cookie};" }
expect(response.status).to eq(200)
id3 = session["session_id"]

# Session cookie was rejected and rotated
expect(id2).not_to eq(id3)
end
end

0 comments on commit f458536

Please sign in to comment.