TORIPIYO DIARY

recent events, IoT, programming, security topics

railsのスラッシュスラッシュ(//)ルーティングの挙動には気をつけよう

railsのルーティング処理では、//secret というパスへのアクセスを、/secret のルーティングとして処理してくれるそうです。

stackoverflow.com

例えば、/secret は一般の人にはアクセスして欲しくない特別なページなので、プロキシなどを rails サーバの前において、/secretのパスでアクセスを受けたらBasic認証などを求めるように設定しているシステムがあるとします。

(user) ----> (プロキシ・L7バランサなど) ----> (rails サーバ)

この状態で、ユーザが /secret のパスでリクエストをすると、設定の通りBasic認証を求められて正しいクレデンシャルを入力しないと /secret のコンテンツは取得できません。

しかし、ここでもし、ユーザが //secret のパスでリクエストを投げると、、、プロキシやL7バランサの設定にもよりますが、プロキシ・L7バランサをすり抜けてBasic認証は求められず、rails//secret というパスのアクセスが渡り、/secretのルーティング処理が実行されて、特別なページのコンテンツを返してしまう可能性があります😱

10個ぐらいrailsサイトがあれば、1個ぐらいは//ルーティングで認証回避できてしまうものもあるかもしれません。 railsの前段に認証処理を置いている場合は回避できるようなパスが存在しないか気をつけて設定しましょう。