Skip to content

Code Injection vulnerability in CarrierWave::RMagick

High severity GitHub Reviewed Published Feb 8, 2021 in carrierwaveuploader/carrierwave • Updated May 4, 2023

Package

bundler carrierwave (RubyGems)

Affected versions

< 1.3.2
>= 2.0.0, < 2.1.1

Patched versions

1.3.2
2.1.1

Description

Impact

CarrierWave::RMagick has a Code Injection vulnerability. Its #manipulate! method inappropriately evals the content of mutation option(:read/:write), allowing attackers to craft a string that can be executed as a Ruby code.
If an application developer supplies untrusted inputs to the option, it will lead to remote code execution(RCE).

(But supplying untrusted input to the option itself is dangerous even in absence of this vulnerability, since is prone to DoS vulnerability - attackers can try to consume massive amounts of memory by resizing to a very large dimension)

Proof of Concept

class MyUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
end

MyUploader.new.manipulate!({ read: { density: "1 }; p 'Hacked'; {" }}) # => shows "Hacked"

Patches

Upgrade to 2.1.1 or 1.3.2.

Workarounds

Stop supplying untrusted input to #manipulate!'s mutation option.

References

Code Injection Software Attack

For more information

If you have any questions or comments about this advisory:

References

Reviewed Feb 8, 2021
Published to the GitHub Advisory Database Feb 8, 2021
Published by the National Vulnerability Database Feb 8, 2021
Last updated May 4, 2023

Severity

High
7.4
/ 10

CVSS base metrics

Attack vector
Network
Attack complexity
Low
Privileges required
Low
User interaction
None
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
Low
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:L

CVE ID

CVE-2021-21305

GHSA ID

GHSA-cf3w-g86h-35x4

Credits

Checking history
See something to contribute? Suggest improvements for this vulnerability.