HTTPリクエストヘッダーから推測できる攻撃|情報処理安全確保支援士 令和4年 春期午前Ⅱ試験 問1
出典:令和4年春期 午前Ⅱ 問1
分野:セキュリティ / 情報セキュリティ
Webサーバのログを分析したところ,Webサーバへの攻撃と思われるHTTPリクエストヘッダーが記録されていた。次のHTTPリクエストヘッダーから推測できる,攻撃者が悪用しようとしていた可能性が高い脆弱性はどれか。ここで,HTTPリクエストヘッダー中の"%20"は空白を意味する。
〔HTTPリクエストヘッダーの一部〕
GET /cgi-bin/submit.cgi?user=;cat%20/etc/passwd HTTP/1.1
Accept: */*
Accept-Language: ja
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: (省略)
Host: test.example.com
Connection: Keep-Alive
〔HTTPリクエストヘッダーの一部〕
GET /cgi-bin/submit.cgi?user=;cat%20/etc/passwd HTTP/1.1
Accept: */*
Accept-Language: ja
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: (省略)
Host: test.example.com
Connection: Keep-Alive
- ア:HTTPヘッダーインジェクション(HTTP Response Splitting)
- イ:OSコマンドインジェクション
- ウ:SQLインジェクション
- エ:クロスサイトスクリプティング
TSUNAGARU-ADVICE
まず押さえたいこと
OSコマンドインジェクションは、Webアプリケーションに渡された入力値が、OSコマンドの一部として実行されてしまう脆弱性です。この例では、;cat /etc/passwdというOSコマンド実行を狙った文字列が含まれています。
迷ったときの判断軸
「;」はコマンドを区切るために使われることがあり、「cat /etc/passwd」はUNIX系OSでパスワード関連ファイルを表示しようとする典型的な攻撃例です。SQL文・HTMLスクリプト・HTTPヘッダーの改ざんではなく、OS上のコマンドを実行させようとしている点に注目すると判断できます。
科目Bにつなげるために
科目Bでは、攻撃文字列から脆弱性の種類を推定する問題が出ることがあります。入力値がSQLに渡されるならSQLインジェクション、画面に出力されるならXSS、OSコマンドに渡されるならOSコマンドインジェクションというように、入力値が最終的にどこで解釈されるかを確認しましょう。
OSコマンドインジェクションは、Webアプリケーションに入力された文字列が、OSコマンドの一部として解釈・実行される脆弱性です。
問題文のHTTPリクエストには、userパラメータとして「;cat%20/etc/passwd」が指定されています。「%20」は空白なので、URLデコードすると「;cat /etc/passwd」となります。
UNIX系OSでは、「;」は複数のコマンドを区切るために使われ、「cat /etc/passwd」は/etc/passwdファイルの内容を表示するコマンドです。入力値を適切に処理せずOSコマンドへ渡している場合、攻撃者が本来意図していないコマンドを追加実行できるおそれがあります。
したがって、イが適切です。
❌他選択肢が誤りの理由ア:HTTPヘッダーインジェクション(HTTP Response Splitting)
⇒HTTPレスポンスヘッダーへ改行コードなどを混入させ、レスポンスを不正に分割する攻撃です。このリクエストでは、HTTPヘッダーではなくOSコマンドとして解釈される文字列が指定されています。
ウ:SQLインジェクション
⇒SQL文へ不正な文字列を挿入し、データベースを不正操作する攻撃です。「cat /etc/passwd」はSQLではなくOSコマンドです。
エ:クロスサイトスクリプティング
⇒Webページへ不正なスクリプトを混入させ、利用者のブラウザ上で実行させる攻撃です。この例ではブラウザ上のスクリプト実行ではなく、サーバ上のOSコマンド実行を狙っています。