Ruby Gem Arabic Prawn 0.0.1 Command Injection

2014-03-12T00:00:00
ID PACKETSTORM:125679
Type packetstorm
Reporter Larry W. Cashdollar
Modified 2014-03-12T00:00:00

Description

                                        
                                            `Title: Remote Command Injection in Arabic Prawn 0.0.1 Ruby Gem  
  
Author: Larry W. Cashdollar, @_larry0  
  
Download Site: http://rubygems.org/gems/Arabic-Prawn  
  
CVE: 2014-2322  
Date: 12/17/2013  
  
In Arabic-Prawn-0.0.1/lib/string_utf_support.rb, the following lines pass unsanitized input to the shell.  
  
426 var = %x{ /usr/bin/curl -I -L --fail --silent --connect-timeout #{seconds} --max-time #{seconds+10} #{url}; /bin/echo -n $? }.to_i   
427  
  
428 #return false unless var == 0  
429 raise "Failed to create connection to web site: #{url} -- curl error code: #{var} -- " unless var == 0  
430   
431 str = %x{ /usr/bin/curl -L --fail --silent --connect-timeout #{seconds} --max-time #{seconds+10} #{url} | \  
432 /usr/bin/grep -Eo -m 1 \"(charset|encoding)=[\\"']?[^\\"'>]+\" | /usr/bin/grep -Eo \"[^=\\" '>]+$\" }  
  
443 %x{ /usr/bin/touch #{downloaded_file} 2>/dev/null }  
444 raise "No valid HTML download file (path) specified!" unless File.file?(downloaded_file)  
445 %x{ /usr/bin/curl -L --fail --silent --connect-timeout #{seconds} --max-time #{seconds+10} -o #{downloaded_file} #{url} }  
446   
447 simple_test = %x{ /usr/bin/file -ik #{downloaded_file} } # cf. man file  
  
If the downloaded file name #{downloaded_file} or #{url} contains any shell meta characters like ';' a malicious user can inject shell commands.  
  
PoC  
myfile;id;.txt  
  
id would be passed to the command line and executed.  
  
Advisory: http://www.vapid.dhs.org/advisories/arabic-ruby-gem.html  
`