web-dev-qa-db-ja.com

ユーザー提供のMIMEタイプを保存して再生しても安全ですか?

ユーザーがファイルをアップロードしたが、mime-typeを「superdangerous/blackhatstuff」などの任意の値に設定してリクエストを変更した場合、同じMIMEタイプを後で別のユーザーに送信しても安全ですか?

つまり別のユーザーが同じファイルをダウンロードして、mimetypeを「superdangerous/blackhatstuff」に設定しました。mimeタイプを潜在的に危険なものに設定することは可能ですか?これはユーザー提供のデータなので、なんらかのサニタイズを行わずに保存して再生するのは良い考えではないと感じます。 (もちろん、MIMEタイプを格納する前にクエリをサニタイズしているので、MIMEタイプを介したSQLインジェクション攻撃は関係ありません。)

アップロードされたファイルをスキャンするためにクラムAVを使用しています。これにより、MIMEスニッフィング攻撃の一部をうまくキャッチできますが、ここで私が実際に求めているのはそれではありません。

これが実際に危険である場合、適切なことは何ですか? MIMEタイプをまったく指定しないで、受信者に推測させる必要がありますか?自分でMIMEスニッフィングを試してみる必要があります(LinuxではPHPを使用しており、ファイルマジック用のAPIを提供しています)。

編集:詳細

この機能の目的を説明しましょう。問題のアプリケーションは、Word文書、スプレッドシート、画像、アーカイブなど、さまざまな種類のアーティファクトをレビューと承認のために送信する必要があるワークフローの一部として使用されます。他のユーザーは、これらの成果物を表示して承認を決定するために、これらの成果物をダウンロードできる必要があります。

明らかな違反を防ぐために、ブラックリスト(PHPまたはJavaScriptファイル)のアップロードなど)を用意し、Content-Dispositionを "attachment; filename = ..."に設定しています。ユーザーにホワイトリストを適用することは実際にはできないため、アップロードされたファイルに対して基本的なサニタイズとしてクラムAVを実行しています。アプリはイントラネット上で実行され、アクセスするには認証が必要であり、ユーザーは[ほぼ]信頼されています。

とにかく、私が重要なのは、ファイルを保存してユーザーがそれらのファイルをダウンロードできるようにすることの安全性について私が尋ねているのではないということです。 (私はそれが大きな脅威ベクトルであることを理解していますが、それは私が尋ねている質問ではありません。)ユーザー提供のMIMEタイプを再生するのが安全かどうか本当に心配です。そうでない場合、代替手段は何ですか? MIMEタイプをまったく指定しない場合は、

19
Mark E. Haase

いいえ、ユーザーが指定したMIMEタイプをユーザーに返信しないでください。ユーザーに公開する最も簡単な攻撃は、任意のJavascriptコードを含むtext/htmlファイルをアップロードすることです。 [script]要素内。アップロードされたファイルのURLが指定されたユーザーはJavaScriptを実行し、その結果 [〜#〜] xss [〜#〜] になります。これは、Content-Type-Disposition:添付ファイルヘッダーを含むファイルを提供することで多少軽減できますが、それを回避する方法があります。

別のベクトルは、悪意のあるJava=アプレットまたはFlashファイル、およびMIMEタイプによってWebセキュリティに関連する他の多くのファイル( HTML5オフラインマニフェストファイル 、crossdomain.xml、クライアントで実行可能なさまざまなファイル(exe、vbsなど)。

私たちがそうしている間-XSS攻撃から保護するために、ユーザー提供のファイルを「メイン」アプリケーションとは別のドメインから提供するようにしてください( 同じオリジンポリシー は、ファイルが別のドメイン)。

13

短い答え:安全ではありません。ユーザーがMIMEタイプとファイルのコンテンツを指定できるようにすることは、XSSホールの自己侵害です。

悪意のあるユーザーMalloryは、MIMEタイプtext/htmlを指定し、悪意のあるJavaScriptを含むHTMLドキュメントを提供する可能性があります。そのドキュメントを別のユーザーAliceに提供すると、Aliceのブラウザーが悪意のあるJavascriptを実行します。悪意のあるJavascriptは、アリスのセッションCookie、このサイトのアリスのパスワード、およびこのサイトのアリスのすべてのデータを盗んだり、アリスがこのサイトに表示するコンテンツを改ざんしたりする可能性があります。

だから、いや、それは安全ではありません。

編集(11/4):何をすべきかを尋ねるために質問を編集したようです。これは複雑な質問ですが、この脅威から防御するための基本的な戦略をいくつか紹介します。

  • オプション1:ユーザー提供のコンテンツなしユーザー提供のコンテンツをホストしません。その後、この問題について心配する必要はありません。

  • オプション2:ホワイトリストMIMEタイプのみを許可します。ユーザーがデータをアップロードしてMIMEタイプを指定できるようにしますが、ユーザー指定のMIMEタイプがオンの場合のみ悪意のあるコードの実行をトリガーできない既知の安全なMIMEタイプのホワイトリスト。例えば、 text/plainおよびimage/jpegは一般的に安全です コンテンツ盗聴攻撃に対して適切な防御を適用する場合 、したがってホワイトリストに含めることができます。 text/htmlおよびapplication/x-shockwave-flashは安全ではないため、ホワイトリストに含めるべきではありません。

  • オプション3:別のドメインを使用します。別のドメインからユーザーがアップロードしたコンテンツを提供します。ドメインが、セキュリティ上重要ではない、ユーザーが送信したコンテンツのみをホストしていることを確認してください。そのサイトで独自の素材をホストしないでください。次に、ブラウザの同じオリジンポリシーが攻撃を隔離します。悪意のあるアップロードされたファイルは、そのドメインにある他のユーザーがアップロードしたコンテンツを攻撃できる可能性がありますが、パスワードやセッションCookieなどを盗むことはできません。あなたのメインサイトから。

10
D.W.

同じMIMEタイプを後で別のユーザーに送信しても安全ですか?

私は私の腕を偶然に見つけて「はい」と言いますが、うまくいかない場合は停止する必要があるかもしれません。

この場合、ほとんど信頼できるユーザーがいるクローズド環境、アップロードをホワイトリストに登録または制限するMIMEタイプは、ユーザーベースの一部のパーセンテージに少しのオーバーヘッドまたは非効率を追加します。ユーザーが多いほど、検討していない形式のユーザーがいる可能性が高くなります。ユーザーのファイル形式がリストにない場合は、例外を作成するか、ホワイトリストを変更するか、ファイルを別の形式に変換する必要があります。その仕事とそれは費用がかかります。

あなたは問題について考え、アンチウイルススキャンでいくつかの緩和策を提供しました。この緩和策では不十分です。マシンをバックアップし、何らかの理由でマシンがダウンした場合は、失われたサービスをタイムリーに復元する必要があります。さらに、ユーザーがMIMEタイプで何をしているかを監視する必要があり、MIMEタイプが悪用されたり問題になったりした場合は、ホワイトリストをオンにする必要があります。

これは基本的に、ユーザーが必要とするものをユーザーに提供し、必要に応じてユーザーをお互いにそして自分自身から保護することを意味します。ユーザーが誰であるかに応じて、問題を指摘し、監視することをユーザーに通知することもできます。 「みなさん、新しいレビューサーバーは192.168.0.240で稼働しています。必要なファイル形式を送信できますが、少し危険ですが、アップロードをログに記録してレビューします。」

1
this.josh

さて、ユーザーから変更されていないコンテンツタイプを提供すると、「third-reich-rules/heil-hitler」というタイプのコンテンツが送信されてしまう可能性があります。これにより、low /奇妙なユーモアのセンス(北大西洋と北太平洋の海の間にある土地の半分など)。

I 想定ユーザー指定のコンテンツタイプを送り返す場合は、別のユーザーによってアップロードされたファイルをユーザーに実際に送り返したいためです-これはすでにワームの全体の缶。そして「缶」とは「20ガロンタンク」を意味します。

電子メールサーバーは常にそれを行うという考えに慣れることができます。各電子メールには、電子メールサーバーが認識していない多くのコンテンツタイプの添付ファイルが含まれている可能性があります。歴史的に、これは「実行可能」というタグの付いたファイルを受信すると、「実行可能?素晴らしい、自動的に実行してみよう!」という、メーラーエージェントのセキュリティ上の多くの問題を暗示してきました。

弁護士がnot-my-faultの道を歩かせない場合は、ファイルの内容を完全にサニタイズする必要があります。これは、ファイルの種類を知ることを意味し、適切なコンテンツの種類を知ることを自動的に意味します。したがって、ユーザー指定のコンテンツタイプを通過させるすべきではないの問題は関連性があります。もしそうなら、あなたの衛生プロセスに何か怪しいものがあります。

0
Tom Leek