脆弱性についてまとめてみるぼっちアドカレ8日目の記事です。
パストラバーサルとは??
パストラバーサルとは本来閲覧できるべきではないファイルなどについてパスなどを工夫しアクセスできてしまう脆弱性です。
例えばhttps://example.com/?file=home.phpなどとファイルをクエリパラメータで受け取っている際にhttps://example.com/?file=../../../etc/shadowなどとファイルパスをいじることで閲覧できてしまいます。
対策について
パストラバーサルの対策としてはまずファイルを外部から指定できないような仕様にすることです。
例えばhttps://example.com/homeを開いた際に内部的にhome.phpを参照するようにするなどです。このようにすれば閲覧するファイルを固定化できるのでパストラバーサルの対策として有効です。
またファイル名の入力が必要な場合は入力値の検証、サニタイズを行うことと適切な権限管理が重要です。
入力の検証については一般的にはbasename()などいったパスの中からファイル名を抽出する関数を使うのがいいと思います。
また権限管理についてはwebサーバーを実行しているユーザーに対しては必要なファイル以外閲覧できないようにすべきです。
フィルタリングの回避方法を探る
本来サニタイズを自分で実装するのは抜けがあるのでおすすめはされません。しかし簡単なフィルタリングのみが実装されているサイトがあるので脆弱なフィルタリングを回避する方法を調べてみました。
まず../を削除する方法について相対パスで一つ上のディレクトリに戻る際に使われるものですがこちらを単純に削除しているだけの場合があります。その場合....//とすることで削除後に../になるので回避可能です。
また単純なフィルタリングの場合エンコードをするだけで回避できる場合もあります 。
- URLエンコード:
%2e%2e%2f - ダブルエンコード:
%252e%252e%252f
HackerOneレポート
Arbitrary file read via the UploadsRewriter when moving and issue
リンク: https://hackerone.com/reports/827052
このレポートはGitlabに対して提出それたものでUploadsRewriterにパストラバーサルの脆弱性がありました。../などと階層を戻るようなリンクを設定しそのレポートを移動した際に指定したリンク先のファイルもコピーされてしまうものでした。これによりレポート内では自己ホスト環境ですが/etc/passwdファイル等が閲覧できています。
報奨金は$20,000出ていて夢がありますね
Path traversal in filename in LINE Mac client
リンク: https://hackerone.com/reports/727727
このレポートはLINEに対して提出されたレポートです。ファイルの名前にパストラバーサルを含めたファイルを送信することで任意のアプリケーションを実行することができました。
そしてkeepに対するファイルの検証不足で実行ファイルを送信できることを発見し組み合わせることで悪意のあるファイルを送信し実行することでコードの実行権限を取得することが可能でした。ファイル名でパストラバーサルを行うというのはなかなかおもしろいアイデアかなと思いました。あと同じぐらい重要な脆弱性を見つけてるのがすごくてやっぱり探そうと思ったらつよつよの人はいっぱいみつけちゃうんだなぁと思って自分ももっと勉強がんばりたいと思いました。