Written by 夏野ゆきか
Webアプリケーション診断で指摘される
脆弱性TOP5を解説!
Webアプリのセキュリティ対策は万全ですか?
実際に診断でよく指摘される脆弱性TOP5を
原因や対策方法も含め、分かりやすく説明します。
目 次
HTTPヘッダインジェクションとは、攻撃者がWebアプリケーションの設計や実装上の不備(脆弱性)を悪用し、HTTPレスポンスヘッダに不正な文字列を挿入することで、悪意ある動作を引き起こす攻撃手法です。
HTTP通信では、以下のようなプロセスが実行されます。
1. Webブラウザが「HTTPリクエスト」を、Webサーバーに送信する。
2. Webサーバーが「HTTPレスポンス」として、要求されたデータをWebブラウザに返送する。
このやり取りの中で送受信される情報には、コンテンツ本体に加えて「HTTPヘッダ」と呼ばれる補足情報が含まれています。HTTPヘッダは、リクエストやレスポンスに関するメタ情報を提供する重要な役割を果たしますが、攻撃者はこのヘッダに悪意のあるコードを注入することで、不正な動作を誘発します。
アプリケーション側がユーザーからのリクエストを適切に検証・処理せず、そのままHTTPレスポンスのヘッダに反映してしまうことが、HTTPヘッダインジェクション攻撃の原因です。
HTTPヘッダに不正なコードを含めることで、偽サイトにリダイレクトさせたり、サイトを改ざんしたりすることが可能になってしまいます。
HTTPヘッダインジェクションには、以下のような対策が有効です。
- ・ ユーザーが入力したデータをHTTPレスポンスヘッダに含めない
- ・ APIを利用する
- ・ 外部からの改行コードを許可しない
本記事では、HTTPヘッダインジェクションの仕組みや具体的なリスク、そして効果的な対策について詳しく解説します。
HTTPとは?
HTTP(ハイパーテキスト・トランスファー・プロトコル)とは、WebブラウザとWebサーバー間でデータを転送するための通信規約(プロトコル)です。
HTTPは、WebブラウザとWebサーバーが効率的に情報交換を行うための基本的なルールを提供するものであり、この仕組みによって、私たちはWebページを閲覧できます。
WebブラウザがHTTPを利用してWebページを表示する流れ
WebブラウザがHTTPを利用し、Webページを表示するまでの基本的な流れは以下の通りです。
1. ユーザーが閲覧したいWebページのURLを入力、またはリンクをクリックする。
2. Webブラウザが指定されたWebサーバーにHTTPリクエストを送信する。
3. Webサーバーはリクエストを受信し、要求されたデータをHTTPレスポンスとして返す。
4. Webブラウザは受信したレスポンスデータを解析し、Webページを表示する。
具体的には、ユーザーがブラウザ上でリンクをクリックすると、ブラウザはHTTPリクエストを生成し、指定されたURLのホスト(Webサーバー)に送信します。リクエストには、要求するリソースの情報(パスやパラメータ)やメタデータ(ヘッダー情報)が含まれます。
Webサーバーはこれを受信し、対応するHTMLデータやその他のリソースをHTTPレスポンスとして返送。ブラウザはレスポンスを解析し、最終的にWebページが表示されます。
Webアプリケーション診断で指摘される
脆弱性TOP5を解説!
Webアプリのセキュリティ対策は万全ですか?
実際に診断でよく指摘される脆弱性TOP5を
原因や対策方法も含め、分かりやすく説明します。
HTTPヘッダインジェクションとは
改めてHTTPヘッダインジェクションとは、WebブラウザがWebサーバーに送信するHTTPリクエストに不正な文字列を注入し、WebサーバーからのHTTPレスポンスを改ざんする攻撃です。
以下のような被害が生じる可能性があります。
- ・ 正規ユーザーのアカウント乗っ取り
- ・ Webコンテンツの改ざん
- ・ 外部サイトへの意図しないリダイレクト
具体的には、攻撃者がレスポンスヘッダに新たな項目を追加したり、レスポンスボディに任意のデータを挿入したりすることで、挙動を意図的に変更します。Webアプリケーションにおける、入力値の不適切なサニタイズ(無害化処理)を攻撃者に悪用されることで、攻撃が成立します。
HTTPヘッダとは
HTTPヘッダとは、HTTPリクエストおよびHTTPレスポンスに付加される補足情報を指します。HTTP通信では単にデータを送受信するだけでなく、各種設定やメタデータを伝達するためにHTTPヘッダが利用されます。
HTTPリクエストとHTTPレスポンスは以下のような要素で構成されています。
▼HTTPリクエストの構成要素
1. リクエスト行 例: GET /index.html HTTP/1.1
2. HTTPヘッダ(リクエストヘッダ) 例: Host: www.example.com
3. 空白行
4. メッセージボディ(リクエストボディ) 例: フォームデータやJSONデータ
▼HTTPレスポンスの構成要素
1.ステータス行
2.HTTPヘッダ(レスポンスヘッダ)
3.空白行
4.メッセージボディ(レスポンスボディ)
HTTPヘッダは1行ごとに1つの情報を保持しており、ヘッダ間は改行コードで区切られています。この改行コードの処理に不備がある場合、不正なヘッダを追加される危険性があります。
HTTPヘッダインジェクション攻撃を受けた場合の被害
HTTPヘッダインジェクション攻撃を受けた場合、以下のような被害が発生する恐れがあります。
- ・ Cookieの任意設定
- ・ Webサイトの改ざん
- ・ 不正なURLへのリダイレクト
- ・ DoS攻撃(サービス妨害)の誘発
Cookieを任意の値に設定されてしまう
Cookieは、WebサーバーがWebブラウザに送信する情報で、ユーザー識別やセッション管理に利用されます。HTTPヘッダインジェクション攻撃では、Cookieの値を攻撃者が任意に設定可能となる場合があります。
この攻撃により、攻撃者が用意した不正なCookieが強制的に適用され、セッションID固定化を通じてセッションハイジャック攻撃が行われる危険性があります。
セッションハイジャックとは正規ユーザーのセッションIDを不正に取得し、そのセッションを乗っ取るサイバー攻撃手法です。以下のような被害が発生する可能性があります。
- ・ オンラインバンキングにおける不正送金
- ・ クレジットカード情報の不正利用
サイトが改ざんされる
HTTPヘッダインジェクションによるサイト改ざんは、不正なHTMLやJavaScriptコードがレスポンスボディに挿入されることで発生します。
攻撃により、以下のような被害が想定されます。
- ・ 企業ロゴや商品情報の改ざん
- ・ 不適切な広告の挿入
- ・ マルウェア配信による訪問者のデバイス感染
とくに深刻なのは、正規サイトを通じてマルウェアが配信される事態です。ユーザーは日常的に利用するWebサイトに訪問しただけで、知らない間にPCやスマホがマルウェアに感染してしまいます。
別のURLにリダイレクトされてしまう
HTTPヘッダインジェクションにより、ユーザーが本来閲覧したかったページではなく、攻撃者が用意した不正なサイトにリダイレクトされるケースもあります。
特に危険なのは、正規サイトに酷似したフィッシングサイトへのリダイレクトです。
ユーザーはリダイレクトに気づかず、以下の被害を受ける可能性があります。
- ・ IDやパスワードの窃取
- ・ マルウェアのインストールを誘導する偽ページへのアクセス
このようなリダイレクト攻撃は、重要情報の漏洩やデバイスのマルウェア感染を引き起こします。
DoS攻撃を受けてしまう
DoS攻撃とは、サービスを妨害または停止させる目的で行われるサイバー攻撃です。
攻撃対象のサーバーに対し大量のパケットを送信することで、相手のサーバーに膨大な負荷をかけ、システムダウンさせる方法が一般的です。
しかしHTTPヘッダインジェクションの場合、Cookieを任意の値に設定できることを悪用し、以下のような攻撃を仕掛けます。
- ・ 攻撃者がHTTPリクエスト内のCookieヘッダに、異常に大きな値を設定する
- ・ サーバー側でリクエスト処理が過剰な負荷となり、正規ユーザーのリクエストを処理できなくなる
このようにHTTPヘッダインジェクションは、個別ユーザー単位のDoS攻撃を成立させる手段として、悪用される可能性があります。
HTTPヘッダインジェクションへの対策
HTTPヘッダインジェクション攻撃は、Webアプリケーションのセキュリティに重大な脅威をもたらしますが、適切な防御策により被害を効果的に防ぐことが可能です。
以下に具体的な対策を示します。
ユーザー入力をHTTPレスポンスヘッダに含めない
攻撃を防ぐ基本的な方法は、ユーザーが入力したデータをHTTPレスポンスヘッダに含めないことです。
HTTPヘッダインジェクションでは、攻撃者がHTTPリクエストに不正な文字列(例: 改行コードなど)を注入し、それをレスポンスヘッダに反映させることで攻撃を成立させます。
そのため、ユーザー入力を直接ヘッダに使用せず、必要に応じて適切なエンコードやバリデーションを施すことで攻撃の発生を防止することが可能です。
APIを利用する
セキュアなWeb開発を実現するためには、標準的なAPIを活用することが推奨されます。
古い環境で動作しているWebサイトはHTTPヘッダインジェクション攻撃を受けやすいため、可能であれば最新の環境にアップデートすることが望ましいでしょう。
アップデートが難しい場合には、HTTPヘッダ出力専用の安全なAPIを利用することで対策可能です。APIは決められた仕様に基づき動作するため、予期しないリクエストを排除し、不正なデータがヘッダに混入するリスクを軽減します。
外部からの改行コードを許可しない
やむを得ずユーザー入力をHTTPレスポンスヘッダに含める必要がある場合は、CR(キャリッジリターン)やLF(ラインフィード)など、改行コードをはじめとした制御文字を許可しないよう、適切な処理を行います。
改行コードは、不正なヘッダやレスポンスボディの生成に利用される可能性があるため、以下の対策を講じることが重要です。
- ・ 入力値のバリデーション: ユーザー入力から改行コードや制御文字を排除する。
- ・ エラー処理の実装: 改行コードを含む入力が検出された場合、エラー画面を表示するか、改行以降のデータを削除する。
例として、以下のようなチェック処理を実装することが考えられます。
- ・ 改行コード(\rや\n)を検出して除去する
- ・ ホワイトリスト方式で許可する文字列を限定する
HTTPヘッダインジェクション対策なら
「LANSCOPE プロフェッショナルサービス」の脆弱性診断
HTTPヘッダインジェクション攻撃への対策なら、LANSCOPE プロフェッショナルサービスのWebアプリケーション脆弱性診断にお任せください。
Webアプリケーションのコードや挙動を分析し、HTTPヘッダインジェクションの原因となる以下のような問題を特定します。
- ・ ユーザー入力を直接HTTPレスポンスヘッダに反映している箇所
- ・ 不十分なサニタイズ処理やエンコードの欠如
- ・ 改行コード(CRLF)や制御文字の不適切な処理
国家資格を持つ弊社のセキュリティエキスパートが、問題箇所や状況を明らかにし、優先度をつけて必要な対策をお伝えします。
「Webサイトを安全に運用したい」「自社サイトのインシデントによって、業務停止や信頼損失などを起こしたくない」という開発者様・サイト運営担当者様におすすめです。
また、診断内容を重要項目に絞り、より低価格でWebアプリケーションの脆弱性診断を受けていただける「セキュリティ健康診断パッケージ」も提供しております。
まとめ
本記事では、「HTTPヘッダインジェクション」をテーマに、その概要、攻撃を受けた場合の被害、および有効な対策について解説しました。
本記事のまとめ
- HTTPヘッダインジェクションとは、HTTPリクエストに不正な文字列(改行コードや制御文字など)を注入し、HTTPレスポンスを改ざんする攻撃手法
- 想定される被害に「攻撃者による不正なCookieの設定」「サイト改ざん」「別サイトへのリダイレクト」「DoS攻撃」などがある
- 対策として「ユーザー入力をHTTPレスポンスヘッダに含めない」「セキュアなAPIの利用」「外部からの改行コードを許可しない」などが有効
HTTPヘッダインジェクションは、Webアプリケーションに潜む重大なセキュリティ脅威の一つであり、これを放置することは、ユーザーの信頼を損なうだけでなく、企業の経済的損失や法的リスクにも直結します。この脆弱性を悪用されると、フィッシング、セッションハイジャック、サイト改ざん、マルウェア配布、DoS攻撃といった深刻な被害が連鎖的に発生する可能性があります。
HTTPヘッダインジェクションをはじめとするセキュリティ脆弱性に対処することで、企業の信頼性を守り、ユーザーが安心して利用できるWebアプリケーション環境の構築を目指しましょう。
Webアプリケーション診断で指摘される
脆弱性TOP5を解説!
Webアプリのセキュリティ対策は万全ですか?
実際に診断でよく指摘される脆弱性TOP5を
原因や対策方法も含め、分かりやすく説明します。
おすすめ記事