環境変数で機能を定義する機能が本質的にセキュリティリスクではないのはなぜですか?

環境変数で機能を定義する機能が本質的にセキュリティリスクではないのはなぜですか?

私が理解したのは、環境変数に保存される情報を誰でも提供できるようにするのが一般的に安全であると見なされます。 Shellshockの脆弱性は、新しいbashインスタンスの起動時に環境変数内の関数定義の末尾にあるコードが実行され、明らかに誰も実行できなくなるために問題になります。あなたのサーバーで彼らが好きなコードは何でも。関数定義自体は明らかにセキュリティリスクを示さず、コードを実行するには明示的に呼び出す必要があるため許可されます。

私の質問は、なぜ悪意のあるユーザーが単に関数を定義し、悪意のあるコードを一般的なコマンドとして含めた後、スクリプトls(または実行中のすべての項目)がある時点でこのコマンドを使用したくないのですか?

私の考えの例:

$ export ls='() { echo "doing bad things..."; }'
$ bash -c ls
doing bad things...

ベストアンサー1

これはセキュリティリスクです。これが通常、別のコンテキストに切り替えると(システムリモコン、ユーザー変更など)、これを行うことができない理由です。

必要な環境変数を生成できる場合は、任意のコードを実行する方法はいくつかあります。たとえば。
$LD_PRELOADその変数を設定できる場合は、ライブラリ関数を置き換えてコードをここに貼り付けることができます。この変数を設定$DISPLAYし、プログラムが接続されているXディスプレイをリダイレクトしてアプリケーションを制御できます。

sudoそのため、すべての変数の環境を削除したいのです。sudo選択した変数はいくつか通過できます。これらの変数の場合、その変数を削除します(変数を渡します$TERMが、異常な文字が含まれている場合は渡しません)。

おすすめ記事