ホームページ  >  記事  >  バックエンド開発  >  ImageMagick コマンド実行の脆弱性の詳細な分析

ImageMagick コマンド実行の脆弱性の詳細な分析

WBOY
WBOYオリジナル
2016-12-05 13:27:171438ブラウズ

00 はじめに

ImageMagickとは何ですか?

ImageMagick は、一般的な JPEG、GIF、PNG、PDF、PhotoCD 形式を含む 90 種類以上の画像ファイルの読み取り、書き込み、処理に使用できる強力なオープンソース グラフィックス処理ソフトウェアです。写真を切り取ったり、回転させたり、合成したり、さまざまな特殊効果を加えて加工することができます。

その強力な機能、優れたパフォーマンス、および多くの言語の拡張サポートにより、プログラム開発で広く使用されています。多くの Web サイト開発者は、ユーザー アバターの生成や画像編集など、Web 上で画像処理作業を行うために ImageMagick 拡張機能を使用することを好みます。

01 脆弱性の説明

ImageMagick は、PHP、Ruby、NodeJS、Python などの複数の言語をサポートするオープンソースの画像処理ライブラリであり、広く使用されています。 PHP imagick、Ruby rmagick と Paperclip、NodeJS imagemagick などの多くの画像処理プラグインは、すべてこれに依存して実行されます。攻撃者が悪意のあるコードを含むイメージを作成すると、ImageMagick ライブラリは HTTPPS ファイルを不適切に処理し、フィルタリングを実行せず、リモートでリモート コマンドを実行し、場合によってはサーバーを制御する可能性があります。

02 インパクト

攻撃コスト: 低い

危険レベル: 高

影響を受ける範囲: ImageMagick 6.9.3-9 より前のすべてのバージョン

03 脆弱性分析

コマンド実行の脆弱性は、ImageMagickがhttps形式のファイルを処理する過程で発生します。

ImageMagick がこれほど多くのファイル形式をサポートしている理由は、ImageMagick がこれらの画像処理ライブラリを「Delegate」(デリゲート) と名付け、各 Delegate が 1 つの形式ファイルに対応しているためです。次に、システムの system() コマンドを通じて処理するために外部ライブラリを呼び出します。外部ライブラリを呼び出すプロセスはシステムのシステム コマンドを使用して実行され、コードがコマンドを実行します。

ImageMagick デリゲートのデフォルト設定ファイル: /etc/ImageMagick/delegates.xml

具体的なコードについては、Github-ImageMagickを参照してください

https 委任行を見つけます:

リーリー
ご覧のとおり、command は https ファイルの処理時に system() 関数に取り込まれるコマンドを定義します: "wget" -q -O "%o" "https:%M"。

wget はネットワークからファイルをダウンロードするコマンドです。%M はプレースホルダーであり、次のように構成ファイルで具体的に定義する必要があります:

リーリー
%m が入力画像形式として定義されていることがわかります。これは、入力した URL アドレスです。ただし、フィルタリングを行わずに単純な文字列の結合のみを実行し、それをコマンド コマンドに直接結合したため、引用符を閉じて、「|」、「`」、「&」などを使用して他のコマンドに引用符を取り込むことができます。 、すなわち、コマンドインジェクションが形成される。

たとえば、次のコードを渡します:

リーリー
システム関数によって実行される実際のコマンドは次のとおりです:

リーリー
このようにして、ls -alコマンドが正常に実行されます。

04 悪用

この脆弱性のPOCは次のように外国人によって提供されました:

リーリー
プッシュとポップはスタック操作に使用され、一方はスタックにプッシュされ、他方はスタックからポップアウトされます。

Viewbox は SVG の表示領域のサイズを表します。または、ステージ サイズやキャンバス サイズとして想像できます。簡単に理解すると、次のパラメータに従って画面の一部を選択することになります。

fill url() は画像を現在の要素に埋め込みます;

その中で、fill url() を使用して脆弱な https デリゲートを呼び出します。ImageMagick がこのファイルを処理すると、脆弱性がトリガーされます。

添付: ImageMagick は、mvg と呼ばれる画像形式をデフォルトでサポートしています。mvg は svg 形式に似ており、ベクトル画像のコンテンツがテキスト形式で書かれており、ImageMagick の他のデリゲート (脆弱なファイルなど) をロードできるようになります。 https デリゲート) 。また、グラフィック処理プロセス中に、ImageMagick はその内容に応じて自動的に処理します。つまり、ファイルを Web サイトのアップロードに許可されている png、jpg、その他の形式として任意に定義できるため、この脆弱性が悪用されるシナリオが大幅に増加します。

利用プロセス:

次の内容を含むexploit.pngファイルを作成します:

リーリー

コマンドを実行:convertexploit.png 1.png (以下はconvertのパラメータです)

05バグ修正 最新バージョンにアップグレード

/etc/ImageMagick/policy.xml を設定して https、mvg デリゲートを無効にするか、対応するデリゲートを設定ファイルで直接削除します

リーリー

上記は、編集者が紹介した ImageMagick コマンド実行の脆弱性に関する知識です。ご質問があれば、メッセージを残してください。編集者がすぐに返信します。スクリプト ハウス Web サイトをサポートしてくださった皆様にも感謝いたします。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。