私はこのバグを調査しています here 。ここで、compile()
関数を使用してSyntaxErrorをトリガーすることにより、任意のファイルの最初の行がリークされる可能性があります。
Heartbleedがサーバーのメモリからデータをリークする方法など、ファイルの残りの部分をリークする方法はありますか?
Heartbleedでは、コンピューターのリスナーポートを開いて、特別に細工したリクエストでターゲットサーバーにスパムを送信し、ビット単位で応答をリークすることができます。
脆弱なpythonサンドボックスを使用しています。コードはサーバーでコンパイルされています。上記のバグにより、ファイルの最初の行がリークされる可能性があります。 builtins
と標準ライブラリを使用して、ファイルの残りの行をリークしますか?
私は 投稿 pythonバグ追跡システムでそれについて説明し、いくつかのアドバイスを得ました。
pythonはファイルを1行ずつ解釈するため、終了エラーを遅らせることができます。新しい行を追加するだけで、この興味深いバグにつながります\n
一度に行をリークします。
概念実証は次のとおりです。
$ cat /tmp/passwd
line 1
line 2
line 3
line 4
$ python -c 'compile("\n\n\nyield", "/tmp/passwd", "exec")'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/passwd", line 4
line 4
^
SyntaxError: 'yield' outside function
単純なキャッチループを記述することにより、システム上の不明なファイルのすべての行をリークする可能性があります。ただし、トラッカーのレビューアが述べたように、これはサンドボックスエスケープの場合にのみ実用的です。 Pythonはサンドボックス化用に構築されていませんが、誰かがサンドボックス化を実装する場合、compile
関数が最初に実行される必要があります。