web-dev-qa-db-ja.com

ファイルから複数行をリークする

私はこのバグを調査しています here 。ここで、compile()関数を使用してSyntaxErrorをトリガーすることにより、任意のファイルの最初の行がリークされる可能性があります。

Heartbleedがサーバーのメモリからデータをリークする方法など、ファイルの残りの部分をリークする方法はありますか?

Heartbleedでは、コンピューターのリスナーポートを開いて、特別に細工したリクエストでターゲットサーバーにスパムを送信し、ビット単位で応答をリークすることができます。

脆弱なpythonサンドボックスを使用しています。コードはサーバーでコンパイルされています。上記のバグにより、ファイルの最初の行がリークされる可能性があります。 builtinsと標準ライブラリを使用して、ファイルの残りの行をリークしますか?

2
Yuu

私は 投稿 pythonバグ追跡システムでそれについて説明し、いくつかのアドバイスを得ました。

pythonはファイルを1行ずつ解釈するため、終了エラーを遅らせることができます。新しい行を追加するだけで、この興味深いバグにつながります\n一度に行をリークします。

概念実証は次のとおりです。

  1. ターゲットファイルを作成
$ cat /tmp/passwd
line 1
line 2
line 3
line 4
  1. ターゲットファイルから読み取る
$ 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関数が最初に実行される必要があります。

1
Yuu