Python で発見された汚染のようなバグ バリアント プロトタイプ

JavaScript や類似の言語に見られる危険な脆弱性タイプに似た「クラス汚染」欠陥

プロトタイプ汚染は、JavaScript の中で最も人気のあるプロトタイプベースの言語に関連する危険なバグ クラスです。

ただし、ある研究者は、Python に適用可能なプロトタイプ汚染の亜種を発見しましたが、他のクラスベースのプログラミング言語も同様の攻撃に対して脆弱である可能性があります。

プロトタイプの汚染からクラスの汚染へ

JavaScript では、各オブジェクトは、そのオブジェクトのすべての属性と機能を含む親オブジェクトの「プロトタイプ」を継承します。 JavaScript オブジェクトは、親のプロトタイプをトラバースして、その機能にアクセスできます。

プロトタイプは実行時に変更できるため、JavaScript は動的で柔軟になりますが、危険でもあります。 プロトタイプ汚染攻撃は、この特性を悪用して JavaScript アプリケーションの動作を変更し、悪意のあるアクションを実行します。

Python などのクラスベースの言語は、おそらくこのような操作の影響を受けません。

この種のコンテンツが好きですか? あなたの経験について教えてください デイリースイング スワッグを獲得する

しかし、セキュリティ研究者の Abdulraheem Khaled は、攻撃者が Python プログラムに対してプロトタイプの汚染のような攻撃を実行できるコーディング スキームを発見しました。 彼は、彼の調査結果を文書化したブログ投稿で、それを「階級汚染」と呼んでいます。

カレドは言った デイリースイング 彼は、JavaScript プロトタイプ汚染の概念を Python に翻訳しようとしているときに攻撃を発見したと述べています。

Python クラスの操作

Python オブジェクトを汚染するために、攻撃者は、ユーザー入力を使用してオブジェクトの属性を設定するエントリ ポイントを必要とします。 ユーザー入力が属性名と値の両方を決定する場合、攻撃者はそれを悪用してプログラムの動作を操作できます。

「注目すべき重要な要素は、アプリケーションがサニタイズされていないユーザー制御可能な入力を使用してオブジェクトの属性を設定する (設定する属性名とその値を制御する) かどうかです」と Khaled 氏は語った。 デイリースイング.

ターゲット関数が再帰ループを使用してオブジェクトの属性をトラバースする場合、攻撃者は親クラス、グローバル変数などにアクセスできる可能性があります。 Khaled はこれを「安全でないマージ」と呼んでいます。

たとえば、攻撃者はそのような機能を使用して、システムによって実行されるコマンド文字列を変更したり、重要な変数の値を変更したり、重要なクラスを機能不全にすることでサービス拒否攻撃 (DoS) をトリガーしたりできます。

JavaScript とは異なり、Python クラス汚染攻撃は、組み込みオブジェクト型で可能な操作によって制限されます。

バックグラウンド プロトタイプ汚染: JavaScript アプリケーションに影響を与える危険で過小評価されている脆弱性

「JSとは違う [JavaScript]、グローバル/組み込みオブジェクト クラスは不変型であるため、属性を設定できません。 これにより、ガジェットを探す際にいくつかの制限が課せられます」と Khaled 氏は言います。

基本オブジェクト プロトタイプの変更は、JavaScript プロトタイプ汚染における主要な攻撃ベクトルの 1 つです。これにより、Python の攻撃はある程度制限されます。

しかし、Khaled は、脆弱なマージ機能により、攻撃者がグローバル アプリ内変数や、Python プログラムまたはインポートされたモジュールで定義された他のクラスへのアクセスを許可することで、この制限を克服できる可能性があることを発見しました。

野生の階級汚染

Khaled 氏によると、あらゆる種類の Python アプリケーションは、サニタイズされていないユーザー入力を受け取り、安全でないオブジェクト属性の割り当ての形式を実装している限り、この種の攻撃に対して脆弱である可能性があります。

彼の調査中に、彼はクラス汚染攻撃にさらされる危険なマージ機能を備えた一般的な Python ライブラリのいくつかのインスタンスを発見しました。

クラス汚染の最小の影響は DoS です。 しかし、攻撃は次のような Python Web アプリケーションにより深い影響を与える可能性があります。

  • 秘密鍵の上書き Flask Web アプリケーションでセッションに署名し、手動で有効なセッションを作成してアカウント乗っ取り攻撃を行うために使用されます
  • フィルターの回避 – たとえば、テンプレート ファイルをロードしようとするときに、Jinja に実装されているパス トラバーサル防止をバイパスします。 これにより、攻撃者がテンプレート ディレクトリに制限されることなく、任意のローカル ディレクトリからファイルをロードできるようになり、ローカル ファイルの開示と包含が可能になります。
  • リモートコマンド実行、COMSPEC または PATH 環境変数を上書きすることによって

「プロトタイプの汚染は間違いなく、コミュニティからもっと注目されるべきトピックの 1 つであり、最近、より注目されるようになりました」と Khaled 氏は述べています。

「階級汚染は、最近明らかになったばかりの新しい脆弱性かもしれません。 [but] 近いうちに他のプログラミング言語でも見られると思います。」

あなたも好きかも CircleCI がセキュリティ侵害を受けた後、開発者はシークレットをローテーションするように促されました

Leave a Comment

Your email address will not be published. Required fields are marked *