2011年 2月 26日 はてなブックマーク -

百聞は一見にしかず、どんな挙動をするか見ていきましょう。

$ telnet example.org 80

Trying example.org

Connected to example.org.

Escape character is ‘^]’.

TRACE / HTTP/1.1 #ここと

HOST: example.org #ここを手で入力して、エンターキー二回

このようにtelnetで80番に接続し、TRACEメソッドを発行します。ホスト名などは自分の環境に合わせて変更するのがよいかと。

そうすると、レスポンスが返ってきます。

んで、これの何が怖いかというと、


Escape character is ‘^]’.

TRACE / HTTP/1.1

HOST: example.org

HTTP/1.1 200 OK

Date: Fri, 25 Feb 2011 00:00:00 GMT

Server: Apache/0.0.0 (Unix) mod_ssl/0.0.0 OpenSSL/0.0.0

Content-Type: message/http


TRACE / HTTP/1.1 #ここと

HOST: example.org #ここがそのままレスポンスとして返される。

TRACEメソッドが有効だと、このようにステータスコード200を返し、そのあとに入力した内容がそのまま返されます。

(※ミドルウェアのバージョンや一部情報を改変しています)

これが自分で入力しているあいだは平和ですが、ブラウザでアクセスしたときにTRACEメソッドが発行されるように他人に埋め込まれてしまうと、

ブラウザで入力したBASIC認証のユーザ名やパスワードが漏れてしまいます。


Javascriptを書いた人なら分かるかと思いますが、GETやPOSTを特定のURLに対して飛ばすのは簡単なわけで、

TRACEメソッドも仕組みは変わりません。

BASIC認証をするページで認証の際に、ともにTRACEメソッドを発行させて、その結果を特定のサーバに送ったり、ファイルとして生成させるようなスクリプトを埋め込めば、いくらでもユーザ情報を入手できてしまいます。セッションIDなども取得できるので、セッションハイジャックなんかもできてしまいます。

TRACEメソッドに対する対策

そこで対策をしないといけないわけです。対策の方法はapacheのバージョンによって違うのですが、

2.2からだとTraceEnableディレクティブで設定できるので、


TraceEnable Off

とhttpd.confに書いて再起動させましょう。

少し古めのバージョンであれば、


<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{REQUEST_METHOD} ^TRACE

RewriteRule ^.*$ - [F]

</IfModule>

として、rewriteさせてしまうのがよいでしょう。

TRACEメソッドって怖いんです - カイワレの大冒険 (via atm09td)

1年前 | | 2011年 2月 26日 | このエントリーを含むはてなブックマーク