GitHub Advisoryadvisory · RubyGems
GHSA-vfmv-jfc5-pjjw CarrierWave content-Type allowlist bypass vulnerability which possibly leads to XSS remained
MEDIUM
Official page ↗
- Aliases
- CVE-2024-29034
- Ecosystem
- RubyGems
- Packages
- carrierwave
- Severity
- Moderate
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:N/A:N
- Weaknesses
- CWE-436, CWE-79
- Reviewed
- 2024-03-25
Affected packages
• RubyGems carrierwave: >= 3.0.0, < 3.0.7 → fixed in 3.0.7
• RubyGems carrierwave: < 2.2.6 → fixed in 2.2.6
Description
Impact
The vulnerability CVE-2023-49090 wasn't fully addressed.
This vulnerability is caused by the fact that when uploading to object storage, including Amazon S3, it is possible to set a Content-Type value that is interpreted by browsers to be different from what's allowed by `content_type_allowlist`, by providing multiple values separated by commas.
This bypassed value can be used to cause XSS.
Patches
Upgrade to 3.0.7 or 2.2.6.
Workarounds
Use the following monkey patch to let CarrierWave parse the Content-type by using `Marcel::MimeType.for`.
```ruby
For CarrierWave 3.x
CarrierWave::SanitizedFile.class_eval do
def declared_content_type
@declared_content_type ||
if @file.respond_to?(:content_type) && @file.content_type
Marcel::MimeType.for(declared_type: @file.content_type.to_s.chomp)
end
end
end
```
```ruby
For CarrierWave 2.x
CarrierWave::SanitizedFile.class_eval do
def existing_content_type
if @file.respond_to?(:content_type) && @file.content_type
Marcel::MimeType.for(declared_type: @file.content_type.to_s.chomp)
end
end
end
```
References
OWASP - File Upload Cheat Sheet
Related
Alias · CVE (1)
- CVE-2024-29034 CarrierWave is a solution for file uploads for Rails, Sinatra and other Ruby web frameworks. vulnerability
References
- https://github.com/carrierwaveuploader/carrierwave/security/advisories/GHSA-vfmv-jfc5-pjjw web
- https://nvd.nist.gov/vuln/detail/CVE-2024-29034 advisory
- https://github.com/carrierwaveuploader/carrierwave/commit/25b1c800d45ef8e78dc445ebe3bd8a6e3f0a3477 web
- https://github.com/carrierwaveuploader/carrierwave package
- https://github.com/rubysec/ruby-advisory-db/blob/master/gems/carrierwave/CVE-2024-29034.yml web