SSRF 対策の回避
Web アプリケーションに,利用者が指定した URL の画像を取得して表示する機能がある。SSRF 対策として,URL のホスト名を名前解決し,得られた IP アドレスがプライベートアドレスやリンクローカルアドレス(169.254.0.0/16)でないことを確認してから,HTTP クライアントで取得している。HTTP クライアントはリダイレクトに自動で追従する設定である。この対策を回避して,サーバから内部の宛先にリクエストを送信させる手口として,最も適切なものはどれか。
- ア攻撃者が管理するドメイン名を URL に指定し,その A レコードに内部の IP アドレスを登録しておく。
- イ攻撃者が管理する外部の Web サーバの URL を指定し,そのサーバから内部の宛先へのリダイレクト応答を返させる。
- ウ外部の Web サーバの URL に,内部のサービスが待ち受けるポート番号を指定する。
- エスクリプトを埋め込んだ SVG 形式の画像を指定し,画像を表示した利用者のブラウザでスクリプトを実行させる。
正解と解説を見る
正解 イ
この問題の基礎知識
- SSRF は,サーバに攻撃者が指定した宛先へリクエストを送信させ,外部から直接届かない内部のサーバやクラウドのメタデータサービスなどにアクセスさせる攻撃である。
- 宛先の検査は,実際に接続する全ての宛先に対して行わなければ回避され得る。HTTP のリダイレクト(3xx 応答の Location ヘッダ)に自動で追従すると,検査していない宛先に接続し得る。
- DNS リバインディングは,検査時と接続時とで名前解決の結果を変え,検査を通過した後に内部のアドレスへ接続させる手口である。
- XSS などはブラウザ上でスクリプトを実行させる攻撃であり,リクエストを送るのはブラウザであってサーバではない。
ホスト名を名前解決した結果の IP アドレスを検査しているので,A レコードに内部の IP アドレスを固定で登録しておいても,取得する前に拒否される。検査後に名前解決の結果を内部に切り替える DNS リバインディングとは異なり,この手口は URL の文字列だけを検査する実装にしか通用しない。
検査は最初に指定された URL の宛先に対してしか行われず,HTTP クライアントはリダイレクト先に検査なしで接続する。OWASP は,入力値の検証を回避されないよう,HTTP クライアントのリダイレクトの追従を無効にすることを求めている。
ポート番号を変えても接続先は検査済みの外部の Web サーバのままであり,内部の宛先へのリクエストにはならない。内部の宛先に到達させるには,接続先の IP アドレス自体を内部に向ける必要がある。
埋め込んだスクリプトが実行されるとしても,それは画像を表示した利用者のブラウザ上であり,リクエストを送るのもブラウザである。サーバ自身に内部の宛先へのリクエストを送らせる SSRF にはならない。
照合の根拠(2 件)
- イ(正解): リダイレクトの追従を有効にしていると入力値の検証が回避される
Note: Disable the support for the following of the redirection in your web client in order to prevent the bypass of the input validation described in the section Exploitation tricks > Bypassing restrictions > Input validation > Unsafe redirect of this document .
OWASP SSRF Prevention Cheat Sheet · Case 1, Application layer(新しいタブで開きます) - ア(誤り): 名前解決した IP アドレスを検査していれば,A レコードに固定で登録した内部アドレスは拒否される(回避できるのは検査と接続の間で結果を切り替える DNS リバインディング)
Domain allowlisting alone does not prevent DNS rebinding. Validate the resolved destination IP addresses against the application's permitted networks, then ensure the HTTP client connects only to validated addresses.
OWASP SSRF Prevention Cheat Sheet · Case 1, Application layer, Domain name(新しいタブで開きます)
問題文の対策は「名前解決した IP アドレスの検査」で,固定の A レコード(ア)は検査で止まるが,リダイレクト先には検査が掛からずクライアントが自動で追従するので,イだけが内部へ到達できる。ウはポートを変えても接続先が検査済みの外部ホストのまま,エはリクエスト主体がブラウザなので SSRF にならない(いずれも論理的に排除)。