High severityNVD Advisory· Published Oct 20, 2020· Updated Aug 4, 2024
Expired token reuse in Spree
CVE-2020-15269
Description
In Spree before versions 3.7.11, 4.0.4, or 4.1.11, expired user tokens could be used to access Storefront API v2 endpoints. The issue is patched in versions 3.7.11, 4.0.4 and 4.1.11. A workaround without upgrading is described in the linked advisory.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
spreeRubyGems | < 3.7.11 | 3.7.11 |
spreeRubyGems | >= 4.0.0, < 4.0.4 | 4.0.4 |
spreeRubyGems | >= 4.1.0, < 4.1.11 | 4.1.11 |
Affected products
1Patches
1e43643abfe51ensure doorkeeper_token is valid when authenticating requests in v2
3 files changed · +22 −2
api/app/controllers/spree/api/v2/base_controller.rb+6 −1 modified@@ -53,7 +53,12 @@ def render_error_payload(error, status = 422) end def spree_current_user - @spree_current_user ||= Spree.user_class.find_by(id: doorkeeper_token.resource_owner_id) if doorkeeper_token + return nil unless doorkeeper_token + return @spree_current_user if @spree_current_user + + doorkeeper_authorize! + + @spree_current_user ||= Spree.user_class.find_by(id: doorkeeper_token.resource_owner_id) end def spree_authorize!(action, subject, *args)
api/lib/spree/api/testing_support/v2/base.rb+1 −1 modified@@ -4,7 +4,7 @@ let(:headers_order_token) { { 'X-Spree-Order-Token' => order.token } } end -[200, 201, 400, 404, 403, 422].each do |status_code| +[200, 201, 400, 401, 404, 403, 422].each do |status_code| shared_examples "returns #{status_code} HTTP status" do it "returns #{status_code}" do expect(response.status).to eq(status_code)
api/spec/requests/spree/api/v2/errors_spec.rb+15 −0 modified@@ -29,4 +29,19 @@ expect(json_response['error']).to eq('You are not authorized to access this page.') end end + + context 'expired token failure' do + let(:user) { create(:user) } + let(:headers) { headers_bearer } + + include_context 'API v2 tokens' + + before do + token.expires_in = -1 + token.save + get '/api/v2/storefront/account', headers: headers + end + + it_behaves_like 'returns 401 HTTP status' + end end
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
5- github.com/advisories/GHSA-f8cm-364f-q9qhghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2020-15269ghsaADVISORY
- github.com/rubysec/ruby-advisory-db/blob/master/gems/spree/CVE-2020-15269.ymlghsaWEB
- github.com/spree/spree/commit/e43643abfe51f54bd9208dd02298b366e9b9a847ghsax_refsource_MISCWEB
- github.com/spree/spree/security/advisories/GHSA-f8cm-364f-q9qhghsax_refsource_CONFIRMWEB
News mentions
0No linked articles in our index yet.