SecurityError requiring gems and other files with $SAFE=1 in Ruby1.9.1

P

Philip Ross

I'm using my own compiled version of Ruby 1.9.1p0 on Debian etch. With
$SAFE=1, I get the following error trying to require gems (in this
example Rake, but I get the same error with other gems):
SecurityError: Insecure operation - require
from (irb):2:in `require'
from (irb):2
from /usr/local/ruby/1.9/bin/irb:12:in `<main>'

The Rake gem is installed in the usual place:
=> "/usr/local/ruby/1.9.1-p0/lib/ruby/gems/1.9.1/gems/rake-0.8.4/bin"

I get the same error trying to load an arbitrary file:
SecurityError: Insecure operation - require
from (irb):2:in `require'
from (irb):2
from /usr/local/ruby/1.9/bin/irb:12:in `<main>'

I've just tried with the latest Ruby snapshot version and this has the
same issues, albeit with a (slightly) more helpful error message:
SecurityError: cannot load from insecure path -
/usr/local/ruby/snapshot/lib/ruby/gems/1.9.1/gems/rake-0.8.4/lib/rake.rb
from (irb):2:in `require'
from (irb):2
from /usr/local/ruby/snapshot/bin/irb:12:in `<main>'

Could anyone tell me if this is the expected behaviour of Ruby 1.9? I
couldn't find any information about safe mode that would suggest these
SecurityErrors should be raised?

Thanks,

Phil
 
P

Philip Ross

Philip said:
I get the following error trying to require gems (in this
example Rake, but I get the same error with other gems):

SecurityError: Insecure operation - require
from (irb):2:in `require'
from (irb):2
from /usr/local/ruby/1.9/bin/irb:12:in `<main>'

I've now found that if I bypass RubyGems and require rake manually using
its full path, I don't get the SecurityError.
'/usr/local/ruby/snapshot/lib/ruby/gems/1.9.1/gems/rake-0.8.4/lib/rake'
=> true
I get the same error trying to load an arbitrary file:

SecurityError: Insecure operation - require
from (irb):2:in `require'
from (irb):2
from /usr/local/ruby/1.9/bin/irb:12:in `<main>'

The same is true requiring arbitrary files - if I use the full path
rather than relying on the load paths, I don't get the security error:
=> true

Should Ruby 1.9 behave the same when requiring files using a full path
than when relying on the load paths?

Regards,

Phil
 
E

Eric Hodel

I'm using my own compiled version of Ruby 1.9.1p0 on Debian etch.
With $SAFE=1, I get the following error trying to require gems (in
this example Rake, but I get the same error with other gems):

SecurityError: Insecure operation - require
from (irb):2:in `require'
from (irb):2
from /usr/local/ruby/1.9/bin/irb:12:in `<main>'

The Rake gem is installed in the usual place:

=> "/usr/local/ruby/1.9.1-p0/lib/ruby/gems/1.9.1/gems/rake-0.8.4/bin"

I get the same error trying to load an arbitrary file:

SecurityError: Insecure operation - require
from (irb):2:in `require'
from (irb):2
from /usr/local/ruby/1.9/bin/irb:12:in `<main>'

I've just tried with the latest Ruby snapshot version and this has
the same issues, albeit with a (slightly) more helpful error message:

SecurityError: cannot load from insecure path - /usr/local/ruby/
snapshot/lib/ruby/gems/1.9.1/gems/rake-0.8.4/lib/rake.rb
from (irb):2:in `require'
from (irb):2
from /usr/local/ruby/snapshot/bin/irb:12:in `<main>'

Could anyone tell me if this is the expected behaviour of Ruby 1.9?
I couldn't find any information about safe mode that would suggest
these SecurityErrors should be raised?

This is likely the issue:

$ ruby19 -rpp -e '$SAFE = 1; pp $LOAD_PATH.map { |path| [path,
path.tainted?] }'

Please file a bug.
 
P

Phil Ross

Eric said:
This is likely the issue:

$ ruby19 -rpp -e '$SAFE = 1; pp $LOAD_PATH.map { |path| [path,
path.tainted?] }'

Please file a bug.

I am seeing that the gem lib paths are tainted, but the current
directory is not. I am seeing the SecurityError requiring files from
gems and from the current directory though.

I've just tried running

$LOAD_PATH.each {|p| p.untaint}

to untaint each entry in the load path. The load path entries all become
untainted, but SecurityErrors are still raised when running require.

Regards,

Phil
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,764
Messages
2,569,567
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top