ImageMagick

PHPで画像処理する際に使用する拡張モジュール Imagick を使用するにあたり、ImageMagickの脆弱性が気になるところ。画像ファイルをアップロードするような機能を実装する場合のセキュリティ対策を考えます。

ImageMagickのバージョン

ImageMagickのバージョンをチェックします。(asof 2021/7)

code$ convert --version

エックスサーバー

PHP 7.3, PHP 7.4, PHP 8.0
ImageMagick version: ImageMagick 6.9.10-68

コアサーバー

PHP 7.4 (PHP 8.0 ではImagick使用できない)
ImageMagick version: ImageMagick 6.9.11-60

※Imagickの追加が必要

例)/public_html/.fast-cgi-bin/php74.ini; see. https://help.coreserver.jp/faq/
extension_dir = "/usr/local/lib/php/extensions/"
extension = "php74_imagick.so"

ImageMagick サポートされているファイル形式

画像情報を取得できるコマンド identify を使って 、サポートされているファイル形式を取得できます。

コマンド$ identify -list format

ポリシーによるセキュリティー対策

ImageMagickのセキュリティーポリシーファイルにより、トランスコードする画像形式を絞りこみます。

~/.config/ImageMagick/policy.xml<policymap>
<policy domain="delegate" rights="none" pattern="*" />
<policy domain="filter" rights="none" pattern="*" />
<policy domain="coder" rights="none" pattern="*" />
<policy domain="coder" rights="read|write" pattern="{PNG,JPEG,JPG,GIF,WEBP}" />
</policymap>

反映を確認します。

ポリシー確認$ identify -list policy

Path: /path/to/.config/ImageMagick/policy.xml
  Policy: Delegate
    rights: None
    pattern: *
  Policy: Filter
    rights: None
    pattern: *
  Policy: Coder
    rights: None
    pattern: *
  Policy: Coder
    rights: Read Write
    pattern: {PNG,JPEG,JPG,GIF,WEBP}

Path: [built-in]
  Policy: Undefined
    rights: None

Webアプリで独自のポリシーを適用したい場合は、環境変数が使用できます。
https://www.imagemagick.org/script/resources.php#environment

プログラムによるセキュリティ対策

ポリシーによる画像フォーマットの絞り込みは、紐づくフォーマットも可能になるような緩さがあるので、プログラムでもImageMagickでの処理前にチェックします。

❧ ❧ ❧

その他

現在のリソースを確認するには、こちら。

現在の設定確認$ identify -list resource

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です