サンドボックススクリプトからシステムコマンドを呼び出すことを可能にするPythonの脆弱性

Python 2.7 で発生し、2012 年に特定され、Python 3 ではまだ修正されていない、長年知られていたバグに基づいた Python コード実行システムの回避策を公開しました。このバグにより、特別にリンクされた Python コードを使用して、すでに解放されたシステムへの呼び出しを開始できます。 Python のメモリ (解放後の使用)。 当初、このエラーはセキュリティ上の脅威ではなく、非常にまれなケース (通常は人為的に作成されたもの) のみがスクリプトの異常終了につながる可能性があると考えられていました。

kn32 という仮名を持つセキュリティ研究者がこの問題に興味を持ち、os.system などのメソッドに直接アクセスせずに任意のシステム コマンドを呼び出すことを可能にする実用的なエクスプロイトを準備することに成功しました。 このエクスプロイトは純粋な Python で実装されており、外部ライブラリをインポートしたり、「code.__new__」ハンドラーをインストールしたりしなくても機能します。 フックのうち、通常は禁止されていない「builtin.__id__」のみが使用されます。 実用面では、提案されたコードを使用して、Python コードの実行は許可するものの、利用可能な呼び出しを制限するさまざまなサービスや環境 (学習環境、オンライン シェル、組み込みハンドラーなど) の分離メカニズムをバイパスできます。また、os.system などのアクセス方法も許可しません。

提案されたコードは、CPython の脆弱性を悪用して機能する os.system コールの類似物です。 このエクスプロイトは、x3-86 システム上のすべてのバージョンの Python 64 で動作し、PIE、RELRO、および CET セキュリティ モードが有効になっている場合でも Ubuntu 22.04 で安定しています。 作業は、実行可能な CPython コード内の関数の XNUMX つのアドレスに関する情報を Python コードから取得することに要約されます。 このアドレスに基づいて、メモリ内の CPython のベース アドレスと、ロードされた libc インスタンス内の system() 関数のアドレスが計算されます。 最後に、最初の引数ポインタを文字列「/bin/sh」に置き換えることで、特定のシステム アドレスへの直接ジャンプが開始されます。

サンドボックススクリプトからシステムコマンドを呼び出すことを可能にするPythonの脆弱性


出所: オープンネット.ru

コメントを追加します