Zed A. Shaw
2007-Dec-29 02:31 UTC
[Mongrel-development] [SECURITY] Patch For Bug Serving Arbitrary Files
This is a proposed patch for the security hole reported today. You can just add the test for @path being at index 0 in the exanded req_path as shown below. Take heed of the comment I''ve added too, and there was a test for this very attack in the unit test suite, so it was removed by someone as well. I didn''t test this but I''m pretty sure it''s the fix. === lib/mongrel/handlers.rb =================================================================--- lib/mongrel/handlers.rb (revision 6851) +++ lib/mongrel/handlers.rb (local) @@ -132,8 +132,12 @@ # Add the drive letter or root path req_path = File.join(@path, req_path) if @path req_path = File.expand_path req_path - - if File.exist? req_path + + # do not remove the check for @path at the beginning, it''s what prevents + # the serving of arbitrary files (and good programmer Rule #1 Says: If + # you don''t understand something, it''s not because I''m stupid, it''s + # because you are). + if req_path.index(@path) == 0 and File.exist? req_path # It exists and it''s in the right location if File.directory? req_path # The request is for a directory @@ -153,7 +157,7 @@ return req_path end else - # does not exist or isn''t in the right spot + # does not exist or isn''t in the right spot or isn''t valid because not start with @path return nil end end -- Zed A. Shaw - Hate: http://savingtheinternetwithhate.com/ - Good: http://www.zedshaw.com/ - Evil: http://yearofevil.com/