情報処理安全確保支援士令和2年秋期 午前U 問1

午前U 問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ヘッダインジェクション(HTTP Response Splitting)
  • OSコマンドインジェクション
  • SQLインジェクション
  • クロスサイトスクリプティング
  • [この問題の出題歴]
  • 安全確保支援士 H30春期 問2

分類

テクノロジ系 » セキュリティ » 情報セキュリティ

正解

解説

HTTPリクエストヘッダ中で注目すべきは「?user=;cat%20/etc/passwd」の部分です。

「cat」は、UNIX系のOSにおいて指定ファイルの内容をそのまま標準出力に出力するコマンドです。そして「/etc/passwd」は、ユーザのアカウント情報(ユーザ名・パスワード等)が記録されているファイルですから、「cat%20/etc/passwd」はシステムが管理するユーザのアカウント情報を全て表示する操作を意図したものです。

もしWebアプリケーションの処理内でOSのシェルを利用する関数を使用し、これにuserパラメタの値をそのまま実行時引数として与えたとすると、サブルーチンとして呼び出されるOSのコマンド解釈プログラムでは以下の命令が実行されます。
本来実行されるコマンド名 ;cat /etc/passwd
実行時引数内の「;(セミコロン)」は命令の区切りを意味するため、システムは上記の文字列を以下の2つの命令であると解釈します。
本来実行されるコマンド名
cat /etc/passwd
この結果「cat /etc/passwd」が実行され、ブラウザの結果画面に秘密情報であるアカウント情報が表示されてしまいます。

このような攻撃を受ける可能性があるため、サブシェルに渡すコマンドに外部から与えられたデータを含める場合は値のチェックが欠かせません。「;」以外にも、「|」「&」「`」「(」「)」などは別コマンドの実行に使われるものとして特に警戒する必要があります。

設問の攻撃はWebアプリケーションに任意のOSコマンドを実行させようとするものですから、OSコマンドインジェクションの脆弱性を悪用したものと言えます。したがって「イ」が正解です。

Perlのexec(),open()、PHPのexec(), passthru(), proc_open(), shell_exec(), system()、Pythonのos.system(), os.popen()などがある。
© 2014-2020 情報処理安全確保支援士ドットコム All Rights Reserved.

Pagetop