ActiveResource parses received responses from the server using Hash.from_xml. (Quite possibly ActionPack parses incoming XML requests this way too - I've not checked this)
However, Hash.from_xml is not safe to use with data from untrusted sources, because if you give it something which looks like a filename, it opens it. This behaviour is inherited from XML::Simple.
>> Hash.from_xml("/var/lib/scrollkeeper/en_GB/scrollkeeper_cl.xml")
=> {"ScrollKeeperContentsList"=>{"sect"=>[{"categorycode"=>"Applications",
... snip rest
Fortunately, it tests for regular files and so won't access special device nodes:
>> Hash.from_xml("/dev/null")
ArgumentError: File does not exist: /dev/null.
from /usr/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/vendor/xml_simple.rb:977:in `find_xml_file'
...
And it's not very exploitable for files which are not well-formed XML:
>> Hash.from_xml("/etc/passwd")
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.attributes
...
So this property appears only useful if you know the name of an XML file which already exists on the target machine. However a number of files fall into this category, e.g. 'gaim' uses an XML config file in a well-known location to store a user's passwords to access MSN servers.
Also, if an attacker can trigger accesses to arbitary files, the returned exception might give information on files which do or do not exist on the server.