何が起きたか
Trail of Bits fickling 0.1.12まででは、ドット付き__qualname__(例:'Values.read_file')を持つpickleのSTACK_GLOBALオペランドは、pickleのfind_classが_getattributeを通じて任意の属性パスに解決され、モジュールレベルの関数としては解決されません。Ficklingはインポート追跡で先頭コンポーネントのみを記録するため、末尾の属性参照は呼び出しとして扱われたり分析されたりしません。OvertlyBadEvals分析パスはそれをフラグせず、check_safety()はゼロ件の所見でLIKELY_SAFEを返します。optparse.Values.read_fileに到達する細工されたpickleは、fickling.load()で読み込まれるとexec(open(filename).read(), vars)を実行します。これはcheck_safety()を明示的なセキュリティゲートとしてpickle.loads()に連鎖させるものです。これはモジュール起源の信頼の脆弱性CVE-2026-16760とは異なり、2026年10月30日時点でベンダーのmasterブランチのコミットd011709に存在し、2026年11月1日時点で完全な修正は確認されていません。
なぜ重要か
Ficklingは信頼されていないpickle/モデルファイルを検査するための防御ツールであり、MLサプライチェーン(悪意のある.pkl/.ptモデル、pickleトレーニング済みチェックポイント)の武器化経路そのものです。その安全性ゲートのバイパスにより、悪意のあるモデルファイルが「安全」としてクリアされ、MLパイプラインで逆シリアライズされると任意のコードを実行し、防御者がモデル読み込みの隔離に依存している制御を静かに無効化します。CVSS 8.8、公式パッチはまだありません。
攻撃経路
攻撃者は、STACK_GLOBALオペランドがドット付き属性パスを使用するpickleを細工し、ficklingの分析がそれを無関係なモジュール属性に解決するようにします。check_safety()はLIKELY_SAFEを返し、その後pickleが逆シリアライズされ、クラスメソッド(optparse.Values.read_file)に到達してファイルの内容を実行し、アプリケーションの権限で任意のコード実行を達成します。
影響を受けるシステム
Trail of Bits fickling <= 0.1.12 (2026年11月1日時点で完全な修正は確認されていません)
緩和策
窓の時点で公式パッチはありません。ficklingの結果は助言として扱ってください—スキャナーの判定だけに頼って信頼されていないpickleを逆シリアライズしないようにし、実行可能でないシリアライゼーションフォーマット(例:safetensors)を使用し、秘密情報なしでモデル読み込みをサンドボックス化/隔離し、ドット付き属性パス解決に対応する修正リリースについてBombadil Systems / Trail of Bitsを監視してください。