3

何人かのセキュリティ/ペネトレーションテスターに​​ASP.NETアプリケーションをテストしてもらい、クロスサイトスクリプティングの脆弱性と思われるものを特定しました。<ScRiPt>alert(1)</ScRiPt>私の知る限り、ビューステートパラメータの1つにテキストを挿入することで、ポストバックのビューステートを手動で操作したようです。何らかの理由で、web.configでカスタムエラーハンドラーが指定されていても、サーバーはそれらを無視しているように見え、ビューステートが逐語的に表示された一般的なエラーメッセージを返します。その結果、<ScRiPt>alert(1)</ScRiPt>ブラウザで実行されるため、テスターはこれをクロスサイトスクリプティングの問題として識別します。これが正当な脆弱性であるかどうかにかかわらず、このエラーを適切に処理してカスタムエラーページの1つにリダイレクトできるようにするか、少なくともサーバーがビューステートをそのまま吐き出すのを防ぎたいと思います。エラーメッセージ。

IISのWebサイトの.NETエラーページとエラーページを調べることに加えて、global.asaxのApplication_Errorメソッドで何かを実行してみました。ステータスコードが500で、WebEventCodeがSystem.Web.Management.WebEventCodes.RuntimeErrorViewStateFailureであることがわかりますが、「Response.Redirectを呼び出すことができないため、Response.RedirectまたはServer.Transferを実行できません。ページコールバックで。」例外。また、web.configでEnableViewStateMacをtrueに設定し、ViewStateEncryptionModeをAlwaysに設定して、状況が変わるかどうかを確認しようとしましたが、それでも問題を再現できました。誰かが持っているかもしれない洞察をいただければ幸いです。

サーバーから返されるエラー応答は次のようになります。

0|/*DX*/({'generalError':'Invalid viewstate. \r\n\tClient IP: 127.0.0.1\r\n\tPort: 51510\r\n\tReferer: https://localhost/-mysettings.aspx\r\n\tPath: /Default.aspx\r\n\tUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1\r\n\tViewState: /wEPDwUKMjA1OTAyNzk1MWQYBAUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFjQFQmN0bDAxJG1haW5Db250ZW50JGN0bDAwJGNwQWRtaW5pc3RyYXRpb25TZXR0aW5ncyRidG5DaGFuZ2VQYXNzd29yZAU/Y3RsMDEkbWFpbkNvbnRlbnQkY3RsMDAkY3BBZG1pbmlzdHJhdGlvblNldHRpbmdzJGJ0bkVkaXRQaWN0dXJlBT9jdGwwMSRtYWluQ29udGVudCRjdGwwMCRjcEFkbWluaXN0cmF0aW9uU2V0dGluZ3MkYnRuU2F2ZUNoYW5nZXMFQmN0bDAxJG1haW5Db250ZW50JGN0bDAwJGNwQWRtaW5pc3RyYXRpb<ScRiPt>alert(1)</ScRiPt>25TZXR0aW5ncyRjYlNpdGVDb3VudHJ5JERERAU8Y3RsMDEkbWFpbkNvbnRlbnQkY3RsMDAkY3BBZG1pbmlzdHJhdGlvblNldHRpbmdzJEFTUHhCdXR0b24zBV9jdGwwMSRtYWluQ29udGVudCRjdGwwMCRjcEFkbWluaXN0cmF0aW9uU2V0dGluZ3MkdXNlckFkZHJlc3MkcG5sQWRkcmVzcyRjYlNlYXJjaGFibGVBZGRyZXNzJERERAU8Y3RsMDEkbWFpbkNvbnRlbnQkY3RsMDAkY3BBZG1pbmlzdHJhdGlvblNldHRpbmdzJEFTUHhCdXR0b24yBT9jdGwwMSRtYWluQ29udGVudCRjdGwwMCRjcEFkbWluaXN0cmF0aW9uU2V0dGluZ3Mk...'})
4

3 に答える 3

5

私は実行可能な解決策を思いつくことができました。それは完璧ではありませんが、仕事を終わらせ、javascriptがサーバーの応答に表示されないようにします。基本的には、現在のエラーをクリアして、独自のカスタム応答を出力します。Global.asaxのApplication_Errorメソッドに次のコードを追加しました。

//Handle view state manipulation
HttpApplication httpApp = this.Context.ApplicationInstance;
HttpException httpEx = httpApp.Server.GetLastError() as HttpException;
if (httpEx != null)
{
    if (
        httpEx.WebEventCode == System.Web.Management.WebEventCodes.AuditInvalidViewStateFailure
        ||
        httpEx.WebEventCode == System.Web.Management.WebEventCodes.InvalidViewState
        ||
        httpEx.WebEventCode == System.Web.Management.WebEventCodes.InvalidViewStateMac
        ||
        httpEx.WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorViewStateFailure
        )
    {
        HttpContext.Current.ClearError();
        Response.Write("Error: An invalid viewstate has been detected (WebEventCode: " + httpEx.WebEventCode.ToString() + ").");
    }
}
于 2013-03-07T22:06:58.417 に答える
0

PCI テストに合格するには、同じ問題があります。

以下のこのリンクはこの問題に対処していると思いますが、修正する方法はありません。 http://computersecuritywithethicalhacking.blogspot.co.uk/2012/09/stored-xss-via-viewstate-parameter.html

私たちの Web サイトでは IIS 7.5 を使用しており、enableviewstate は true、enableviewstatemac は true です。しかし、viewStateEncryptionMode の設定を確認する方法がわかりません。ビューステートが暗号化されているかどうかはわかりません。

于 2013-03-07T13:19:05.330 に答える
0

彼らはページ ソースを操作してスクリプト コードを追加し、それを実行しました。これはどの本でも脆弱性ではありません (値は永続化されず、アラートはアクションの直接の結果としてのみ実行されるため、まるで自分自身をハッキングしているようです)。そのスクリプトをページに直接追加することを妨げるものは何もありませんでした...

<customErrors mode="On" />エラー メッセージについては、web.config ファイルの設定を調べる必要があります。MSDN リファレンス

それでも解決しない場合は、例外をクリアしApplication_Errorて一般的な例外をスローするという別のオプションがあります。

于 2013-03-06T20:49:25.920 に答える