[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Remote Command Injection in Arabic Prawn 0.0.1 Ruby Gem
- To: full <full-disclosure@xxxxxxxxxxxxxxxxx>
- Subject: Remote Command Injection in Arabic Prawn 0.0.1 Ruby Gem
- From: "Larry W. Cashdollar" <larry0@xxxxxx>
- Date: Wed, 12 Mar 2014 08:38:30 -0400
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