13

私はSFDCに代わってデロイトによるセキュリティ監査に打撃を受けました。基本的に、flexを使用し、AMFを介して通信します。これには、(LCDSやBlazeではなく)FluorineFXを使用します。AMF応答はエンコードされておらず、誰かがAMFパラメータを操作して、これがXSSの脆弱性であるJavascriptを挿入できるためだと言われています。エラーメッセージで渡されたJSをエコーする可能性のあるAMF応答が、ブラウザまたはその他の問題でどのように実行されるかを理解するのに苦労しています。私はHTMLとJSを使用したXSSの経験が豊富ですが、AMFでタグ付けされるのを見るのは少し驚きでした。私はFluorineFxチームと連絡を取り合っており、彼らも困惑しています。

AMFライブラリが応答データをエンコードしているのを見て驚いたでしょうが、フッ素は確かにエンコードしていません。PortSwiggerやIBMAppScanなどのセキュリティアプリケーションは、ツールチェストにこのタイプのテストを組み込んでいるように見えます。AMFでこの脆弱性に遭遇しましたか?XSSの問題がどのように現れるかを説明できますか?ちょっと興味があるんだけど。議論が存在する場合、私はこれから抜け出す方法を議論するか、穴にパッチを当てる必要があります。FlexでのAMFの使用法を考えると、ある程度の洞察があるのではないかと思いました。

追加情報 ...

それで、実際のベンダーであるPortSwiggerからこれについてもう少し詳しく説明します。私は彼らに質問を投げかけました、そしてネット、ネット、彼らはこのタイプの攻撃が非常に複雑であることを認めます。当初、彼らはこれを重大度の高いセキュリティの問題として分類していますが、現在、彼らの調子は変わっていると思います。とはいえ、その視点は面白いと思うので、皆さんのために彼らの回答の内容を投稿したいと思いました。

---この問題に関するPortSwiggerから---

メッセージありがとうございます。答えは、これは潜在的に脆弱性ですが、悪用するのは簡単ではないということだと思います。

確かに、この問題は、応答がAMFクライアントによって消費される場合には発生しませんが(何か馬鹿げたことをしない限り)、攻撃者が応答がブラウザーによって消費される状況を設計できる場合に発生します。ほとんどのブラウザはHTTPContent-Typeヘッダーを見落とし、実際の応答コンテンツを確認します。それがHTMLのように見える場合は、そのように処理します。歴史的に、人々がHTML / JSコンテンツを他の応答形式(XML、画像、他のアプリケーションコンテンツ)に埋め込んだ攻撃が数多く存在し、これはブラウザーによってそのように実行されます。

したがって、問題は応答の形式ではなく、応答を生成するために必要な要求の形式です。攻撃者が有効なAMFメッセージを含むクロスドメインリクエストを設計することは簡単ではありません。XSSのような動作を含むXML要求/応答でも同様のことが起こります。ブラウザによってHTMLとして扱われる有効なXML応答を作成することは確かに可能ですが、課題は、HTTPボディのクロスドメインで生のXMLを送信する方法です。これは標準のHTMLフォームを使用して実行できないため、攻撃者はこれを実行するために別のクライアントテクノロジまたはブラウザの癖を見つける必要があります。歴史的に、このようなことは、ブラウザ/プラグインベンダーによって修正されるまで、さまざまな時点で可能でした。現時点でそれを可能にするものは何も知りません。

つまり、これは理論上の攻撃であり、リスクプロファイルに応じて、完全に無視するか、サーバー側の入力検証を使用してブロックするか、サーバーで出力をエンコードしてクライアントで再度デコードすることでブロックできます。

Burpは、この問題の緩和策としてAMFリクエスト形式にフラグを立て、影響を低にダウングレードする必要があると思います。これを修正します。

お役に立てば幸いです。

乾杯PortSwigger

---監査に関する詳細---

portSwiggerが行うことは、必ずしもバイナリペイロードを混乱させることではなく、リクエストを送信するためにハンドラーに送信される実際のAMFパラメーターを混乱させることです。たとえば、これは監査の抜粋であり、リクエストに対するAMF応答の一部を示しています...

HTTP/1.1 200 OK
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
P3P: CP="CAO PSA OUR"
Content-Type: application/x-amf
Vary: Accept-Encoding
Expires: Tue, 06 Apr 2010 18:02:10 GMT
Date: Tue, 06 Apr 2010 18:02:10 GMT
Connection: keep-alive
Content-Length: 2595

......../7/onStatus.......
.SIflex.messaging.messages.ErrorMessage.faultCode.faultString
.faultDetail.rootCause.extendedData.correlationId.clientId.destination
.messageId.timestamp.timeToLive    body.headers.#Server.Processing..kFailed 
to locate the requested type 
com.Analytics.ca.Services.XXX5c2ce<script>alert(1)</script>9ccff0bda62..
....I506E8A27-8CD0-598D-FF6E-D4490E3DA69F.Id95ab281-d83b-4beb-abff-c668b9fd42d5
..fluorine.I04165c8e-f878-447f-a19a-a08cbb7def2a.A.q..@............
.        DSId.Aeb5eeabcbc1d4d3284cbcc7924451711.../8/onRes
...[SNIP]...

そこにある「アラート」スクリプトに注意してください...彼らが行ったことは、呼び出すメソッドを含む渡されたパラメーターの1つ、つまり「com.Analytics.ca.Services.XXX」にJSで囲まれたスクリプトが追加されたことです。そうすることで、JSはエラーメッセージで返されますが、そのJSが実行に近づくために発生しなければならないことがたくさんあります。せいぜい間接的な脅威のようです。

-セキュリティ監査人の最新の視点-

私はより大きなチームと話し合いましたが、それは有効な攻撃であると私たちは皆信じています。PortSwiggerが最初の段落で述べているように、理論的にはcontent-typeをx-amfに設定し、ブラウザーでレンダリングされないことを望んでいるため、ほとんどのブラウザーはこの要求を無視してとにかくレンダリングします。ベンダーは、コンテンツタイプが設定されているという事実に大きく依存していると思います。ただし、IEやSafariの一部のバージョンなどの一般的なブラウザはこれを無視します。

攻撃は、CSRFまたはその他の形式のXSS攻撃を悪用することで簡単にトリガーできます。

4

5 に答える 5

10
  1. Flash PlayerでJSを解釈するので、JavaScriptインジェクションではありません。プレーヤーでネイティブJSまたはjsonのサポートがあれば、フラッシュコミュニティは恍惚となるでしょう。javascriptはもちろん、actionscriptのeval関数はありません

  2. アクションスクリプトを挿入できるという意味だとしましょう。AMFプロトコルはコードを送信せず、プリミティブ型または汎用オブジェクトまたは型付きオブジェクトの形式でデータモデルを送信します。発生する可能性のある最悪の事態は、モデルを分析してデータを追加することです。データを挿入することはできませんが、すべてのデータを解析し、新しいデータを追加し、解析して戻し、AMFヘッダーを保持する必要があるため、これを行うのは驚くほど困難です。AMFはデータのシリアル化で参照を使用するため、オブジェクトタイプが重複している場合は、最初のオブジェクトを確認する必要があります。その場合、参照はオフセットになります。これは、コードを追加する可能性はほとんどなく、既存のパラメーターの値を変更するだけであることを意味します。

  3. リモートオブジェクトには、データ型をチェックし、それらのデータ型をuiコンポーネントまたはコードが実行するものにバインドすることを期待する応答ハンドラーがあります。これらのデータ型が間違っていると、エラーが発生します。AMF応答シーケンス番号が間違っていると、エラーが発生します。amfデータグラムに完全に形成されていないものがあると、エラーが発生します。

  4. リモートオブジェクトは自動的に再試行します。「インジェクション」コードに時間がかかる場合、Flexはメッセージを再送信し、時間がかかったメッセージを無効にします。

ちょうど私の2セント。AMF開発者として、私はデバッグとテストのためにamfデータグラムを簡単にねじ込むことができることを頻繁に望んでいました。残念ながら、エラーが発生します。

ウェイドアーノルド

于 2010-06-21T22:34:34.120 に答える
2

あなたはここであなた自身の質問に答えたようです。

したがって、amf関数呼び出しへの引数を取り、返された出力のどこかに入力データを含めるサーバー側の実装があります。

ペイロードをamfクライアントではなくブラウザでレンダリングする必要があるため、これは主に理論上の攻撃であると理解しています。このシナリオを有効にするために、ブラウザ/プラグインの他の脆弱性が必要になる場合があります。おそらく、gateway.phpなどを介したCSRF投稿は、ブラウザーが出力をhtml / jsとして処理する限り、これを悪用するのを非常に簡単にします。

ただし、発信者が山かっこを応答にパススルーできるようにする必要がない限り、HTMLでエンコードするか削除するだけで、この攻撃シナリオは消えます。

しかし、これは興味深いことです。通常、データの予想されるコンシューマーに対してのみ出力エンコードを実行しますが、ブラウザーが特殊なケースであることが多いと考えるのは興味深いことです。これは本当にエッジケースの1つの地獄ですが、私はすべて、信頼できない入力をサニタイズしてエンコードする習慣を身に付けている人々のためです。

これは、多くの点で、クロスプロトコルインジェクションを使用して、SMTPなどのプロトコルのリフレクション機能を悪用してブラウザでXSSを実現する方法を思い出させます。http://i8jesus.com/?p=75を参照してください

于 2010-06-23T09:30:12.370 に答える
1

有効な攻撃シナリオだと思います。関連する攻撃はGIFARで、JVMがだまされてgifファイルをjarとして扱います。また、出力エンコーディングが問題を解決する正しい方法ではないと思います。

攻撃の前提は、ブラウザをだましてAMF応答がHTMLまたはJavascriptであると思わせることです。これは、 MIMEタイプ検出と呼ばれる機能が原因で可能になります。これは、基本的に「開発者はコンテンツタイプについて知らない可能性があります。私は神を演じ、(おそらく間違って)MIMEタイプを理解します」というブラウザです。

これが機能するためには、次のことが当てはまる必要があります-

  1. <script>攻撃者は、または<frame>または<a>タグなどのHTML技術を使用して、AMFサーバーに対してGETまたはPOST要求を行うことができるはずです。XmlHttpRequest、Flash、Silverlightなどの手法はカウントされません。
  2. 攻撃者は、応答の最初の256バイト程度に悪意のあるコンテンツを挿入できるはずです。さらに、この悪意のあるコンテンツは、応答の残りの部分が実際にはjavascriptまたはhtmlであるとブラウザをだまして考えることができるはずです。

それで、どうやってそれを防ぐのですか?

そもそも攻撃者がリクエストできないようにするのが最善です。非常に簡単で効果的な方法は、AMFリクエストの作成中にhttpリクエストヘッダーを追加し、サーバー上に存在することを確認し、存在しない場合はリクエストを拒否することです。値はハードコードされた値にすることができ、秘密にする必要はありません。これが機能するのは、標準のhtml手法を使用してカスタムリクエストヘッダーを追加する既知の方法がないためです。XmlHttpRequest、flash、またはsilverlightを介してこれを行うことができますが、ブラウザはコンテンツタイプを解釈しないため、問題ありません。

さて、AMFについてはよくわかりませんが、すでにリクエストヘッダーが追加されている場合、この攻撃シナリオは不可能です。そうでない場合は、追加するのは簡単です。

コンテンツをエスケープするHTMLは良い解決策ではありません。伝えられるところでは、応答が実際にはHTMLであるとブラウザを騙して考えさせるさまざまな方法があります。言い換えれば、悪意のある入力は整形式のHTMLである必要はありません。mimeスニッフィングでグーグル検索を試してみてください。ブラウザをだますためのさまざまな方法を見つけることができるはずです。

于 2010-06-24T08:58:16.663 に答える
1

誰かがこの「脆弱性」をどのように利用するかを説明することはできません。

しかし、ストレートHTTPではなくHTTPS接続を介してデータを渡すことで、問題を満足のいくように解決できますか?サーバーにSSL証明書がインストールされ、HTTPSが有効になっているとすると、これはFlexアプリケーションにコンパイルするservices-config.xmlファイルの小さな変更になります。

私はアドビの同僚に、彼がより多くの洞察を提供できることを期待してpingを送信しました。

于 2010-06-21T21:56:52.593 に答える
0

AMF応答ストリーム内のデータを変更することがどれほど可能かはわかりませんが、ブラウザーやJavaScriptとの通信を通じてエンドポイントを操作できないようにすることをお勧めします。悪意のあるデータインジェクションのセクションにあるこの記事を確認してください。

于 2010-06-22T03:39:03.267 に答える