Security
Headlines
HeadlinesLatestCVEs

Headline

CVE-2023-28102: GHSL-2022-094: Remote Code Execution in discordrb - CVE-2023-28102

discordrb is an implementation of the Discord API using Ruby. In discordrb before commit 91e13043ffa the encoder.rb file unsafely constructs a shell string using the file parameter, which can potentially leave clients of discordrb vulnerable to command injection. The library is not directly exploitable: the exploit requires that some client of the library calls the vulnerable method with user input. However, if unsafe input reaches the library method, then an attacker can execute arbitrary shell commands on the host machine. Full impact will depend on the permissions of the process running the discordrb library and will likely not be total system access. This issue has been addressed in code, but a new release of the discordrb gem has not been uploaded to rubygems. This issue is also tracked as GHSL-2022-094.

CVE
#vulnerability#mac#git#rce#ruby

Coordinated Disclosure Timeline

  • 2022-12-27: Contacted maintainer over Discord about vulnerability, maintainer says will fix.
  • 2023-03-09: Vulnerability fixed and Code Scanning Added to Repo
  • 2023-03-15: Vulnerability assigned CVE-2023-28102

Summary

The encode_file method may lead to remote code execution if invoked with untrusted user-controlled data.

Product

discordrb

Tested Version

3.4.1 (latest)

Details****Issue: Unsafe construction of shell command in encode_file (GHSL-2022-094)

The encoder.rb file unsafely constructs a shell string using the file parameter, which can potentially leave clients of discordrb vulnerable to command injection.

The library is not directly exploitable: the exploit requires that some client of the library calls the vulnerable method with user input. However, if unsafe input reaches the library method, then an attacker can execute arbitrary shell commands on the host machine. Here is the CodeQL result.

Proof of Concept

Here is a PoC (relevant code copy-pasted into the PoC for ease of setup).

The observed effect should be that a new file pwned is created in the current working directory.

## This is how the PoC would be if you setup discordrb. 
# require 'discordrb'
# bot = Discordrb::Voice::Encoder.new
# bot.encode_file(`touch pwned`)


ffmpeg_command = "foo" # unrelated
options = "" # unrelated
filter_volume_argument = "bar" # unrelated

# Command that will be executed
file = "`touch pwned`"

# This command should be build as an array instead of a string, that way injection would be impossible!
command = "#{ffmpeg_command} -loglevel 0 -i \"#{file}\" #{options} -f s16le -ar 48000 -ac 2 #{filter_volume_argument} pipe:1"
IO.popen(command)

Impact

This issue may lead to Remote Command Execution (RCE).

Resources

CodeQL for Ruby - Unsafe shell command constructed from library input.

CodeQL Result

  • CVE-2023-28102

Credit

This issue was discovered and reported by GHSL team member @erik-krogh (Erik Krogh Kristensen).

You can contact the GHSL team at [email protected], please include a reference to GHSL-2022-094 in any communication regarding this issue.

Related news

GHSA-8832-4mm5-x2r6: discordrb OS Command Injection vulnerability

discordrb is an implementation of the Discord API using Ruby. In discordrb before commit `91e13043ffa` the `encoder.rb` file unsafely constructs a shell string using the file parameter, which can potentially leave clients of discordrb vulnerable to command injection. The library is not directly exploitable: the exploit requires that some client of the library calls the vulnerable method with user input. However, if unsafe input reaches the library method, then an attacker can execute arbitrary shell commands on the host machine. Full impact will depend on the permissions of the process running the `discordrb` library and will likely not be total system access. This issue has been addressed in code, but a new release of the `discordrb` gem has not been uploaded to rubygems. This issue is also tracked as `GHSL-2022-094`.

CVE: Latest News

CVE-2023-50976: Transactions API Authorization by oleiman · Pull Request #14969 · redpanda-data/redpanda
CVE-2023-6905
CVE-2023-6903
CVE-2023-6904
CVE-2023-3907