web-dev-qa-db-ja.com

catを使用して信頼できないファイルから値を読み取ることによるリスクはありますか

ユーザーがアップロードしたテキストファイルから読み取って変数値を取得する必要があります。

私はシステムのスクリプトからやっています:

resourceVersion=`cat userFile.txt`
mkdir $resourceVersion
...

後で他のコマンドの引数として$resourceVersion変数を使用すると、このファイルの内容がシステムに悪影響を与える可能性がありますか?

2
Johnny Everson

安全なコードを書くためのルール1 ユーザー入力をサニタイズする必要があります

スイッチの操作を防ぐために、少なくとも--をmkdir句に渡してください。

現在、任意の権限で任意の場所にディレクトリを作成するために使用できます。

それ自体では、おそらく違反にはなりませんが、次のようなものを渡すことができます。

-m 0777 /var/lib/mysql/newdb

新しいmysqlデータベースを作成するには、誰でも書き込むことができます。

また、各スペースが新しいディレクトリとして扱われるため、ここではサービス拒否攻撃が発生します。したがって、処理する32760の新しいパスを渡すことができます。

最後に、一部の疑似ファイルシステムは、予期しない方法で新しいディレクトリに敏感です。たとえばFedoraでは、/sys/fs/cgroup/newcgroupのようなディレクトリが新しいcgroupを作成する可能性があります。また、LIOサブシステムでは、ディレクトリを/sys/kernel/config/targetに書き込むことで、iscsiネットワークを介してブロックデバイスをエクスポートできます(その後、デバイスのコンテンツ全体をコピーできます)。

だから、これをしないでください。

8
Matthew Ife

現時点では、userFile.txtに-m 777 /.secretstorageが含まれている場合は、誰でも書き込み可能なフォルダーを追加できます。
私の意見では、そのような構成を使用しないほどすでに悪いです。

投稿した現在のスクリプトでは、別のコマンドを挿入できないのは正しいことです。
ただし、この変数を使用する他のコマンドによっては、さらに悪化する可能性があります。
たとえば、プログラムの最後にこの変数とrm ..を使用してクリーンアップする予定の場合.

1
faker