CVE-2020-15269
Expired token reuse in Spree
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.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
7.4
Expired token reuse in Spree
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.
- Record
CVE-2020-15269- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-287, CWE-613
- Updated
- 2026-11-02
EUVDEUVD-2020-1427
7.4
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.
- Record
EUVD-2020-1427- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-03
GitHub AdvisoriesGHSA-f8cm-364f-q9qh
7.4
Ensure that doorkeeper_token is valid when authenticating requests in API v2 calls
Impact
The perpetrator who previously obtained an old expired user token could use it to access Storefront API v2 endpoints.
Patches
Please upgrade to 3.7.11, 4.0.4, or 4.1.11 depending on your used Spree version.
Workarounds
In your project directory create a decorator file app/controllers/spree/api/v2/base_controller_decotatror.rb with contents:
module Spree
module Api
module V2
module BaseControllerDecorator
private
def spree_current_user
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
end
end
end
Spree::Api::V2::BaseController.prepend(Spree::Api::V2::BaseControllerDecorator)
For more information
If you have any questions or comments about this advisory:
- Email us at [email protected]
- Record
GHSA-f8cm-364f-q9qh- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-287, CWE-613
- Updated
- 2026-11-02
NVD
7.4
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.
- Record
CVE-2020-15269- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N - CVSS 2.0
- 6.4 Medium
AV:N/AC:L/Au:N/C:P/I:P/A:N - Weakness
- CWE-287, CWE-613
- Updated
- 2026-11-02
OSV
9.1
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.
- Record
CVE-2020-15269- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-02
OSVGHSA-f8cm-364f-q9qh
7.4
Ensure that doorkeeper_token is valid when authenticating requests in API v2 calls
Impact
The perpetrator who previously obtained an old expired user token could use it to access Storefront API v2 endpoints.
Patches
Please upgrade to 3.7.11, 4.0.4, or 4.1.11 depending on your used Spree version.
Workarounds
In your project directory create a decorator file app/controllers/spree/api/v2/base_controller_decotatror.rb with contents:
module Spree
module Api
module V2
module BaseControllerDecorator
private
def spree_current_user
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
end
end
end
Spree::Api::V2::BaseController.prepend(Spree::Api::V2::BaseControllerDecorator)
For more information
If you have any questions or comments about this advisory:
- Email us at [email protected]
- Record
GHSA-f8cm-364f-q9qh- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-287, CWE-613
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
spreeRubyGems |
before 3.7.11 | 3.7.11 |
spreeRubyGems |
4.0.0 up to 4.0.4 | 4.0.4 |
spreeRubyGems |
4.1.0 up to 4.1.11 | 4.1.11 |
spreeRubyGems |
before 3.7.11, plus listed versions 0.0.50.0.60.0.70.0.80.0.9 Show 45 moreShow less0.10.00.10.0.beta0.10.10.10.20.11.00.11.10.11.20.11.30.11.40.2.00.30.00.30.0.beta10.30.10.30.20.4.00.4.10.40.00.40.10.40.20.40.30.40.40.5.00.5.10.50.00.50.10.50.20.50.30.50.40.6.00.60.00.60.0.RC10.60.10.60.20.60.30.60.40.60.50.60.60.7.00.7.10.70.00.70.0.rc20.70.10.70.20.70.30.70.4 |
3.7.11 |
spreeRubyGems |
4.0.0 up to 4.0.4, plus listed versions 4.0.14.0.24.0.3 |
4.0.4 |
spreeRubyGems |
4.1.0 up to 4.1.11, plus listed versions 4.1.14.1.104.1.24.1.34.1.4 Show 5 moreShow less4.1.54.1.64.1.74.1.84.1.9 |
4.1.11 |
History
| Recorded | Changed | Sources |
|---|---|---|
| aliases | EUVD | |
| first indexed | CVE List, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2020-15269 is a high vulnerability (CVSS 7.4) in Sparksolutions Spree, published October 20, 2020. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 1.06%, the 64th percentile. Fixed in spree 3.7.11.
References
github.com/spree/spree/security/advisories/GHSA-f8cm-364f-q9qh
github.com/spree/spree/commit/e43643abfe51f54bd9208dd02298b366e9b9a847
nvd.nist.gov/vuln/detail/CVE-2020-15269
github.com/rubysec/ruby-advisory-db/blob/master/gems/spree/CVE-2020-15269.yml
github.com/advisories/GHSA-f8cm-364f-q9qh
github.com/spree/spree
Left out here: 213 versions. The JSON record has them.