2012-04-10 16 views
6

Fortifyのセキュリティレビューは、いくつかのパス操作の脆弱性を通知しました。大部分は明らかで簡単な修正ですが、私は次の修正方法を理解していません。パス操作(セキュリティ脆弱性)

string[] wsdlFiles = System.IO.Directory.GetFiles(wsdlPath, "*.wsdl"); 

"wsdlPath"はテキストボックスから入力します。ちょうど修正できないものですか?私はパスの存在などを検証できますが、どのようにしてこの脆弱性を助けていますか?

+1

このコードはどのように実行されますか? 'wsdlPath'を入力したユーザーの資格情報で動作するWindowsアプリケーションであれば何も間違いはありません。 WindowsサービスまたはWebサイトの一部として動作する場合は問題です。 –

+0

Fortifyレビューで注入された文字列が提供されましたか? – Tung

+0

@AndersAbel - ウェブアプリ。認証されたユーザーがパスを入力し、有効なパスであればそれが受け入れられます。 – Induster

答えて

8

データが常にユーザーによって決定されたテキストボックスから取得され、コードがそのユーザーのアクセス許可を使用して実行される場合、唯一の脅威は攻撃しているユーザーの脅威です

低信頼の敵対的なコードがその文字列の内容を判断できる場合、敵対的なコードは次のような試みを行うことができます。事実を発見する「このようなプログラムには、セキュリティ上の脆弱性がインストールされており、パッチが適用されていません」、「このマシンには「管理者」というユーザーがいますか?

+0

このページにアクセスできる唯一のユーザーはシステム管理者です。管理者レベルのアクセス権を持つ人はほんのわずかです。この脆弱性を「低」とみなすには、これが十分な「ダメージコントロール」だと思います。私はこれをより強くする方法は見当たりません。あなたのご意見ありがとうございます。 – Induster

+0

この情報を入力した認証されたユーザーが有用な情報を取得しないため、これを答えとしてマークしました。エンドユーザ、はい絶対に...しかし、ここではそうではありません。 – Induster

+0

@Induster - 入力がフィルタされ、有効なパスとファイル名のみが許可されるようにすることで、より強力になります。はい、管理者アクセスは物事を緩和するだけですが、攻撃者が管理者アクセス権を取得した場合、アプリケーションだけでなくサーバー自体にアクセスできる可能性があります。 –

2

フィルタリングされていないOS APIに直接何もフィードしないでください。あなたは入力を消毒し、パスが含まれていないことを確認する必要があります(例: "../../../somefile"そして長い名前を切り捨てて、有効なファイル名の文字しか含まないことを確認してください(例えば、

+0

入力が適切に処理されています。これは明らかにユーザーの入力から発生したため、赤で表示されました。しかし、それはそのまま残る必要があります。私にとっては、ここではユーザーの入力を排除することはできませんが、これはオプションではありません。多分誰かがここで私ができない何かを見ることができます。 – Induster

+1

@Induster - あなたの反応はわかりません。 「入力は必要なときに処理されている」とはどういう意味ですか?あなたのコメントはそれがそうでないことを示します。不正なデータをOSのapiに送っていないことを確認するために入力をサニタイズするか、許可しないでください。ユーザーが入力することが完全に容認できると思うなら、システムのパスワードファイルを言うと、ちょっと..私が何か言ったことを忘れてしまいます。 –

1

このコードを使用すると、認証され、その機能を使用する権限を持つすべてのユーザーは、サーバー上のファイルシステムにアクセスできます。アクセスは、Webアプリケーションを実行するサービスアカウントの資格情報を使用して行われます。

返されるデータの使用方法によっては、悪質なユーザーがさらに情報を取得したり、意図しない方法でサーバーを動作させたりする可能性があります。

許可されたパスのセットは、1つまたはいくつかの慎重に選択されたディレクトリのみで構成するように制限する必要があります。 Pathクラスの関数を使用して、文字列をパスに結合します。ユーザーがc:\allowedpath\..\windows\system32と入力するような処理を行います。