Loading HuntDB...

Installing a crafted gem package may create or overwrite files

High
R
RubyGems
Submitted None
Reported by mame

Vulnerability Details

Technical details and impact analysis

Path Traversal
There is no check for `name` field in `metadata.gz`. By assigning a maliciously crafted string like `../../../../../any/where` to the field, an attacker can create an arbitrary file out of the directory of the gem, or even replace an existing file with a malicious file. ## Proof of Concept 1: Create a file anywhere This PoC attempts to create a file `/tmp/malicious-0/BOOOOM`. 1) Download the attached file `malicious.gem`. 2) Run `gem install malicious.gem --no-doc`. 3) `/tmp/malicious-0/BOOOOM` should be created. `malicious.gem` assigns `../../../../../../../../../../tmp/malicious` as `name` field. This attack is relatively weak since the path must include a directory named `<name>-<version>`, such as `malicious-0`. Still, there are many chances that cause a catastrophe. For example, think of replacing a file in `/etc/dbus-1/`. ## Proof of Concept 2: Replace `rackup` command This PoC attempts to replace `gems/rack-2.0.3/bin/rackup` with a malicious file. 1) Download the attached file `replace-rackup.gem`. 2) Run `gem install rack -v 2.0.3`. 3) Run `gem install replace-rackup.gem --no-doc`. 4) Run `rackup`. It will emit just `BOOOOM!`. `replace-rackup.gem` assigns `../gems/rack` as `name` field, and contains a malicious file `bin/rackup`. This is really exploitable for attackers. ## Note For how to create the malicious gems, see the attached file `src.tar.gz`. In my opinion, **this attack is much more dangerous** than the issues I reported recently. I hope you could fix this issue ASAP.

Report Details

Additional information and metadata

State

Closed

Substate

Resolved

Bounty

$1000.00

Submitted

Weakness

Path Traversal