脆弱性・CVE速報深刻度: 高

pickle の安全確認ツール fickling に迂回 2 件(CVE-2026-16760・CVE-2026-118938): 「安全」と判定されたまま任意コードが動く

目次(5)

CVE-2026-16760

CVE-2026-118938

Python の pickle ファイルを検査するツール fickling(0.1.12 まで)で、危険な pickle を「ほぼ安全(LIKELY_SAFE)」と誤判定してしまう迂回が 2 件公開されました。CVE-2026-16760 と CVE-2026-118938 で、GitHub Advisory の深刻度はどちらも High、CVSS v3.1 は 8.8(CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H)、CWE-502(信頼できないデータの逆シリアル化)です。CISA の KEV には載っていません。EPSS は 2 件とも FIRST に値がなく、公開直後のため未算出です。

何が起きるか

  • fickling は、fickling.load() の中で安全確認(check_safety())をしてから pickle を読み込みます。この確認が誤って「安全」を返すと、細工された pickle がそのまま読み込まれ、利用者のプロセスの権限でコードが動きます。
  • CVE-2026-16760: 標準ライブラリのモジュールから取り込まれた名前を、中身を調べずに「安全な取り込み」として扱ってしまいます。そのため、標準ライブラリ内の危険な関数を呼ぶ pickle が検出されません。勧告が示す例は、任意コードの実行(dataclasses._create_fn、mailcap.findmatch)と、任意のパスへのファイル書き込み(readline の履歴ファイル書き出し)です。前者の 2 つは Python 3.13 でモジュールや関数が削除されているため、3.12 までが対象です。
  • CVE-2026-118938: 名前にドットを含む指定(例 Values.read_file)を、先頭の部分しか記録せず通常の取り込みとして表示するため、末尾の属性が呼び出しとして調べられません。勧告は optparse.Values.read_file(ファイルの内容を exec で実行する)を例に、任意コードの実行ができるとしています。
  • 2 件は原因が別で、別々に直せる問題だと勧告は説明しています。

影響を受ける版と修正

  • 勧告は「0.1.12 まで」としています。0.1.12 は PyPI の最新版で、2026 年 6 月 26 日(UTC)の公開です(10/31 時点で、これより新しい版は PyPI にありません)。
  • 修正版のリリースはまだ確認できません。勧告は、10/30 時点でベンダーの master ブランチに一部の対策(上の 3 モジュールを禁止リストへ追加)が入った、リリースは保留中、と書いています。
  • 勧告が挙げるコミット d011709 を GitHub で確認したところ、件名は「Analyze PyTorch ZIP records with PyTorch reader」(10/30)で、変更も cli.py・loader.py・pytorch.py とテストでした。禁止リストを変える内容は確認できず、勧告の説明と合いません。参照先のコミット番号がずれている可能性があります(推定)。
  • 勧告は、CVE-2026-118938 の迂回は master の同じ時点でも残っているとしています。つまり、どちらも利用可能な修正版はまだありません。

悪用の条件

  • fickling を「pickle を読み込んでよいかの判定」に使い、LIKELY_SAFE なら fickling.load() などで読み込む運用をしている。
  • 攻撃者が、その pickle ファイル(機械学習モデル、キャッシュ、受け取ったデータなど)を差し込める。CVSS では、利用者が読み込む操作(UI:R)が必要です。

対応

  1. fickling を使っている箇所を洗い出し、判定結果だけを根拠に pickle を読み込んでいないか確認します。
  2. 出所の分からない pickle は、fickling が「安全」と返しても読み込みません。可能なら pickle 以外の形式(safetensors、JSON など)へ移します。
  3. やむを得ず読む場合は、使用中の Python が 3.13 以降かを確認し、隔離された環境(コンテナなど権限の小さい環境)で読み込みます。ただし、optparse を使う CVE-2026-118938 は 3.13 でも通ります。
  4. 修正版が出たら更新します。リリースの有無は PyPI とリポジトリのリリース欄で確かめてください。

未確認の点

  • 修正版の版番号と時期は未確認です。上のコミットが対策に当たるかも、確認できていません。
  • NVD は 10/30 に登録されましたが、状態は Received(NVD 自身の評価は未確認)です。上の CVSS は GitHub の値です。
  • 悪用の報告は見つかっていません(KEV 掲載なし)。EPSS は未算出です。
  • 実際の環境での再現は確認していません。記載は勧告と公開情報に基づきます。

この記事について

出典

この記事を共有