GHSA-w3q8-m492-4pwp CVE-2023-48220
Possibility to circumvent the invitation token expiry period
- Severity
- 5.7 / 10
- High · CVSS 3.1
- Exploit chance (EPSS)
- 0.79%
- Chance of exploitation in the next 30 days. Higher than 56.30% of scored vulnerabilities.
- Known exploited
- No
- Not in CISA's catalog
- Weakness
- CWE-672 Operation on a Resource after Expiration or Release
- Fix
- Available
- 4 packages have a fixed version
Description
Impact
The invites feature allows users to accept the invitation for an unlimited amount of time through the password reset functionality.
When using the password reset functionality, the devise_invitable gem always accepts the pending invitation if the user has been invited as shown in this piece of code within the devise_invitable gem:
https://github.com/scambra/devise_invitable/blob/41f58970ff76fb64382a9b9ea1bd530f7c3adab2/lib/devise_invitable/models.rb#L198
The only check done here is if the user has been invited but the code does not ensure that the pending invitation is still valid as defined by the invite_for expiry period as explained in the gem's documentation:
https://github.com/scambra/devise_invitable#model-configuration-
invite_for: The period the generated invitation token is valid. After this period, the invited resource won’t be able to accept the invitation. Wheninvite_foris0(the default), the invitation won’t expire.
Decidim sets this configuration to 2.weeks so this configuration should be respected:
https://github.com/decidim/decidim/blob/d2d390578050772d1bdb6d731395f1afc39dcbfc/decidim-core/config/initializers/devise.rb#L134
The bug is in the devise_invitable gem and should be fixed there and the dependency should be upgraded in Decidim once the fix becomes available.
Patches
Update devise_invitable to version 2.0.9 or above by running the following command:
$ bundle update devise_invitable
Workarounds
The invitations can be cancelled directly from the database by running the following command from the Rails console:
> Decidim::User.invitation_not_accepted.update_all(invitation_token: nil)
References
OWASP ASVS V4.0.3-2.3.1
This bug has existed in the devise_invitable gem since this commit which was first included in the v0.4.rc3 release of this gem:
https://github.com/scambra/devise_invitable/commit/94d859c7de0829bf63f679ae5dd3cab2b866a098
All versions since then are affected.
This gem was first introduced at its version ~> 1.7.0 to the decidim-admin gem in this commit which was first included in the v0.0.1.alpha3 release of Decidim:
https://github.com/decidim/decidim/commit/073e60e2e4224dd81815a784002ebba30f2ebb34
It was first introduced at its version ~> 1.7.0 to the decidim-system gem in this commit which was also first included in the v0.0.1.alpha3 release of Decidim:
https://github.com/decidim/decidim/commit/b12800717a689c295a9ea680a38ca9f823d2c454
Credits
This issue was discovered in City of Helsinki's security audit against Decidim 0.27 done during September 2023. The security audit was implemented by Deloitte Finland.
Affected versions
RubyGems
| Package | Vulnerable | Fixed in |
|---|---|---|
| decidim | >= 0.0.1.alpha3, < 0.26.9 |
0.26.9 |
| decidim | >= 0.27.0, < 0.27.5 |
0.27.5 |
| decidim-admin | >= 0.0.1.alpha3, < 0.26.9 |
0.26.9 |
| decidim-admin | >= 0.27.0, < 0.27.5 |
0.27.5 |
| decidim-system | >= 0.0.1.alpha3, < 0.26.9 |
0.26.9 |
| decidim-system | >= 0.27.0, < 0.27.5 |
0.27.5 |
| devise_invitable | >= 0.4.rc3, < 2.0.9 |
2.0.9 |
How to fix
Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.
decidim RubyGems → 0.26.9
- bundler
bundle update decidim # Gemfile: gem "decidim", ">= 0.26.9"
decidim-admin RubyGems → 0.26.9
- bundler
bundle update decidim-admin # Gemfile: gem "decidim-admin", ">= 0.26.9"
decidim-system RubyGems → 0.26.9
- bundler
bundle update decidim-system # Gemfile: gem "decidim-system", ">= 0.26.9"
devise_invitable RubyGems → 2.0.9
- bundler
bundle update devise_invitable # Gemfile: gem "devise_invitable", ">= 2.0.9"
Severity breakdown
CVSS 3.1 5.7
CVSS:3.1/AV:N/AC:H/PR:H/UI:R/S:U/C:H/I:H/A:N
- Attack vector
- Network
- Attack complexity
- High
- Privileges required
- High
- User interaction
- Required
- Scope
- Unchanged
- Confidentiality
- High
- Integrity
- High
- Availability
- None
Weakness
CWE-672: Operation on a Resource after Expiration or Release
The product uses, accesses, or otherwise operates on a resource after that resource has been expired, released, or revoked.
References
Advisories
Packages
Other links
- github.com/decidim/decidim/security/advisories/GHSA-w3q8-m492-4pwp
- github.com/decidim/decidim/commit/073e60e2e4224dd81815a784002ebba30f2ebb34
- github.com/decidim/decidim/commit/b12800717a689c295a9ea680a38ca9f823d2c454
- github.com/scambra/devise_invitable/commit/94d859c7de0829bf63f679ae5dd3cab2b866…
- github.com/decidim/decidim/blob/d2d390578050772d1bdb6d731395f1afc39dcbfc/decidi…
- github.com/decidim/decidim/releases/tag/v0.26.9
- github.com/decidim/decidim/releases/tag/v0.27.5
- github.com/decidim/decidim/releases/tag/v0.28.0
- github.com/scambra/devise_invitable/blob/41f58970ff76fb64382a9b9ea1bd530f7c3ada…
Timeline
- Published
- Last updated by the source
- Latest EPSS score
Related advisories
| Advisory | Severity | Why it's related |
|---|---|---|
| GHSA-r3v7-5x4c-c69q Decidim: JWT-backed authentication can be replayed across organizations | High | Also affects decidim |
| GHSA-3cx6-j9j4-54mp Decidim's private data exports can lead to data leaks | Medium | Also affects decidim |
| GHSA-cc4g-m3g7-xmw8 Decidim has a cross-site scripting vulnerability in the version control page | High | Also affects decidim |
| GHSA-vvqw-fqwx-mqmm Decidim::Admin vulnerable to cross-site scripting (XSS) in the admin panel with QuillJS WYSWYG editor | Medium | Also affects decidim |
| GHSA-7cx8-44pc-xv3q Decidim cross-site scripting (XSS) in the pagination | High | Also affects decidim |
| GHSA-qcj6-vxwx-4rqv Decidim vulnerable to data disclosure through the embed feature | Medium | Also affects decidim |
| GHSA-9w99-78rj-hmxq Cross-site scripting (XSS) in the dynamic file uploads | Medium | Also affects decidim |
| GHSA-r275-j57c-7mf2 Race condition in Endorsements | Low | Also affects decidim |
MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.
Check your repos with MergeHarbor