web-dev-qa-db-ja.com

Pythonのpopen(および類似の)関数はShellshockの影響を受けますか?

基本的に、どのpythonの関数がbashをトリガーし(そしてShellshockの影響を受ける可能性があります)、どれをしないのですか?

いくつかのスクリプトでpopen()関数を見て、この質問を思いつきました。

私の質問はPython 2と3の両方に関係しています。

19

Anyある時点でbashを呼び出すプログラムが影響を受けます。特に _os.system_ 関数は脆弱ですシステムに_/bin/sh_としてbashがある場合、それを呼び出すすべてのプログラム(またはいくつかの相当)も脆弱です。

popen関数canは、渡された引数に応じて脆弱になります。ドキュメントからの引用:

また、これらのバリアントのそれぞれについて、Unixではcmdがシーケンスである場合があります。その場合、引数はシェルの介入なしにプログラムに直接渡されます(- os.spawnv()と同様) )。 cmdが文字列の場合は、シェルに渡されます( os.system() の場合と同様)。

私の理解では、これは次のような呼び出しを意味します:

_os.popenx(['executable', 'some', 'arguments'])
_

次の形式のコマンドでシェルが呼び出されないため、安全です。

_os.popenx('executable some argument')
_

シェルは文字列をコマンドラインとして解釈するために使用されるため、脆弱です。

allpopen関数はpython2.6以降廃止されており、それ以降は回避されるべきであったことにも注意してください。 subprocess モジュールは、デフォルトでShellshockセーフであるサブプロセスを起動するためのはるかに優れたインターフェイスを提供します。 _Shell=True_引数を渡さない場合、プログラムはサブシェルを起動しないため、Shellshockの影響を受けません。


subprocessを安全に使用するには、_Shell=True_引数をできるだけ使用しないようにする必要があります(これは、Shellshockが発見される前にも当てはまり、セキュリティの危険性として既に十分に文書化されています)。

特に、単に実行可能ファイルを起動したい場合は _subprocess.call_ を使用します:

_subprocess.call(['executable name', 'arg1', '--opt1', 'opt-arg', ...])
_

文字列のリストを手動で記述したくない場合は、shlexモジュールを使用できます。

_subprocess.call(shlex.split('executable-name arg1 "quoted arguments are correctly handled" etc'))
_

コマンドの出力を取得する場合は、callの代わりに _check_output_ を使用します。

_cmd1 | cmd2 | cmd3_のようなコマンドのパイプラインを実行する場合でも、シェルの起動を回避できます。

_cmd1 = subprocess.Popen(cmd1_command_line, stdout=subprocess.PIPE)
cmd2 = subprocess.Popen(cmd2_command_line, stdin=cmd1.stdout, stdout=subprocess.PIPE)
cmd3 = subprocess.Popen(cmd3_command_line, stdin=cmd2.stdout, stdout=subprocess.PIPE)
_

厳密に必要な場合にのみ_Shell=True_を使用します。そのような場合は、env引数を使用して環境をシェルに明示的に渡すことを検討してください。

21
Bakuriu

はい、popenはShellshockの影響を受けます。しかし、私はあなたに提供する包括的なリストを持っていません-/ bin/bashへの呼び出し(/ bin/bashにリンクする/ bin/shへの呼び出しなど)に裏付けされたものはすべて、以下の引用で想定されています)は脆弱です。

PHP、Python、C++またはJavaで記述された一連のWebアプリは、popen()やsystem()などの関数の呼び出しを使用する場合、/への呼び出しによってサポートされるため、脆弱になる可能性があります順番にbin/sh -cとZalewskiは言います。

http://www.itnews.com.au/News/396256,further-flaws-render-Shellshock-patch-ineffective.aspx

これにより、質問に対する十分な暫定的な回答が得られることを願っています。

7
JZeolla