web-dev-qa-db-ja.com

WebサイトまたはWebアプリでhttpsを使用してhttpヘッダーインジェクション攻撃を実行することは可能ですか?

WebサイトまたはWebアプリケーションがhttpsで実行されている場合、httpヘッダーインジェクションなどのhttpヘッダー攻撃を実行することは可能ですか?

1
Coding_A_Nation

はい、可能ですが、特定の場合のみです。私が知っている2つの一般的なクラスのヘッダーインジェクション攻撃があります。

1つは、誰かがトラフィックを傍受してヘッダー情報を挿入する中間者攻撃(MITM)です。 HTTPS接続はこれらから保護します。

2つ目は、クロスサイトスクリプト(XSS)攻撃です。これらは、アプリケーションレベルの脆弱性に対する攻撃であり、Webサイトのユーザーが自分の入力を使用して、他のユーザーのヘッダーが動的に作成される方法に影響を与えることができます。 XSS攻撃では、送信用に暗号化される前に、サーバーが送信する内容を解析する方法を変更します。したがって、コンテンツを変更できます。

この脆弱性の例は次のようになります。

<?php
  ... // functions and SQL to collect $resultHeader and $resultHTML parameters from your database.
  $header = buildHeader($resultHeader); 
  $html = buildHTML($resultHTML);
  echo $header;
  echo $html;
?>

$ header変数がページに書き込まれる前にbuildHTML()関数が処理するため、PHPインジェクションは、エコーされる前に$ headerを書き換えることができます。

2
Nosajimiki

すべてのプロトコルレベルの攻撃、つまり、HTTP構文解析によるヘッダーインジェクションを使用したHTTPスプリッティングとキャッシュポイズニング(HTTP Smuggling)の場合、TLS保護では保護されません。 HTTPプロトコルはTLD/SSLレイヤーにカプセル化されていますが、最後に、パーサーは暗号化が行われていないかのようにHTTPメッセージを読み取ります。 TLSレイヤーは、HTTPアクターがメッセージを解析しているときではなく、移動しているときにメッセージを保護します。

少なくともTLSは、攻撃者側にいくらかの複雑さを追加します。そこでは、TLSをサポートするツール(openssl_clientなど)を使用する必要があり、telnetやnetcatなどの非常に単純なソケット接続ツールではありません。できないことは何もありません。

通常はクエリ引数のCRLFインジェクションによるアプリケーションエラーによるヘッダーインジェクションもあります。ここでも、TLS保護はほとんど保護を追加しません。

0
regilero