imgproxy 4.0系にRCE脆弱性、4.0.16で修正
画像変換サーバーのimgproxy 4.0.0から4.0.15に、細工したICO画像でプロセスが落ちたり、任意のコードを実行されたりする脆弱性があります。4.0.16へ更新し、更新までは到達できる範囲を絞ってください。
急ぎ度: 至急
CVSS v3は9.8、v4は9.3のcriticalで、修正版の4.0.16がすでに出ているため、該当する環境は早く更新したい脆弱性です。
関係があるか
imgproxyの4.0.0から4.0.15を、自社のサーバーやコンテナで動かしている組織が対象です。外部から画像が届く構成のサービスでは、とくに優先して確認してください。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| imgproxy(github.com/imgproxy/imgproxy/v4) | 4.0.0以上、4.0.16未満(4.0.0から4.0.15) | 4.0.16 |
確かめ方
- 1imgproxyを動かしているホストやコンテナを洗い出し、イメージのタグまたはバイナリの版を調べます。4.0.0から4.0.15なら対象です。4.0.0より前の版は影響範囲に挙がっていません。
- 2Dockerで動かしている場合は、
docker psでイメージのタグを確認します。latestのようにタグが版を示さないときは、イメージを取得した日と、コンテナ内の版を別に確認してください。 - 3ソースからビルドしている場合は、go.modで
github.com/imgproxy/imgproxy/v4の版を確認します。 - 4CDNやリバースプロキシの背後にあっても、版が該当するなら更新の対象です。
何が起きたか
画像変換サーバーのimgproxyに、ICO形式の画像を読み込む処理でメモリを壊してしまう脆弱性があります。細工したICO画像を処理させると、imgproxyのプロセスが停止したり、任意のコードを実行されたりするおそれがあります。
原因は、ICO読み込みコード(vips/icoload.c)のメモリ確保にあります。画像の中に書かれたデータサイズに固定長のヘッダー分を足して領域を確保しますが、この足し算が32ビットで一周すると、極端に小さい領域しか確保されません。その小さな領域に対して、画像が宣言したサイズ分のデータを読み書きするため、ヒープが壊れます。
弱点の種類は、ヒープベースのバッファオーバーフロー(CWE-122)、整数オーバーフロー(CWE-190)、境界外書き込み(CWE-787)です。GitHubの勧告は2026年10月6日付で、修正版は4.0.16と案内されています。
攻撃の流れ
-
1
細工ICOを渡す
攻撃者が、細工したICO画像をimgproxyに処理させます。
-
2
ICOと判定
imgproxyが画像の中身からICO形式と判断し、ICO読み込み処理に渡します。
-
3
サイズ計算が一周
画像内のデータサイズに足し算をしたとき32ビットの範囲を超え、ごく小さな領域だけが確保されます。
-
4
ヒープが壊れる
小さな領域に、宣言されたサイズ分のデータが書き込まれ、メモリが壊れます。
-
5
停止かコード実行
プロセスが落ちるか、状況によっては任意のコードが実行されます。
どう悪用されるか
認証は要りません。ネットワーク上のクライアントが、利用者の操作を待たずに悪用できると、勧告は説明しています。攻撃者がimgproxyに細工したICO画像を処理させられる位置にいれば成立します。
そのため、画像の取り込み口が外部に開いているサービスほど、リスクが高くなります。
悪用されると、まずimgproxyのプロセスが落ちて、画像配信が止まります。さらに、ヒープの破壊から任意のコード実行に至る可能性があり、CVSSでも機密性・完全性・可用性の影響がすべて高と評価されています。コードを実行された場合は、imgproxyが動いている環境の権限と、そこから届く社内の資源が危険にさらされます。
今すぐやること
-
1
動いている版を洗い出す
imgproxyを使うサービスを一覧にし、4.0.0から4.0.15が動いていないかを調べます。ステージングや検証用のコンテナも忘れずに確認してください。
docker ps --format '{{.Names}} {{.Image}}' -
2
4.0.16以降に更新する
コンテナなら新しいイメージを取得して入れ替え、ソースからビルドしているなら依存を4.0.16以降に上げて再ビルドします。入れ替えのあとは、画像の変換が通常どおり動くかを確かめます。
-
3
更新前の異常終了を調べる
更新前の期間に、imgproxyが原因不明で落ちたり再起動を繰り返したりしていないかを、コンテナのログや監視で確認します。不審な停止があれば、同じ時間帯のアクセスログも見てください。
-
4
ベンダーの告知を確認する
修正内容の詳細は、imgproxyのGitHubにあるセキュリティ勧告で確認できます。社内の構成管理に、更新した版を記録しておいてください。
すぐ更新できないとき
勧告には回避策の記載がありません。更新までのつなぎとして、一般的な対策になりますが、imgproxyへ直接アクセスできる範囲をリバースプロキシや社内ネットワークに限り、処理させる画像の取得元を信頼できるものに絞ってください。プロセスが落ちても自動で復旧するようにしておくと、停止の影響を抑えられます。ただし、コード実行は防げないため、更新までの短い期間の措置にとどめてください。
背景
imgproxyは、Goで書かれた画像変換サーバーです。WebサイトやアプリのURLに変換の指定を載せるだけで、リサイズや形式変換をその場で行うため、CDNやアプリケーションサーバーの手前に置かれます。外部から来た画像や、外部のURLから取り込む画像を、そのまま読み込む位置にあります。
今回の問題があるのは、imgproxyに含まれるICO読み込みコードです。画像形式の読み込み処理は、2023年のlibwebpの脆弱性のように、画像を開くだけでメモリが壊れる例が過去にありました。imgproxyでは、画像を受け取って読み込むところがそのまま攻撃を受ける場所になるため、画像形式の読み込みコードの脆弱性は、サーバー全体の問題として扱うことになります。
よくある質問
Q.ICO画像を配信していなければ、対象外と考えてよいですか。
Q.GitHubの勧告にCVE番号がないのですが、同じ脆弱性ですか。
まだ分かっていないこと
- 実際の攻撃での悪用や、攻撃コードの公開については、勧告に記載がありません。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| パッケージ | 影響を受ける版 → 修正版 | |
|---|---|---|
| imgproxyimgproxy |
4.0.0 以上 4.0.16 未満→ 4.0.16 |
4.0.16 |
| Gogithub.com/imgproxy/imgproxy/v3 |
すべての版→ 記載なし |
記載なし |
| Gogithub.com/imgproxy/imgproxy/v2 |
すべての版→ 記載なし |
記載なし |
| Gogithub.com/imgproxy/imgproxy |
すべての版→ 記載なし |
記載なし |
| Gogithub.com/imgproxy/imgproxy/v4 |
4.0.0 以上 4.0.16 未満→ 4.0.16 |
4.0.16 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
imgproxy from 4.0.0 before 4.0.16 contains an integer overflow in the ICO loader that allows remote attackers to trigger a heap buffer overflow via a crafted data_size value. Attackers can submit a crafted ICO image whose data_size wraps the allocation in vips/icoload.c, corrupting heap memory to crash the process or achieve code execution.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- advisory github.com
- advisory vulncheck.com
- advisory nvd.nist.gov
- advisory github.com
- package github.com
- patch github.com
- web github.com
- web github.com