私は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攻撃を悪用することで簡単にトリガーできます。