[前][次][番号順一覧][スレッド一覧]

ruby-changes:47782

From: usa <ko1@a...>
Date: Thu, 14 Sep 2017 20:26:59 +0900 (JST)
Subject: [ruby-changes:47782] usa:r59900 (ruby_2_3): merge revision(s) 59897:

usa	2017-09-14 20:26:53 +0900 (Thu, 14 Sep 2017)

  New Revision: 59900

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=59900

  Log:
    merge revision(s) 59897:
    
    lib/webrick/log.rb: sanitize any type of logs
    
    It had failed to sanitize some type of exception messages.  Reported and
    patched by Yusuke Endoh (mame) at https://hackerone.com/reports/223363

  Modified directories:
    branches/ruby_2_3/
  Modified files:
    branches/ruby_2_3/ChangeLog
    branches/ruby_2_3/lib/webrick/httpstatus.rb
    branches/ruby_2_3/lib/webrick/log.rb
    branches/ruby_2_3/test/webrick/test_httpauth.rb
    branches/ruby_2_3/version.h
Index: ruby_2_3/test/webrick/test_httpauth.rb
===================================================================
--- ruby_2_3/test/webrick/test_httpauth.rb	(revision 59899)
+++ ruby_2_3/test/webrick/test_httpauth.rb	(revision 59900)
@@ -98,6 +98,42 @@ class TestWEBrickHTTPAuth < Test::Unit:: https://github.com/ruby/ruby/blob/trunk/ruby_2_3/test/webrick/test_httpauth.rb#L98
     }
   end
 
+  def test_bad_username_with_control_characters
+    log_tester = lambda {|log, access_log|
+      assert_equal(2, log.length)
+      assert_match(/ERROR Basic WEBrick's realm: foo\\ebar: the user is not allowed./, log[0])
+      assert_match(/ERROR WEBrick::HTTPStatus::Unauthorized/, log[1])
+    }
+    TestWEBrick.start_httpserver({}, log_tester) {|server, addr, port, log|
+      realm = "WEBrick's realm"
+      path = "/basic_auth"
+
+      Tempfile.create("test_webrick_auth") {|tmpfile|
+        tmpfile.close
+        tmp_pass = WEBrick::HTTPAuth::Htpasswd.new(tmpfile.path)
+        tmp_pass.set_passwd(realm, "webrick", "supersecretpassword")
+        tmp_pass.set_passwd(realm, "foo", "supersecretpassword")
+        tmp_pass.flush
+
+        htpasswd = WEBrick::HTTPAuth::Htpasswd.new(tmpfile.path)
+        users = []
+        htpasswd.each{|user, pass| users << user }
+        server.mount_proc(path){|req, res|
+          auth = WEBrick::HTTPAuth::BasicAuth.new(
+            :Realm => realm, :UserDB => htpasswd,
+            :Logger => server.logger
+          )
+          auth.authenticate(req, res)
+          res.body = "hoge"
+        }
+        http = Net::HTTP.new(addr, port)
+        g = Net::HTTP::Get.new(path)
+        g.basic_auth("foo\ebar", "passwd")
+        http.request(g){|res| assert_not_equal("hoge", res.body, log.call) }
+      }
+    }
+  end
+
   DIGESTRES_ = /
     ([a-zA-Z\-]+)
       [ \t]*(?:\r\n[ \t]*)*
Index: ruby_2_3/version.h
===================================================================
--- ruby_2_3/version.h	(revision 59899)
+++ ruby_2_3/version.h	(revision 59900)
@@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_3/version.h#L1
 #define RUBY_VERSION "2.3.5"
 #define RUBY_RELEASE_DATE "2017-09-14"
-#define RUBY_PATCHLEVEL 375
+#define RUBY_PATCHLEVEL 376
 
 #define RUBY_RELEASE_YEAR 2017
 #define RUBY_RELEASE_MONTH 9
Index: ruby_2_3/lib/webrick/log.rb
===================================================================
--- ruby_2_3/lib/webrick/log.rb	(revision 59899)
+++ ruby_2_3/lib/webrick/log.rb	(revision 59900)
@@ -118,10 +118,10 @@ module WEBrick https://github.com/ruby/ruby/blob/trunk/ruby_2_3/lib/webrick/log.rb#L118
     # * Otherwise it will return +arg+.inspect.
     def format(arg)
       if arg.is_a?(Exception)
-        "#{arg.class}: #{arg.message}\n\t" <<
+        "#{arg.class}: #{AccessLog.escape(arg.message)}\n\t" <<
         arg.backtrace.join("\n\t") << "\n"
       elsif arg.respond_to?(:to_str)
-        arg.to_str
+        AccessLog.escape(arg.to_str)
       else
         arg.inspect
       end
Index: ruby_2_3/lib/webrick/httpstatus.rb
===================================================================
--- ruby_2_3/lib/webrick/httpstatus.rb	(revision 59899)
+++ ruby_2_3/lib/webrick/httpstatus.rb	(revision 59900)
@@ -23,10 +23,6 @@ module WEBrick https://github.com/ruby/ruby/blob/trunk/ruby_2_3/lib/webrick/httpstatus.rb#L23
     ##
     # Root of the HTTP status class hierarchy
     class Status < StandardError
-      def initialize(*args) # :nodoc:
-        args[0] = AccessLog.escape(args[0]) unless args.empty?
-        super(*args)
-      end
       class << self
         attr_reader :code, :reason_phrase # :nodoc:
       end
Index: ruby_2_3/ChangeLog
===================================================================
--- ruby_2_3/ChangeLog	(revision 59899)
+++ ruby_2_3/ChangeLog	(revision 59900)
@@ -1,3 +1,10 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_3/ChangeLog#L1
+Thu Sep 14 20:25:55 2017  Yusuke Endoh  <mame@r...>
+
+	lib/webrick/log.rb: sanitize any type of logs
+
+	It had failed to sanitize some type of exception messages.  Reported and
+	patched by Yusuke Endoh (mame) at https://hackerone.com/reports/223363
+
 Thu Sep 14 13:32:39 2017  Nobuyoshi Nakada  <nobu@r...>
 
 	parse.y: empty hash in defined
Index: ruby_2_3
===================================================================
--- ruby_2_3	(revision 59899)
+++ ruby_2_3	(revision 59900)

Property changes on: ruby_2_3
___________________________________________________________________
Modified: svn:mergeinfo
## -0,0 +0,1 ##
   Merged /trunk:r59897

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]