XSS(クロスサイトスクリプティング)【平成29年度 春期 情報処理安全確保支援士試験 午後1 問2 設問3】

平成29年度 春期 情報処理安全確保支援士試験 午後1 問2 設問3

(略)

f:id:aolaniengineer:20200215121459p:plain

f:id:aolaniengineer:20200215121552p:plain

(略)

〔脆弱性2について〕

 脆弱性2は”クロスサイトスクリプティング”であった。脆弱性2を確認したのはプロフィール入力・変更画面であった。次はK氏とXさんとの会話である。

K氏:プロフィール入力・変更画面は、利用者が入力できるHTMLの要素が制限されています。しかし、例えば”<b>”タグ中に、②特定の属性を指定することによってスクリプトの実行が可能です。スクリプト実行の結果、Cookieの属性の設定によっては、Cookieの情報が盗まれます。これを用いて、(g:セッションハイジャック)が行われ、勝手にプロフィールが閲覧されたり、変更されたりするおそれがあります。

Xさん:そういうことですか。では、利用者が入力できるHTMLの要素の制限は変えずに、(h:タグの中で利用できる属性を制限する)という仕様に変更したいと思います。

K氏:それで問題ありません。

 Xさんは、二つの脆弱性について、対策をベンダに依頼した。対策後、J社にWebAP検査を依頼し、問題がないことを確認した。Xさんは、リリース前のWebAP検査の義務化をQさんに提案し、採用された。
【出典:情報処理安全確保支援士試験 平成29年度春期午後1問2(一部、加工あり)】

②に該当する属性(選択肢:accesskey/class/hidden/id/lang/onclick/onmouseover/title):onclick、onmouseover

プロフィール入力・変更画面の画面遷移の仕様(う)では、HTMLで許可されている要素は「b,font,i,s,sub,sup,u」に制限されています。

問題文にあるように、タグの中に属性を指定することで、任意のスクリプトを実行させることが可能です。例えば、ボタンがクリックされた際にメッセージを表示させたり、マウスを合わせた際に色を変えたりなど、様々な処理を指示できます。

このような処理を行うものをイベントハンドラといいます。イベントハンドラ名は、イベント名の前に「on」をつけたものがネーミングパターンになっています。

選択肢の中で、イベントハンドラであるのは、「onclick:要素がクリックされた時の処理」、「onmouseover:要素にマウスカーソルが重なった時の処理」になります。

g:セッションハイジャック

「Cookieの情報が盗まれ、勝手にプロフィールが閲覧されたり、変更されたりする」ことから、本人になりすまして操作が可能となるセッションハイジャックが該当します。

セッションIDを搬送する手段としては、Cookie、hiddenフィールド、URLリライティングがあり、Cookieが一番よく使われています。

Cookieを発行する際に与える属性はいくつかあり、例えば、secure属性を指定すると、TLSで保護された通信が用いられている場合のみ、Cookieがブラウザから送出されるようになります。

h:タグの中で利用できる属性を制限する

「利用者が入力できるHTMLの要素の制限は変えずに」とあることから、対策とすれば、不正な動作を引き起こす属性値の入力を許可しないということになります。