脆弱性・CVE速報深刻度: 緊急

医療画像向け機械学習の基盤 MONAI で、DICOM の NaN・無限大の値が検証されず推論が異常終了・誤った結果になる不具合(CVE-2026-48705): 1.6.1 で修正

目次(5)

CVE-2026-48705

医療画像向け機械学習のフレームワーク MONAI の DICOM 読み込み(PydicomReader)が、位置・間隔などの数値に NaN(非数)や無限大が入っていても検証せずに変換行列を作り、推論の途中で異常終了したり、気づかないまま誤った結果を出したりする不具合(CVE-2026-48705、GHSA-6hp3-vr39-rqw8)が公開されました。GitHub の構造化データでは深刻度 Critical、CVSS v3.1 は 9.3 です。修正版は MONAI 1.6.1 です。影響を受けるのは、1.6.1 より前の MONAI を使い、外部から受け取った DICOM ファイルを読み込む構成です。勧告は、MONAI 上の推論サーバー MONAILabel の既定の REST API(認証なし)を攻撃の経路として説明しています(下の「影響を受ける条件」を参照)。

何が起きるか

  • 勧告によると、DICOM の数値型(DS・IS)の値を読む pydicom が、NaN・inf を既定の設定では拒否せずに受け入れます。MONAI の PydicomReader は、そこから得た PixelSpacing・ImagePositionPatient などで 4×4 の変換行列(affine)を作る際に、有限な数かどうかを確認していませんでした。
  • NaN が行列に入ると、その後の空間変換・推論・書き出しの流れにそのまま伝わります。
  • 勧告の例では、約 132 KB の細工した DICOM を MONAILabel の PUT /datastore/(既定で認証なし)から登録し、推論を呼ぶと、書き出しの段階で HTTP 500 になり、1 回あたり約 16〜18 秒の計算が無駄になったと説明しています。登録した画像は保存されるため、同じ画像 ID への推論は再び失敗するとしています。
  • 書き出しで失敗しない場合は、警告なしに幾何的に誤った分割結果が HTTP 200 で返る可能性があるとも説明しています(勧告の記載で、当サイトでは再現していません)。
  • 勧告は、同じ読み込みを使う MONAI の関連リポジトリ(MONAI Deploy App SDK など)にも影響が及ぶとしています。
  • 悪用の報告は確認できていません。CISA の KEV には載っていません(10/30 版の一覧で確認)。

影響を受ける条件

項目内容
対象pip パッケージ monai の 1.6.1 より前(GitHub の構造化データ)
前提信頼できない DICOM を PydicomReader で読み込むこと。勧告の例は、ネットワークから到達できる認証なしの MONAILabel サーバー
評価GitHub の構造化データは CVSS v3.1 9.3(Critical)。勧告の本文には「8.7 High」とあるが、同じベクトル(AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:L)の計算は 9.3 になる。どちらの数字も本記事では独自には検証していない
修正版1.6.1(2026-09-27 UTC リリース)
弱点の分類CWE-20(入力検証の不備)

修正の内容

  • 修正コミット 434c094(2026-09-03 UTC、プルリクエスト #9087)は、PydicomReader の変換行列を作る処理で、ImageOrientationPatient・ImagePositionPatient・PixelSpacing・lastImagePositionPatient などの値が有限かを確かめ、NaN・無限大なら ValueError で止めます。合成後の行列が有限でない場合も止めます。変更は monai/data/image_reader.py と、テスト tests/data/test_pydicom_reader.py です。
  • Git の比較で、このコミットは 1.6.1 のタグに含まれ(タグ側が 27 先、遅れ 0)、1.6.0 には含まれません。
  • この修正が止めるのは MONAI 側の変換行列の作成です。勧告が挙げる pydicom 側の値の受け入れや、MONAILabel の登録時の検証が変わったかは、本記事では確認できていません。

対応

  1. MONAI を 1.6.1 以上に更新します。
  2. MONAILabel などで、外部から DICOM を受け付けるサーバーは、認証やネットワークの制限で到達できる相手を絞ることを検討します(勧告が示す回避策ではなく、本記事の推定です)。
  3. 更新後も、受け付けた DICOM の数値が有限かを入口で確認する方法があります(勧告の「推奨される修正」にも同趣旨があります)。
  4. 過去に未知の DICOM を処理した環境では、異常終了や結果の不整合が出ていないかを確認します(本記事の推定)。

未確認の点

  • 悪用の報告は確認できていません。KEV にも載っていません。
  • NVD には 10/31 時点でこの CVE の詳細が見つかりませんでした(掲載前か、取得できなかった可能性があり、確認できていません)。CVSS は GitHub の勧告の値です。
  • EPSS は公開直後のため未算出です(10/31 時点で FIRST にデータなし)。
  • 勧告の再現結果(HTTP 500、無駄になる計算時間、保存された画像の影響)は当サイトでは再現していません。
  • 1.6.1 でも MONAILabel 側の登録や pydicom の挙動は変わっていない可能性があります。MONAILabel の最新版(0.8.5 が最新のリリース)が影響を受けるか、別の修正が出ているかは確認していません。
  • 関連リポジトリ(Deploy App SDK、model-zoo など)への影響の範囲は、勧告の記載に基づき、個別には確認していません。
  • 修正コミット(9/3)→ 1.6.1 リリース(9/27)→ GitHub 勧告(10/27)の順です。公開までの経緯は確認できていません。1.6.1 のタグには、このほかの変更も含まれます。
  • 日付は、タグ・コミットは Git と GitHub の記録、公開日は GitHub の記載に基づきます。

この記事について

出典

この記事を共有